diff options
Diffstat (limited to 'test')
17 files changed, 485 insertions, 6 deletions
diff --git a/test/pleroma/config/transfer_task_test.exs b/test/pleroma/config/transfer_task_test.exs index 7d51fd84c..9e3f11f1a 100644 --- a/test/pleroma/config/transfer_task_test.exs +++ b/test/pleroma/config/transfer_task_test.exs @@ -82,6 +82,7 @@ defmodule Pleroma.Config.TransferTaskTest do        on_exit(fn -> Restarter.Pleroma.refresh() end)      end +    @tag :erratic      test "don't restart if no reboot time settings were changed" do        clear_config(:emoji)        insert(:config, key: :emoji, value: [groups: [a: 1, b: 2]]) @@ -92,18 +93,21 @@ defmodule Pleroma.Config.TransferTaskTest do               )      end +    @tag :erratic      test "on reboot time key" do        clear_config(:shout)        insert(:config, key: :shout, value: [enabled: false])        assert capture_log(fn -> TransferTask.start_link([]) end) =~ "pleroma restarted"      end +    @tag :erratic      test "on reboot time subkey" do        clear_config(Pleroma.Captcha)        insert(:config, key: Pleroma.Captcha, value: [seconds_valid: 60])        assert capture_log(fn -> TransferTask.start_link([]) end) =~ "pleroma restarted"      end +    @tag :erratic      test "don't restart pleroma on reboot time key and subkey if there is false flag" do        clear_config(:shout)        clear_config(Pleroma.Captcha) diff --git a/test/pleroma/user/query_test.exs b/test/pleroma/user/query_test.exs index 357016e3e..363da7665 100644 --- a/test/pleroma/user/query_test.exs +++ b/test/pleroma/user/query_test.exs @@ -34,4 +34,14 @@ defmodule Pleroma.User.QueryTest do        assert %{internal: true} |> Query.build() |> Repo.aggregate(:count) == 2      end    end + +  test "is_suggested param" do +    _user1 = insert(:user, is_suggested: false) +    user2 = insert(:user, is_suggested: true) + +    assert [^user2] = +             %{is_suggested: true} +             |> User.Query.build() +             |> Repo.all() +  end  end diff --git a/test/pleroma/user_test.exs b/test/pleroma/user_test.exs index 12d5d5db6..6cd93c34c 100644 --- a/test/pleroma/user_test.exs +++ b/test/pleroma/user_test.exs @@ -1718,6 +1718,38 @@ defmodule Pleroma.UserTest do      assert user.banner == %{}    end +  describe "set_suggestion" do +    test "suggests a user" do +      user = insert(:user, is_suggested: false) +      refute user.is_suggested +      {:ok, user} = User.set_suggestion(user, true) +      assert user.is_suggested +    end + +    test "suggests a list of users" do +      unsuggested_users = [ +        insert(:user, is_suggested: false), +        insert(:user, is_suggested: false), +        insert(:user, is_suggested: false) +      ] + +      {:ok, users} = User.set_suggestion(unsuggested_users, true) + +      assert Enum.count(users) == 3 + +      Enum.each(users, fn user -> +        assert user.is_suggested +      end) +    end + +    test "unsuggests a user" do +      user = insert(:user, is_suggested: true) +      assert user.is_suggested +      {:ok, user} = User.set_suggestion(user, false) +      refute user.is_suggested +    end +  end +    test "get_public_key_for_ap_id fetches a user that's not in the db" do      assert {:ok, _key} = User.get_public_key_for_ap_id("http://mastodon.example.org/users/admin")    end diff --git a/test/pleroma/web/activity_pub/side_effects_test.exs b/test/pleroma/web/activity_pub/side_effects_test.exs index d0988619d..c6155ed18 100644 --- a/test/pleroma/web/activity_pub/side_effects_test.exs +++ b/test/pleroma/web/activity_pub/side_effects_test.exs @@ -88,6 +88,16 @@ defmodule Pleroma.Web.ActivityPub.SideEffectsTest do        assert User.blocks?(user, blocked)      end +    test "it updates following relationship", %{user: user, blocked: blocked, block: block} do +      {:ok, _, _} = SideEffects.handle(block) + +      refute Pleroma.FollowingRelationship.get(user, blocked) +      assert User.get_follow_state(user, blocked) == nil +      assert User.get_follow_state(blocked, user) == nil +      assert User.get_follow_state(user, blocked, nil) == nil +      assert User.get_follow_state(blocked, user, nil) == nil +    end +      test "it blocks but does not unfollow if the relevant setting is set", %{        user: user,        blocked: blocked, @@ -542,4 +552,74 @@ defmodule Pleroma.Web.ActivityPub.SideEffectsTest do        end      end    end + +  describe "removing a follower" do +    setup do +      user = insert(:user) +      followed = insert(:user) + +      {:ok, _, _, follow_activity} = CommonAPI.follow(user, followed) + +      {:ok, reject_data, []} = Builder.reject(followed, follow_activity) +      {:ok, reject, _meta} = ActivityPub.persist(reject_data, local: true) + +      %{user: user, followed: followed, reject: reject} +    end + +    test "", %{user: user, followed: followed, reject: reject} do +      assert User.following?(user, followed) +      assert Pleroma.FollowingRelationship.get(user, followed) + +      {:ok, _, _} = SideEffects.handle(reject) + +      refute User.following?(user, followed) +      refute Pleroma.FollowingRelationship.get(user, followed) +      assert User.get_follow_state(user, followed) == nil +      assert User.get_follow_state(user, followed, nil) == nil +    end +  end + +  describe "removing a follower from remote" do +    setup do +      user = insert(:user) +      followed = insert(:user, local: false) + +      # Mock a local-to-remote follow +      {:ok, follow_data, []} = Builder.follow(user, followed) + +      follow_data = +        follow_data +        |> Map.put("state", "accept") + +      {:ok, follow, _meta} = ActivityPub.persist(follow_data, local: true) +      {:ok, _, _} = SideEffects.handle(follow) + +      # Mock a remote-to-local accept +      {:ok, accept_data, _} = Builder.accept(followed, follow) +      {:ok, accept, _} = ActivityPub.persist(accept_data, local: false) +      {:ok, _, _} = SideEffects.handle(accept) + +      # Mock a remote-to-local reject +      {:ok, reject_data, []} = Builder.reject(followed, follow) +      {:ok, reject, _meta} = ActivityPub.persist(reject_data, local: false) + +      %{user: user, followed: followed, reject: reject} +    end + +    test "", %{user: user, followed: followed, reject: reject} do +      assert User.following?(user, followed) +      assert Pleroma.FollowingRelationship.get(user, followed) + +      {:ok, _, _} = SideEffects.handle(reject) + +      refute User.following?(user, followed) +      refute Pleroma.FollowingRelationship.get(user, followed) + +      assert Pleroma.Web.ActivityPub.Utils.fetch_latest_follow(user, followed).data["state"] == +               "reject" + +      assert User.get_follow_state(user, followed) == nil +      assert User.get_follow_state(user, followed, nil) == nil +    end +  end  end diff --git a/test/pleroma/web/activity_pub/utils_test.exs b/test/pleroma/web/activity_pub/utils_test.exs index ee3e1014e..62dc02f61 100644 --- a/test/pleroma/web/activity_pub/utils_test.exs +++ b/test/pleroma/web/activity_pub/utils_test.exs @@ -213,6 +213,20 @@ defmodule Pleroma.Web.ActivityPub.UtilsTest do        assert refresh_record(follow_activity).data["state"] == "accept"        assert refresh_record(follow_activity_two).data["state"] == "accept"      end + +    test "also updates the state of accepted follows" do +      user = insert(:user) +      follower = insert(:user) + +      {:ok, _, _, follow_activity} = CommonAPI.follow(follower, user) +      {:ok, _, _, follow_activity_two} = CommonAPI.follow(follower, user) + +      {:ok, follow_activity_two} = +        Utils.update_follow_state_for_all(follow_activity_two, "reject") + +      assert refresh_record(follow_activity).data["state"] == "reject" +      assert refresh_record(follow_activity_two).data["state"] == "reject" +    end    end    describe "update_follow_state/2" do diff --git a/test/pleroma/web/admin_api/controllers/user_controller_test.exs b/test/pleroma/web/admin_api/controllers/user_controller_test.exs index d9da34f6e..b199fa704 100644 --- a/test/pleroma/web/admin_api/controllers/user_controller_test.exs +++ b/test/pleroma/web/admin_api/controllers/user_controller_test.exs @@ -873,6 +873,56 @@ defmodule Pleroma.Web.AdminAPI.UserControllerTest do               "@#{admin.nickname} approved users: @#{user_one.nickname}, @#{user_two.nickname}"    end +  test "PATCH /api/pleroma/admin/users/suggest", %{admin: admin, conn: conn} do +    user1 = insert(:user, is_suggested: false) +    user2 = insert(:user, is_suggested: false) + +    response = +      conn +      |> put_req_header("content-type", "application/json") +      |> patch( +        "/api/pleroma/admin/users/suggest", +        %{nicknames: [user1.nickname, user2.nickname]} +      ) +      |> json_response_and_validate_schema(200) + +    assert Enum.map(response["users"], & &1["is_suggested"]) == [true, true] +    [user1, user2] = Repo.reload!([user1, user2]) + +    assert user1.is_suggested +    assert user2.is_suggested + +    log_entry = Repo.one(ModerationLog) + +    assert ModerationLog.get_log_entry_message(log_entry) == +             "@#{admin.nickname} added suggested users: @#{user1.nickname}, @#{user2.nickname}" +  end + +  test "PATCH /api/pleroma/admin/users/unsuggest", %{admin: admin, conn: conn} do +    user1 = insert(:user, is_suggested: true) +    user2 = insert(:user, is_suggested: true) + +    response = +      conn +      |> put_req_header("content-type", "application/json") +      |> patch( +        "/api/pleroma/admin/users/unsuggest", +        %{nicknames: [user1.nickname, user2.nickname]} +      ) +      |> json_response_and_validate_schema(200) + +    assert Enum.map(response["users"], & &1["is_suggested"]) == [false, false] +    [user1, user2] = Repo.reload!([user1, user2]) + +    refute user1.is_suggested +    refute user2.is_suggested + +    log_entry = Repo.one(ModerationLog) + +    assert ModerationLog.get_log_entry_message(log_entry) == +             "@#{admin.nickname} removed suggested users: @#{user1.nickname}, @#{user2.nickname}" +  end +    test "PATCH /api/pleroma/admin/users/:nickname/toggle_activation", %{admin: admin, conn: conn} do      user = insert(:user) @@ -906,6 +956,7 @@ defmodule Pleroma.Web.AdminAPI.UserControllerTest do        "display_name" => HTML.strip_tags(user.name || user.nickname),        "is_confirmed" => true,        "is_approved" => true, +      "is_suggested" => false,        "url" => user.ap_id,        "registration_reason" => nil,        "actor_type" => "Person", diff --git a/test/pleroma/web/manifest_controller_test.exs b/test/pleroma/web/manifest_controller_test.exs new file mode 100644 index 000000000..b7a4940db --- /dev/null +++ b/test/pleroma/web/manifest_controller_test.exs @@ -0,0 +1,17 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2021 Pleroma Authors <https://pleroma.social/> +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Web.ManifestControllerTest do +  use Pleroma.Web.ConnCase + +  setup do +    clear_config([:instance, :name], "Manifest Test") +    clear_config([:manifest, :theme_color], "#ff0000") +  end + +  test "manifest.json", %{conn: conn} do +    conn = get(conn, "/manifest.json") +    assert %{"name" => "Manifest Test", "theme_color" => "#ff0000"} = json_response(conn, 200) +  end +end diff --git a/test/pleroma/web/mastodon_api/controllers/account_controller_test.exs b/test/pleroma/web/mastodon_api/controllers/account_controller_test.exs index a92a58224..966a4072d 100644 --- a/test/pleroma/web/mastodon_api/controllers/account_controller_test.exs +++ b/test/pleroma/web/mastodon_api/controllers/account_controller_test.exs @@ -922,6 +922,27 @@ defmodule Pleroma.Web.MastodonAPI.AccountControllerTest do                 |> json_response_and_validate_schema(200)      end +    test "following with subscription and unsubscribing" do +      %{conn: conn} = oauth_access(["follow"]) +      followed = insert(:user) + +      ret_conn = +        conn +        |> put_req_header("content-type", "application/json") +        |> post("/api/v1/accounts/#{followed.id}/follow", %{notify: true}) + +      assert %{"id" => _id, "subscribing" => true} = +               json_response_and_validate_schema(ret_conn, 200) + +      ret_conn = +        conn +        |> put_req_header("content-type", "application/json") +        |> post("/api/v1/accounts/#{followed.id}/follow", %{notify: false}) + +      assert %{"id" => _id, "subscribing" => false} = +               json_response_and_validate_schema(ret_conn, 200) +    end +      test "following / unfollowing errors", %{user: user, conn: conn} do        # self follow        conn_res = post(conn, "/api/v1/accounts/#{user.id}/follow") @@ -1776,4 +1797,21 @@ defmodule Pleroma.Web.MastodonAPI.AccountControllerTest do      assert [%{"id" => ^id2}] = result    end + +  test "create a note on a user" do +    %{conn: conn} = oauth_access(["write:accounts", "read:follows"]) +    other_user = insert(:user) + +    conn +    |> put_req_header("content-type", "application/json") +    |> post("/api/v1/accounts/#{other_user.id}/note", %{ +      "comment" => "Example note" +    }) + +    assert [%{"note" => "Example note"}] = +             conn +             |> put_req_header("content-type", "application/json") +             |> get("/api/v1/accounts/relationships?id=#{other_user.id}") +             |> json_response_and_validate_schema(200) +  end  end diff --git a/test/pleroma/web/mastodon_api/controllers/directory_controller_test.exs b/test/pleroma/web/mastodon_api/controllers/directory_controller_test.exs new file mode 100644 index 000000000..b8f55f832 --- /dev/null +++ b/test/pleroma/web/mastodon_api/controllers/directory_controller_test.exs @@ -0,0 +1,46 @@ +defmodule Pleroma.Web.MastodonAPI.DirectoryControllerTest do +  use Pleroma.Web.ConnCase, async: true +  alias Pleroma.Web.CommonAPI +  import Pleroma.Factory + +  test "GET /api/v1/directory with :profile_directory disabled returns empty array", %{conn: conn} do +    clear_config([:instance, :profile_directory], false) + +    insert(:user, is_discoverable: true) +    insert(:user, is_discoverable: true) + +    result = +      conn +      |> get("/api/v1/directory") +      |> json_response_and_validate_schema(200) + +    assert result == [] +  end + +  test "GET /api/v1/directory returns discoverable users only", %{conn: conn} do +    %{id: user_id} = insert(:user, is_discoverable: true) +    insert(:user, is_discoverable: false) + +    result = +      conn +      |> get("/api/v1/directory") +      |> json_response_and_validate_schema(200) + +    assert [%{"id" => ^user_id}] = result +  end + +  test "GET /api/v1/directory returns users sorted by most recent statuses", %{conn: conn} do +    insert(:user, is_discoverable: true) +    %{id: user_id} = user = insert(:user, is_discoverable: true) +    insert(:user, is_discoverable: true) + +    {:ok, _activity} = CommonAPI.post(user, %{status: "yay i'm discoverable"}) + +    result = +      conn +      |> get("/api/v1/directory?order=active") +      |> json_response_and_validate_schema(200) + +    assert [%{"id" => ^user_id} | _tail] = result +  end +end diff --git a/test/pleroma/web/mastodon_api/controllers/suggestion_controller_test.exs b/test/pleroma/web/mastodon_api/controllers/suggestion_controller_test.exs index 168966fc9..89273e67b 100644 --- a/test/pleroma/web/mastodon_api/controllers/suggestion_controller_test.exs +++ b/test/pleroma/web/mastodon_api/controllers/suggestion_controller_test.exs @@ -4,8 +4,11 @@  defmodule Pleroma.Web.MastodonAPI.SuggestionControllerTest do    use Pleroma.Web.ConnCase, async: true +  alias Pleroma.UserRelationship +  alias Pleroma.Web.CommonAPI +  import Pleroma.Factory -  setup do: oauth_access(["read"]) +  setup do: oauth_access(["read", "write"])    test "returns empty result", %{conn: conn} do      res = @@ -15,4 +18,66 @@ defmodule Pleroma.Web.MastodonAPI.SuggestionControllerTest do      assert res == []    end + +  test "returns v2 suggestions", %{conn: conn} do +    %{id: user_id} = insert(:user, is_suggested: true) + +    res = +      conn +      |> get("/api/v2/suggestions") +      |> json_response_and_validate_schema(200) + +    assert [%{"source" => "staff", "account" => %{"id" => ^user_id}}] = res +  end + +  test "returns v2 suggestions excluding dismissed accounts", %{conn: conn} do +    %{id: user_id} = insert(:user, is_suggested: true) + +    conn +    |> delete("/api/v1/suggestions/#{user_id}") +    |> json_response_and_validate_schema(200) + +    res = +      conn +      |> get("/api/v2/suggestions") +      |> json_response_and_validate_schema(200) + +    assert [] = res +  end + +  test "returns v2 suggestions excluding blocked accounts", %{conn: conn, user: blocker} do +    blocked = insert(:user, is_suggested: true) +    {:ok, _} = CommonAPI.block(blocker, blocked) + +    res = +      conn +      |> get("/api/v2/suggestions") +      |> json_response_and_validate_schema(200) + +    assert [] = res +  end + +  test "returns v2 suggestions excluding followed accounts", %{conn: conn, user: follower} do +    followed = insert(:user, is_suggested: true) +    {:ok, _, _, _} = CommonAPI.follow(follower, followed) + +    res = +      conn +      |> get("/api/v2/suggestions") +      |> json_response_and_validate_schema(200) + +    assert [] = res +  end + +  test "dismiss suggestion", %{conn: conn, user: source} do +    target = insert(:user, is_suggested: true) + +    res = +      conn +      |> delete("/api/v1/suggestions/#{target.id}") +      |> json_response_and_validate_schema(200) + +    assert res == %{} +    assert UserRelationship.exists?(:suggestion_dismiss, source, target) +  end  end diff --git a/test/pleroma/web/mastodon_api/views/account_view_test.exs b/test/pleroma/web/mastodon_api/views/account_view_test.exs index 60881756d..c23ffb966 100644 --- a/test/pleroma/web/mastodon_api/views/account_view_test.exs +++ b/test/pleroma/web/mastodon_api/views/account_view_test.exs @@ -74,6 +74,7 @@ defmodule Pleroma.Web.MastodonAPI.AccountViewTest do          fields: []        },        fqn: "shp@shitposter.club", +      last_status_at: nil,        pleroma: %{          ap_id: user.ap_id,          also_known_as: ["https://shitposter.zone/users/shp"], @@ -83,6 +84,7 @@ defmodule Pleroma.Web.MastodonAPI.AccountViewTest do          tags: [],          is_admin: false,          is_moderator: false, +        is_suggested: false,          hide_favorites: true,          hide_followers: false,          hide_follows: false, @@ -174,6 +176,7 @@ defmodule Pleroma.Web.MastodonAPI.AccountViewTest do          fields: []        },        fqn: "shp@shitposter.club", +      last_status_at: nil,        pleroma: %{          ap_id: user.ap_id,          also_known_as: [], @@ -183,6 +186,7 @@ defmodule Pleroma.Web.MastodonAPI.AccountViewTest do          tags: [],          is_admin: false,          is_moderator: false, +        is_suggested: false,          hide_favorites: true,          hide_followers: false,          hide_follows: false, @@ -268,10 +272,12 @@ defmodule Pleroma.Web.MastodonAPI.AccountViewTest do        muting: false,        muting_notifications: false,        subscribing: false, +      notifying: false,        requested: false,        domain_blocking: false,        showing_reblogs: true, -      endorsed: false +      endorsed: false, +      note: ""      }      test "represent a relationship for the following and followed user" do @@ -293,6 +299,7 @@ defmodule Pleroma.Web.MastodonAPI.AccountViewTest do              muting: true,              muting_notifications: true,              subscribing: true, +            notifying: true,              showing_reblogs: false,              id: to_string(other_user.id)            } diff --git a/test/pleroma/web/mastodon_api/views/suggestion_view_test.exs b/test/pleroma/web/mastodon_api/views/suggestion_view_test.exs new file mode 100644 index 000000000..5aae36ce9 --- /dev/null +++ b/test/pleroma/web/mastodon_api/views/suggestion_view_test.exs @@ -0,0 +1,34 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2021 Pleroma Authors <https://pleroma.social/> +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Web.MastodonAPI.SuggestionViewTest do +  use Pleroma.DataCase, async: true +  import Pleroma.Factory +  alias Pleroma.Web.MastodonAPI.SuggestionView, as: View + +  test "show.json" do +    user = insert(:user, is_suggested: true) +    json = View.render("show.json", %{user: user, source: :staff, skip_visibility_check: true}) + +    assert json.source == :staff +    assert json.account.id == user.id +  end + +  test "index.json" do +    user1 = insert(:user, is_suggested: true) +    user2 = insert(:user, is_suggested: true) +    user3 = insert(:user, is_suggested: true) + +    [suggestion1, suggestion2, suggestion3] = +      View.render("index.json", %{ +        users: [user1, user2, user3], +        source: :staff, +        skip_visibility_check: true +      }) + +    assert suggestion1.source == :staff +    assert suggestion2.account.id == user2.id +    assert suggestion3.account.url == user3.ap_id +  end +end diff --git a/test/pleroma/web/o_status/o_status_controller_test.exs b/test/pleroma/web/o_status/o_status_controller_test.exs index 81d669837..41aef98b1 100644 --- a/test/pleroma/web/o_status/o_status_controller_test.exs +++ b/test/pleroma/web/o_status/o_status_controller_test.exs @@ -343,4 +343,54 @@ defmodule Pleroma.Web.OStatus.OStatusControllerTest do        |> response(200)      end    end + +  describe "notice compatibility routes" do +    test "Soapbox FE", %{conn: conn} do +      user = insert(:user) +      note_activity = insert(:note_activity, user: user) + +      resp = +        conn +        |> put_req_header("accept", "text/html") +        |> get("/@#{user.nickname}/posts/#{note_activity.id}") +        |> response(200) + +      expected = +        "<meta content=\"#{Endpoint.url()}/notice/#{note_activity.id}\" property=\"og:url\">" + +      assert resp =~ expected +    end + +    test "Mastodon", %{conn: conn} do +      user = insert(:user) +      note_activity = insert(:note_activity, user: user) + +      resp = +        conn +        |> put_req_header("accept", "text/html") +        |> get("/@#{user.nickname}/#{note_activity.id}") +        |> response(200) + +      expected = +        "<meta content=\"#{Endpoint.url()}/notice/#{note_activity.id}\" property=\"og:url\">" + +      assert resp =~ expected +    end + +    test "Twitter", %{conn: conn} do +      user = insert(:user) +      note_activity = insert(:note_activity, user: user) + +      resp = +        conn +        |> put_req_header("accept", "text/html") +        |> get("/#{user.nickname}/status/#{note_activity.id}") +        |> response(200) + +      expected = +        "<meta content=\"#{Endpoint.url()}/notice/#{note_activity.id}\" property=\"og:url\">" + +      assert resp =~ expected +    end +  end  end diff --git a/test/pleroma/web/plugs/frontend_static_plug_test.exs b/test/pleroma/web/plugs/frontend_static_plug_test.exs index 82e955c25..4b3925ad2 100644 --- a/test/pleroma/web/plugs/frontend_static_plug_test.exs +++ b/test/pleroma/web/plugs/frontend_static_plug_test.exs @@ -86,6 +86,8 @@ defmodule Pleroma.Web.Plugs.FrontendStaticPlugTest do        "objects",        "activities",        "notice", +      "@:nickname", +      ":nickname",        "users",        "tags",        "mailer", @@ -94,8 +96,10 @@ defmodule Pleroma.Web.Plugs.FrontendStaticPlugTest do        "internal",        ".well-known",        "nodeinfo", +      "manifest.json",        "auth",        "proxy", +      "phoenix",        "test",        "user_exists",        "check_password" diff --git a/test/pleroma/web/plugs/rate_limiter_test.exs b/test/pleroma/web/plugs/rate_limiter_test.exs index d007e3f26..b7cfde1f7 100644 --- a/test/pleroma/web/plugs/rate_limiter_test.exs +++ b/test/pleroma/web/plugs/rate_limiter_test.exs @@ -48,6 +48,7 @@ defmodule Pleroma.Web.Plugs.RateLimiterTest do      refute RateLimiter.disabled?(build_conn())    end +  @tag :erratic    test "it restricts based on config values" do      limiter_name = :test_plug_opts      scale = 80 @@ -137,6 +138,7 @@ defmodule Pleroma.Web.Plugs.RateLimiterTest do    end    describe "unauthenticated users" do +    @tag :erratic      test "are restricted based on remote IP" do        limiter_name = :test_unauthenticated        clear_config([:rate_limit, limiter_name], [{1000, 5}, {1, 10}]) @@ -174,6 +176,7 @@ defmodule Pleroma.Web.Plugs.RateLimiterTest do        :ok      end +    @tag :erratic      test "can have limits separate from unauthenticated connections" do        limiter_name = :test_authenticated1 @@ -199,6 +202,7 @@ defmodule Pleroma.Web.Plugs.RateLimiterTest do        assert conn.halted      end +    @tag :erratic      test "different users are counted independently" do        limiter_name = :test_authenticated2        clear_config([:rate_limit, limiter_name], [{1, 10}, {1000, 5}]) diff --git a/test/pleroma/web/twitter_api/util_controller_test.exs b/test/pleroma/web/twitter_api/util_controller_test.exs index 3380aec22..ee658ddf6 100644 --- a/test/pleroma/web/twitter_api/util_controller_test.exs +++ b/test/pleroma/web/twitter_api/util_controller_test.exs @@ -473,7 +473,10 @@ defmodule Pleroma.Web.TwitterAPI.UtilControllerTest do      test "with proper permissions and wrong or missing password", %{conn: conn} do        for params <- [%{"password" => "hi"}, %{}] do -        ret_conn = post(conn, "/api/pleroma/delete_account", params) +        ret_conn = +          conn +          |> put_req_header("content-type", "application/json") +          |> post("/api/pleroma/delete_account", params)          assert json_response_and_validate_schema(ret_conn, 200) == %{                   "error" => "Invalid password." @@ -481,8 +484,28 @@ defmodule Pleroma.Web.TwitterAPI.UtilControllerTest do        end      end -    test "with proper permissions and valid password", %{conn: conn, user: user} do -      conn = post(conn, "/api/pleroma/delete_account?password=test") +    test "with proper permissions and valid password (URL query)", %{conn: conn, user: user} do +      conn = +        conn +        |> put_req_header("content-type", "application/json") +        |> post("/api/pleroma/delete_account?password=test") + +      ObanHelpers.perform_all() +      assert json_response_and_validate_schema(conn, 200) == %{"status" => "success"} + +      user = User.get_by_id(user.id) +      refute user.is_active +      assert user.name == nil +      assert user.bio == "" +      assert user.password_hash == nil +    end + +    test "with proper permissions and valid password (JSON body)", %{conn: conn, user: user} do +      conn = +        conn +        |> put_req_header("content-type", "application/json") +        |> post("/api/pleroma/delete_account", %{password: "test"}) +        ObanHelpers.perform_all()        assert json_response_and_validate_schema(conn, 200) == %{"status" => "success"} diff --git a/test/test_helper.exs b/test/test_helper.exs index 0c9783076..9fb41e985 100644 --- a/test/test_helper.exs +++ b/test/test_helper.exs @@ -3,7 +3,7 @@  # SPDX-License-Identifier: AGPL-3.0-only  os_exclude = if :os.type() == {:unix, :darwin}, do: [skip_on_mac: true], else: [] -ExUnit.start(exclude: [:federated | os_exclude]) +ExUnit.start(exclude: [:federated, :erratic] ++ os_exclude)  Ecto.Adapters.SQL.Sandbox.mode(Pleroma.Repo, :manual)  | 
