diff options
Diffstat (limited to 'test/web/admin_api')
| -rw-r--r-- | test/web/admin_api/admin_api_controller_test.exs | 566 | 
1 files changed, 211 insertions, 355 deletions
diff --git a/test/web/admin_api/admin_api_controller_test.exs b/test/web/admin_api/admin_api_controller_test.exs index 49ff005b6..a3fbb6041 100644 --- a/test/web/admin_api/admin_api_controller_test.exs +++ b/test/web/admin_api/admin_api_controller_test.exs @@ -26,8 +26,16 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do      :ok    end -  clear_config([:auth, :enforce_oauth_admin_scope_usage]) do -    Pleroma.Config.put([:auth, :enforce_oauth_admin_scope_usage], false) +  setup do +    admin = insert(:user, is_admin: true) +    token = insert(:oauth_admin_token, user: admin) + +    conn = +      build_conn() +      |> assign(:user, admin) +      |> assign(:token, token) + +    {:ok, %{admin: admin, token: token, conn: conn}}    end    describe "with [:auth, :enforce_oauth_admin_scope_usage]," do @@ -35,9 +43,9 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do        Pleroma.Config.put([:auth, :enforce_oauth_admin_scope_usage], true)      end -    test "GET /api/pleroma/admin/users/:nickname requires admin:read:accounts or broader scope" do +    test "GET /api/pleroma/admin/users/:nickname requires admin:read:accounts or broader scope", +         %{admin: admin} do        user = insert(:user) -      admin = insert(:user, is_admin: true)        url = "/api/pleroma/admin/users/#{user.nickname}"        good_token1 = insert(:oauth_token, user: admin, scopes: ["admin"]) @@ -80,14 +88,67 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do      end    end +  describe "unless [:auth, :enforce_oauth_admin_scope_usage]," do +    clear_config([:auth, :enforce_oauth_admin_scope_usage]) do +      Pleroma.Config.put([:auth, :enforce_oauth_admin_scope_usage], false) +    end + +    test "GET /api/pleroma/admin/users/:nickname requires " <> +           "read:accounts or admin:read:accounts or broader scope", +         %{admin: admin} do +      user = insert(:user) +      url = "/api/pleroma/admin/users/#{user.nickname}" + +      good_token1 = insert(:oauth_token, user: admin, scopes: ["admin"]) +      good_token2 = insert(:oauth_token, user: admin, scopes: ["admin:read"]) +      good_token3 = insert(:oauth_token, user: admin, scopes: ["admin:read:accounts"]) +      good_token4 = insert(:oauth_token, user: admin, scopes: ["read:accounts"]) +      good_token5 = insert(:oauth_token, user: admin, scopes: ["read"]) + +      good_tokens = [good_token1, good_token2, good_token3, good_token4, good_token5] + +      bad_token1 = insert(:oauth_token, user: admin, scopes: ["read:accounts:partial"]) +      bad_token2 = insert(:oauth_token, user: admin, scopes: ["admin:read:accounts:partial"]) +      bad_token3 = nil + +      for good_token <- good_tokens do +        conn = +          build_conn() +          |> assign(:user, admin) +          |> assign(:token, good_token) +          |> get(url) + +        assert json_response(conn, 200) +      end + +      for good_token <- good_tokens do +        conn = +          build_conn() +          |> assign(:user, nil) +          |> assign(:token, good_token) +          |> get(url) + +        assert json_response(conn, :forbidden) +      end + +      for bad_token <- [bad_token1, bad_token2, bad_token3] do +        conn = +          build_conn() +          |> assign(:user, admin) +          |> assign(:token, bad_token) +          |> get(url) + +        assert json_response(conn, :forbidden) +      end +    end +  end +    describe "DELETE /api/pleroma/admin/users" do -    test "single user" do -      admin = insert(:user, is_admin: true) +    test "single user", %{admin: admin, conn: conn} do        user = insert(:user)        conn = -        build_conn() -        |> assign(:user, admin) +        conn          |> put_req_header("accept", "application/json")          |> delete("/api/pleroma/admin/users?nickname=#{user.nickname}") @@ -99,14 +160,12 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do        assert json_response(conn, 200) == user.nickname      end -    test "multiple users" do -      admin = insert(:user, is_admin: true) +    test "multiple users", %{admin: admin, conn: conn} do        user_one = insert(:user)        user_two = insert(:user)        conn = -        build_conn() -        |> assign(:user, admin) +        conn          |> put_req_header("accept", "application/json")          |> delete("/api/pleroma/admin/users", %{            nicknames: [user_one.nickname, user_two.nickname] @@ -123,12 +182,9 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do    end    describe "/api/pleroma/admin/users" do -    test "Create" do -      admin = insert(:user, is_admin: true) - +    test "Create", %{conn: conn} do        conn = -        build_conn() -        |> assign(:user, admin) +        conn          |> put_req_header("accept", "application/json")          |> post("/api/pleroma/admin/users", %{            "users" => [ @@ -153,13 +209,11 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do        assert ["lain", "lain2"] -- Enum.map(log_entry.data["subjects"], & &1["nickname"]) == []      end -    test "Cannot create user with existing email" do -      admin = insert(:user, is_admin: true) +    test "Cannot create user with existing email", %{conn: conn} do        user = insert(:user)        conn = -        build_conn() -        |> assign(:user, admin) +        conn          |> put_req_header("accept", "application/json")          |> post("/api/pleroma/admin/users", %{            "users" => [ @@ -184,13 +238,11 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do               ]      end -    test "Cannot create user with existing nickname" do -      admin = insert(:user, is_admin: true) +    test "Cannot create user with existing nickname", %{conn: conn} do        user = insert(:user)        conn = -        build_conn() -        |> assign(:user, admin) +        conn          |> put_req_header("accept", "application/json")          |> post("/api/pleroma/admin/users", %{            "users" => [ @@ -215,13 +267,11 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do               ]      end -    test "Multiple user creation works in transaction" do -      admin = insert(:user, is_admin: true) +    test "Multiple user creation works in transaction", %{conn: conn} do        user = insert(:user)        conn = -        build_conn() -        |> assign(:user, admin) +        conn          |> put_req_header("accept", "application/json")          |> post("/api/pleroma/admin/users", %{            "users" => [ @@ -265,13 +315,9 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do    describe "/api/pleroma/admin/users/:nickname" do      test "Show", %{conn: conn} do -      admin = insert(:user, is_admin: true)        user = insert(:user) -      conn = -        conn -        |> assign(:user, admin) -        |> get("/api/pleroma/admin/users/#{user.nickname}") +      conn = get(conn, "/api/pleroma/admin/users/#{user.nickname}")        expected = %{          "deactivated" => false, @@ -289,26 +335,20 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do      end      test "when the user doesn't exist", %{conn: conn} do -      admin = insert(:user, is_admin: true)        user = build(:user) -      conn = -        conn -        |> assign(:user, admin) -        |> get("/api/pleroma/admin/users/#{user.nickname}") +      conn = get(conn, "/api/pleroma/admin/users/#{user.nickname}")        assert "Not found" == json_response(conn, 404)      end    end    describe "/api/pleroma/admin/users/follow" do -    test "allows to force-follow another user" do -      admin = insert(:user, is_admin: true) +    test "allows to force-follow another user", %{admin: admin, conn: conn} do        user = insert(:user)        follower = insert(:user) -      build_conn() -      |> assign(:user, admin) +      conn        |> put_req_header("accept", "application/json")        |> post("/api/pleroma/admin/users/follow", %{          "follower" => follower.nickname, @@ -328,15 +368,13 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do    end    describe "/api/pleroma/admin/users/unfollow" do -    test "allows to force-unfollow another user" do -      admin = insert(:user, is_admin: true) +    test "allows to force-unfollow another user", %{admin: admin, conn: conn} do        user = insert(:user)        follower = insert(:user)        User.follow(follower, user) -      build_conn() -      |> assign(:user, admin) +      conn        |> put_req_header("accept", "application/json")        |> post("/api/pleroma/admin/users/unfollow", %{          "follower" => follower.nickname, @@ -356,23 +394,20 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do    end    describe "PUT /api/pleroma/admin/users/tag" do -    setup do -      admin = insert(:user, is_admin: true) +    setup %{conn: conn} do        user1 = insert(:user, %{tags: ["x"]})        user2 = insert(:user, %{tags: ["y"]})        user3 = insert(:user, %{tags: ["unchanged"]})        conn = -        build_conn() -        |> assign(:user, admin) +        conn          |> put_req_header("accept", "application/json")          |> put( -          "/api/pleroma/admin/users/tag?nicknames[]=#{user1.nickname}&nicknames[]=#{ -            user2.nickname -          }&tags[]=foo&tags[]=bar" +          "/api/pleroma/admin/users/tag?nicknames[]=#{user1.nickname}&nicknames[]=" <> +            "#{user2.nickname}&tags[]=foo&tags[]=bar"          ) -      %{conn: conn, admin: admin, user1: user1, user2: user2, user3: user3} +      %{conn: conn, user1: user1, user2: user2, user3: user3}      end      test "it appends specified tags to users with specified nicknames", %{ @@ -405,23 +440,20 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do    end    describe "DELETE /api/pleroma/admin/users/tag" do -    setup do -      admin = insert(:user, is_admin: true) +    setup %{conn: conn} do        user1 = insert(:user, %{tags: ["x"]})        user2 = insert(:user, %{tags: ["y", "z"]})        user3 = insert(:user, %{tags: ["unchanged"]})        conn = -        build_conn() -        |> assign(:user, admin) +        conn          |> put_req_header("accept", "application/json")          |> delete( -          "/api/pleroma/admin/users/tag?nicknames[]=#{user1.nickname}&nicknames[]=#{ -            user2.nickname -          }&tags[]=x&tags[]=z" +          "/api/pleroma/admin/users/tag?nicknames[]=#{user1.nickname}&nicknames[]=" <> +            "#{user2.nickname}&tags[]=x&tags[]=z"          ) -      %{conn: conn, admin: admin, user1: user1, user2: user2, user3: user3} +      %{conn: conn, user1: user1, user2: user2, user3: user3}      end      test "it removes specified tags from users with specified nicknames", %{ @@ -454,12 +486,9 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do    end    describe "/api/pleroma/admin/users/:nickname/permission_group" do -    test "GET is giving user_info" do -      admin = insert(:user, is_admin: true) - +    test "GET is giving user_info", %{admin: admin, conn: conn} do        conn = -        build_conn() -        |> assign(:user, admin) +        conn          |> put_req_header("accept", "application/json")          |> get("/api/pleroma/admin/users/#{admin.nickname}/permission_group/") @@ -469,13 +498,11 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do               }      end -    test "/:right POST, can add to a permission group" do -      admin = insert(:user, is_admin: true) +    test "/:right POST, can add to a permission group", %{admin: admin, conn: conn} do        user = insert(:user)        conn = -        build_conn() -        |> assign(:user, admin) +        conn          |> put_req_header("accept", "application/json")          |> post("/api/pleroma/admin/users/#{user.nickname}/permission_group/admin") @@ -489,22 +516,18 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do                 "@#{admin.nickname} made @#{user.nickname} admin"      end -    test "/:right POST, can add to a permission group (multiple)" do -      admin = insert(:user, is_admin: true) +    test "/:right POST, can add to a permission group (multiple)", %{admin: admin, conn: conn} do        user_one = insert(:user)        user_two = insert(:user)        conn = -        build_conn() -        |> assign(:user, admin) +        conn          |> put_req_header("accept", "application/json")          |> post("/api/pleroma/admin/users/permission_group/admin", %{            nicknames: [user_one.nickname, user_two.nickname]          }) -      assert json_response(conn, 200) == %{ -               "is_admin" => true -             } +      assert json_response(conn, 200) == %{"is_admin" => true}        log_entry = Repo.one(ModerationLog) @@ -512,19 +535,15 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do                 "@#{admin.nickname} made @#{user_one.nickname}, @#{user_two.nickname} admin"      end -    test "/:right DELETE, can remove from a permission group" do -      admin = insert(:user, is_admin: true) +    test "/:right DELETE, can remove from a permission group", %{admin: admin, conn: conn} do        user = insert(:user, is_admin: true)        conn = -        build_conn() -        |> assign(:user, admin) +        conn          |> put_req_header("accept", "application/json")          |> delete("/api/pleroma/admin/users/#{user.nickname}/permission_group/admin") -      assert json_response(conn, 200) == %{ -               "is_admin" => false -             } +      assert json_response(conn, 200) == %{"is_admin" => false}        log_entry = Repo.one(ModerationLog) @@ -532,22 +551,21 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do                 "@#{admin.nickname} revoked admin role from @#{user.nickname}"      end -    test "/:right DELETE, can remove from a permission group (multiple)" do -      admin = insert(:user, is_admin: true) +    test "/:right DELETE, can remove from a permission group (multiple)", %{ +      admin: admin, +      conn: conn +    } do        user_one = insert(:user, is_admin: true)        user_two = insert(:user, is_admin: true)        conn = -        build_conn() -        |> assign(:user, admin) +        conn          |> put_req_header("accept", "application/json")          |> delete("/api/pleroma/admin/users/permission_group/admin", %{            nicknames: [user_one.nickname, user_two.nickname]          }) -      assert json_response(conn, 200) == %{ -               "is_admin" => false -             } +      assert json_response(conn, 200) == %{"is_admin" => false}        log_entry = Repo.one(ModerationLog) @@ -559,10 +577,6 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do    end    describe "POST /api/pleroma/admin/email_invite, with valid config" do -    setup do -      [user: insert(:user, is_admin: true)] -    end -      clear_config([:instance, :registrations_open]) do        Pleroma.Config.put([:instance, :registrations_open], false)      end @@ -571,14 +585,13 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do        Pleroma.Config.put([:instance, :invites_enabled], true)      end -    test "sends invitation and returns 204", %{conn: conn, user: user} do +    test "sends invitation and returns 204", %{admin: admin, conn: conn} do        recipient_email = "foo@bar.com"        recipient_name = "J. D."        conn = -        conn -        |> assign(:user, user) -        |> post( +        post( +          conn,            "/api/pleroma/admin/users/email_invite?email=#{recipient_email}&name=#{recipient_name}"          ) @@ -593,7 +606,7 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do        email =          Pleroma.Emails.UserEmail.user_invitation_email( -          user, +          admin,            token_record,            recipient_email,            recipient_name @@ -606,12 +619,14 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do        )      end -    test "it returns 403 if requested by a non-admin", %{conn: conn} do +    test "it returns 403 if requested by a non-admin" do        non_admin_user = insert(:user) +      token = insert(:oauth_token, user: non_admin_user)        conn = -        conn +        build_conn()          |> assign(:user, non_admin_user) +        |> assign(:token, token)          |> post("/api/pleroma/admin/users/email_invite?email=foo@bar.com&name=JD")        assert json_response(conn, :forbidden) @@ -619,45 +634,33 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do    end    describe "POST /api/pleroma/admin/users/email_invite, with invalid config" do -    setup do -      [user: insert(:user, is_admin: true)] -    end -      clear_config([:instance, :registrations_open])      clear_config([:instance, :invites_enabled]) -    test "it returns 500 if `invites_enabled` is not enabled", %{conn: conn, user: user} do +    test "it returns 500 if `invites_enabled` is not enabled", %{conn: conn} do        Pleroma.Config.put([:instance, :registrations_open], false)        Pleroma.Config.put([:instance, :invites_enabled], false) -      conn = -        conn -        |> assign(:user, user) -        |> post("/api/pleroma/admin/users/email_invite?email=foo@bar.com&name=JD") +      conn = post(conn, "/api/pleroma/admin/users/email_invite?email=foo@bar.com&name=JD")        assert json_response(conn, :internal_server_error)      end -    test "it returns 500 if `registrations_open` is enabled", %{conn: conn, user: user} do +    test "it returns 500 if `registrations_open` is enabled", %{conn: conn} do        Pleroma.Config.put([:instance, :registrations_open], true)        Pleroma.Config.put([:instance, :invites_enabled], true) -      conn = -        conn -        |> assign(:user, user) -        |> post("/api/pleroma/admin/users/email_invite?email=foo@bar.com&name=JD") +      conn = post(conn, "/api/pleroma/admin/users/email_invite?email=foo@bar.com&name=JD")        assert json_response(conn, :internal_server_error)      end    end -  test "/api/pleroma/admin/users/:nickname/password_reset" do -    admin = insert(:user, is_admin: true) +  test "/api/pleroma/admin/users/:nickname/password_reset", %{conn: conn} do      user = insert(:user)      conn = -      build_conn() -      |> assign(:user, admin) +      conn        |> put_req_header("accept", "application/json")        |> get("/api/pleroma/admin/users/#{user.nickname}/password_reset") @@ -667,16 +670,6 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do    end    describe "GET /api/pleroma/admin/users" do -    setup do -      admin = insert(:user, is_admin: true) - -      conn = -        build_conn() -        |> assign(:user, admin) - -      {:ok, conn: conn, admin: admin} -    end -      test "renders users array for the first page", %{conn: conn, admin: admin} do        user = insert(:user, local: false, tags: ["foo", "bar"])        conn = get(conn, "/api/pleroma/admin/users?page=1") @@ -898,6 +891,7 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do      test "only local users" do        admin = insert(:user, is_admin: true, nickname: "john") +      token = insert(:oauth_admin_token, user: admin)        user = insert(:user, nickname: "bob")        insert(:user, nickname: "bobb", local: false) @@ -905,6 +899,7 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do        conn =          build_conn()          |> assign(:user, admin) +        |> assign(:token, token)          |> get("/api/pleroma/admin/users?query=bo&filters=local")        assert json_response(conn, 200) == %{ @@ -926,16 +921,13 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do               }      end -    test "only local users with no query", %{admin: old_admin} do +    test "only local users with no query", %{conn: conn, admin: old_admin} do        admin = insert(:user, is_admin: true, nickname: "john")        user = insert(:user, nickname: "bob")        insert(:user, nickname: "bobb", local: false) -      conn = -        build_conn() -        |> assign(:user, admin) -        |> get("/api/pleroma/admin/users?filters=local") +      conn = get(conn, "/api/pleroma/admin/users?filters=local")        users =          [ @@ -1093,6 +1085,7 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do      test "it works with multiple filters" do        admin = insert(:user, nickname: "john", is_admin: true) +      token = insert(:oauth_admin_token, user: admin)        user = insert(:user, nickname: "bob", local: false, deactivated: true)        insert(:user, nickname: "ken", local: true, deactivated: true) @@ -1101,6 +1094,7 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do        conn =          build_conn()          |> assign(:user, admin) +        |> assign(:token, token)          |> get("/api/pleroma/admin/users?filters=deactivated,external")        assert json_response(conn, 200) == %{ @@ -1122,13 +1116,10 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do               }      end -    test "it omits relay user", %{admin: admin} do +    test "it omits relay user", %{admin: admin, conn: conn} do        assert %User{} = Relay.get_actor() -      conn = -        build_conn() -        |> assign(:user, admin) -        |> get("/api/pleroma/admin/users") +      conn = get(conn, "/api/pleroma/admin/users")        assert json_response(conn, 200) == %{                 "count" => 1, @@ -1150,15 +1141,13 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do      end    end -  test "PATCH /api/pleroma/admin/users/activate" do -    admin = insert(:user, is_admin: true) +  test "PATCH /api/pleroma/admin/users/activate", %{admin: admin, conn: conn} do      user_one = insert(:user, deactivated: true)      user_two = insert(:user, deactivated: true)      conn = -      build_conn() -      |> assign(:user, admin) -      |> patch( +      patch( +        conn,          "/api/pleroma/admin/users/activate",          %{nicknames: [user_one.nickname, user_two.nickname]}        ) @@ -1172,15 +1161,13 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do               "@#{admin.nickname} activated users: @#{user_one.nickname}, @#{user_two.nickname}"    end -  test "PATCH /api/pleroma/admin/users/deactivate" do -    admin = insert(:user, is_admin: true) +  test "PATCH /api/pleroma/admin/users/deactivate", %{admin: admin, conn: conn} do      user_one = insert(:user, deactivated: false)      user_two = insert(:user, deactivated: false)      conn = -      build_conn() -      |> assign(:user, admin) -      |> patch( +      patch( +        conn,          "/api/pleroma/admin/users/deactivate",          %{nicknames: [user_one.nickname, user_two.nickname]}        ) @@ -1194,14 +1181,10 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do               "@#{admin.nickname} deactivated users: @#{user_one.nickname}, @#{user_two.nickname}"    end -  test "PATCH /api/pleroma/admin/users/:nickname/toggle_activation" do -    admin = insert(:user, is_admin: true) +  test "PATCH /api/pleroma/admin/users/:nickname/toggle_activation", %{admin: admin, conn: conn} do      user = insert(:user) -    conn = -      build_conn() -      |> assign(:user, admin) -      |> patch("/api/pleroma/admin/users/#{user.nickname}/toggle_activation") +    conn = patch(conn, "/api/pleroma/admin/users/#{user.nickname}/toggle_activation")      assert json_response(conn, 200) ==               %{ @@ -1223,16 +1206,6 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do    end    describe "POST /api/pleroma/admin/users/invite_token" do -    setup do -      admin = insert(:user, is_admin: true) - -      conn = -        build_conn() -        |> assign(:user, admin) - -      {:ok, conn: conn} -    end -      test "without options", %{conn: conn} do        conn = post(conn, "/api/pleroma/admin/users/invite_token") @@ -1287,16 +1260,6 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do    end    describe "GET /api/pleroma/admin/users/invites" do -    setup do -      admin = insert(:user, is_admin: true) - -      conn = -        build_conn() -        |> assign(:user, admin) - -      {:ok, conn: conn} -    end -      test "no invites", %{conn: conn} do        conn = get(conn, "/api/pleroma/admin/users/invites") @@ -1325,14 +1288,10 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do    end    describe "POST /api/pleroma/admin/users/revoke_invite" do -    test "with token" do -      admin = insert(:user, is_admin: true) +    test "with token", %{conn: conn} do        {:ok, invite} = UserInviteToken.create_invite() -      conn = -        build_conn() -        |> assign(:user, admin) -        |> post("/api/pleroma/admin/users/revoke_invite", %{"token" => invite.token}) +      conn = post(conn, "/api/pleroma/admin/users/revoke_invite", %{"token" => invite.token})        assert json_response(conn, 200) == %{                 "expires_at" => nil, @@ -1345,25 +1304,14 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do               }      end -    test "with invalid token" do -      admin = insert(:user, is_admin: true) - -      conn = -        build_conn() -        |> assign(:user, admin) -        |> post("/api/pleroma/admin/users/revoke_invite", %{"token" => "foo"}) +    test "with invalid token", %{conn: conn} do +      conn = post(conn, "/api/pleroma/admin/users/revoke_invite", %{"token" => "foo"})        assert json_response(conn, :not_found) == "Not found"      end    end    describe "GET /api/pleroma/admin/reports/:id" do -    setup %{conn: conn} do -      admin = insert(:user, is_admin: true) - -      %{conn: assign(conn, :user, admin)} -    end -      test "returns report by its id", %{conn: conn} do        [reporter, target_user] = insert_pair(:user)        activity = insert(:note_activity, user: target_user) @@ -1391,8 +1339,7 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do    end    describe "PATCH /api/pleroma/admin/reports" do -    setup %{conn: conn} do -      admin = insert(:user, is_admin: true) +    setup do        [reporter, target_user] = insert_pair(:user)        activity = insert(:note_activity, user: target_user) @@ -1411,9 +1358,7 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do          })        %{ -        conn: assign(conn, :user, admin),          id: report_id, -        admin: admin,          second_report_id: second_report_id        }      end @@ -1509,12 +1454,6 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do    end    describe "GET /api/pleroma/admin/reports" do -    setup %{conn: conn} do -      admin = insert(:user, is_admin: true) - -      %{conn: assign(conn, :user, admin)} -    end -      test "returns empty response when no reports created", %{conn: conn} do        response =          conn @@ -1609,10 +1548,12 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do      test "returns 403 when requested by a non-admin" do        user = insert(:user) +      token = insert(:oauth_token, user: user)        conn =          build_conn()          |> assign(:user, user) +        |> assign(:token, token)          |> get("/api/pleroma/admin/reports")        assert json_response(conn, :forbidden) == @@ -1620,17 +1561,14 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do      end      test "returns 403 when requested by anonymous" do -      conn = -        build_conn() -        |> get("/api/pleroma/admin/reports") +      conn = get(build_conn(), "/api/pleroma/admin/reports")        assert json_response(conn, :forbidden) == %{"error" => "Invalid credentials."}      end    end    describe "GET /api/pleroma/admin/grouped_reports" do -    setup %{conn: conn} do -      admin = insert(:user, is_admin: true) +    setup do        [reporter, target_user] = insert_pair(:user)        date1 = (DateTime.to_unix(DateTime.utc_now()) + 1000) |> DateTime.from_unix!() @@ -1665,7 +1603,6 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do          })        %{ -        conn: assign(conn, :user, admin),          first_status: Activity.get_by_ap_id_with_object(first_status.data["id"]),          second_status: Activity.get_by_ap_id_with_object(second_status.data["id"]),          third_status: Activity.get_by_ap_id_with_object(third_status.data["id"]), @@ -1833,11 +1770,10 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do    end    describe "PUT /api/pleroma/admin/statuses/:id" do -    setup %{conn: conn} do -      admin = insert(:user, is_admin: true) +    setup do        activity = insert(:note_activity) -      %{conn: assign(conn, :user, admin), id: activity.id, admin: admin} +      %{id: activity.id}      end      test "toggle sensitive flag", %{conn: conn, id: id, admin: admin} do @@ -1890,20 +1826,17 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do      end      test "returns 400 when visibility is unknown", %{conn: conn, id: id} do -      conn = -        conn -        |> put("/api/pleroma/admin/statuses/#{id}", %{"visibility" => "test"}) +      conn = put(conn, "/api/pleroma/admin/statuses/#{id}", %{"visibility" => "test"})        assert json_response(conn, :bad_request) == "Unsupported visibility"      end    end    describe "DELETE /api/pleroma/admin/statuses/:id" do -    setup %{conn: conn} do -      admin = insert(:user, is_admin: true) +    setup do        activity = insert(:note_activity) -      %{conn: assign(conn, :user, admin), id: activity.id, admin: admin} +      %{id: activity.id}      end      test "deletes status", %{conn: conn, id: id, admin: admin} do @@ -1920,21 +1853,13 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do      end      test "returns error when status is not exist", %{conn: conn} do -      conn = -        conn -        |> delete("/api/pleroma/admin/statuses/test") +      conn = delete(conn, "/api/pleroma/admin/statuses/test")        assert json_response(conn, :bad_request) == "Could not delete"      end    end    describe "GET /api/pleroma/admin/config" do -    setup %{conn: conn} do -      admin = insert(:user, is_admin: true) - -      %{conn: assign(conn, :user, admin)} -    end -      test "without any settings in db", %{conn: conn} do        conn = get(conn, "/api/pleroma/admin/config") @@ -1966,9 +1891,7 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do    end    describe "POST /api/pleroma/admin/config" do -    setup %{conn: conn} do -      admin = insert(:user, is_admin: true) - +    setup do        temp_file = "config/test.exported_from_db.secret.exs"        on_exit(fn -> @@ -1982,8 +1905,6 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do          Application.delete_env(:pleroma, Pleroma.Captcha.NotReal)          :ok = File.rm(temp_file)        end) - -      %{conn: assign(conn, :user, admin)}      end      clear_config([:instance, :dynamic_configuration]) do @@ -2535,9 +2456,7 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do    end    describe "config mix tasks run" do -    setup %{conn: conn} do -      admin = insert(:user, is_admin: true) - +    setup do        temp_file = "config/test.exported_from_db.secret.exs"        Mix.shell(Mix.Shell.Quiet) @@ -2547,7 +2466,7 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do          :ok = File.rm(temp_file)        end) -      %{conn: assign(conn, :user, admin), admin: admin} +      :ok      end      clear_config([:instance, :dynamic_configuration]) do @@ -2558,25 +2477,21 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do        Pleroma.Config.put([:feed, :post_title], %{max_length: 100, omission: "…"})      end -    test "transfer settings to DB and to file", %{conn: conn, admin: admin} do +    test "transfer settings to DB and to file", %{conn: conn} do        assert Pleroma.Repo.all(Pleroma.Web.AdminAPI.Config) == [] -      conn = get(conn, "/api/pleroma/admin/config/migrate_to_db") -      assert json_response(conn, 200) == %{} +      ret_conn = get(conn, "/api/pleroma/admin/config/migrate_to_db") +      assert json_response(ret_conn, 200) == %{}        assert Pleroma.Repo.all(Pleroma.Web.AdminAPI.Config) > 0 -      conn = -        build_conn() -        |> assign(:user, admin) -        |> get("/api/pleroma/admin/config/migrate_from_db") +      ret_conn = get(conn, "/api/pleroma/admin/config/migrate_from_db") -      assert json_response(conn, 200) == %{} +      assert json_response(ret_conn, 200) == %{}        assert Pleroma.Repo.all(Pleroma.Web.AdminAPI.Config) == []      end    end    describe "GET /api/pleroma/admin/users/:nickname/statuses" do      setup do -      admin = insert(:user, is_admin: true)        user = insert(:user)        date1 = (DateTime.to_unix(DateTime.utc_now()) + 2000) |> DateTime.from_unix!() @@ -2587,11 +2502,7 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do        insert(:note_activity, user: user, published: date2)        insert(:note_activity, user: user, published: date3) -      conn = -        build_conn() -        |> assign(:user, admin) - -      {:ok, conn: conn, user: user} +      %{user: user}      end      test "renders user's statuses", %{conn: conn, user: user} do @@ -2632,11 +2543,10 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do    end    describe "GET /api/pleroma/admin/moderation_log" do -    setup %{conn: conn} do -      admin = insert(:user, is_admin: true) +    setup do        moderator = insert(:user, is_moderator: true) -      %{conn: assign(conn, :user, admin), admin: admin, moderator: moderator} +      %{moderator: moderator}      end      test "returns the log", %{conn: conn, admin: admin} do @@ -2841,20 +2751,12 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do    end    describe "PATCH /users/:nickname/force_password_reset" do -    setup %{conn: conn} do -      admin = insert(:user, is_admin: true) +    test "sets password_reset_pending to true", %{conn: conn} do        user = insert(:user) - -      %{conn: assign(conn, :user, admin), admin: admin, user: user} -    end - -    test "sets password_reset_pending to true", %{admin: admin, user: user} do        assert user.password_reset_pending == false        conn = -        build_conn() -        |> assign(:user, admin) -        |> patch("/api/pleroma/admin/users/force_password_reset", %{nicknames: [user.nickname]}) +        patch(conn, "/api/pleroma/admin/users/force_password_reset", %{nicknames: [user.nickname]})        assert json_response(conn, 204) == "" @@ -2865,17 +2767,9 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do    end    describe "relays" do -    setup %{conn: conn} do -      admin = insert(:user, is_admin: true) - -      %{conn: assign(conn, :user, admin), admin: admin} -    end - -    test "POST /relay", %{admin: admin} do +    test "POST /relay", %{conn: conn, admin: admin} do        conn = -        build_conn() -        |> assign(:user, admin) -        |> post("/api/pleroma/admin/relay", %{ +        post(conn, "/api/pleroma/admin/relay", %{            relay_url: "http://mastodon.example.org/users/admin"          }) @@ -2887,7 +2781,7 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do                 "@#{admin.nickname} followed relay: http://mastodon.example.org/users/admin"      end -    test "GET /relay", %{admin: admin} do +    test "GET /relay", %{conn: conn} do        relay_user = Pleroma.Web.ActivityPub.Relay.get_actor()        ["http://mastodon.example.org/users/admin", "https://mstdn.io/users/mayuutann"] @@ -2896,25 +2790,18 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do          User.follow(relay_user, user)        end) -      conn = -        build_conn() -        |> assign(:user, admin) -        |> get("/api/pleroma/admin/relay") +      conn = get(conn, "/api/pleroma/admin/relay")        assert json_response(conn, 200)["relays"] -- ["mastodon.example.org", "mstdn.io"] == []      end -    test "DELETE /relay", %{admin: admin} do -      build_conn() -      |> assign(:user, admin) -      |> post("/api/pleroma/admin/relay", %{ +    test "DELETE /relay", %{conn: conn, admin: admin} do +      post(conn, "/api/pleroma/admin/relay", %{          relay_url: "http://mastodon.example.org/users/admin"        })        conn = -        build_conn() -        |> assign(:user, admin) -        |> delete("/api/pleroma/admin/relay", %{ +        delete(conn, "/api/pleroma/admin/relay", %{            relay_url: "http://mastodon.example.org/users/admin"          }) @@ -2931,63 +2818,48 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do    end    describe "instances" do -    test "GET /instances/:instance/statuses" do -      admin = insert(:user, is_admin: true) +    test "GET /instances/:instance/statuses", %{conn: conn} do        user = insert(:user, local: false, nickname: "archaeme@archae.me")        user2 = insert(:user, local: false, nickname: "test@test.com")        insert_pair(:note_activity, user: user)        insert(:note_activity, user: user2) -      conn = -        build_conn() -        |> assign(:user, admin) -        |> get("/api/pleroma/admin/instances/archae.me/statuses") +      ret_conn = get(conn, "/api/pleroma/admin/instances/archae.me/statuses") -      response = json_response(conn, 200) +      response = json_response(ret_conn, 200)        assert length(response) == 2 -      conn = -        build_conn() -        |> assign(:user, admin) -        |> get("/api/pleroma/admin/instances/test.com/statuses") +      ret_conn = get(conn, "/api/pleroma/admin/instances/test.com/statuses") -      response = json_response(conn, 200) +      response = json_response(ret_conn, 200)        assert length(response) == 1 -      conn = -        build_conn() -        |> assign(:user, admin) -        |> get("/api/pleroma/admin/instances/nonexistent.com/statuses") +      ret_conn = get(conn, "/api/pleroma/admin/instances/nonexistent.com/statuses") -      response = json_response(conn, 200) +      response = json_response(ret_conn, 200)        assert length(response) == 0      end    end    describe "PATCH /confirm_email" do -    setup %{conn: conn} do -      admin = insert(:user, is_admin: true) - -      %{conn: assign(conn, :user, admin), admin: admin} -    end - -    test "it confirms emails of two users", %{admin: admin} do +    test "it confirms emails of two users", %{conn: conn, admin: admin} do        [first_user, second_user] = insert_pair(:user, confirmation_pending: true)        assert first_user.confirmation_pending == true        assert second_user.confirmation_pending == true -      build_conn() -      |> assign(:user, admin) -      |> patch("/api/pleroma/admin/users/confirm_email", %{ -        nicknames: [ -          first_user.nickname, -          second_user.nickname -        ] -      }) +      ret_conn = +        patch(conn, "/api/pleroma/admin/users/confirm_email", %{ +          nicknames: [ +            first_user.nickname, +            second_user.nickname +          ] +        }) + +      assert ret_conn.status == 200        assert first_user.confirmation_pending == true        assert second_user.confirmation_pending == true @@ -3002,23 +2874,18 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do    end    describe "PATCH /resend_confirmation_email" do -    setup %{conn: conn} do -      admin = insert(:user, is_admin: true) - -      %{conn: assign(conn, :user, admin), admin: admin} -    end - -    test "it resend emails for two users", %{admin: admin} do +    test "it resend emails for two users", %{conn: conn, admin: admin} do        [first_user, second_user] = insert_pair(:user, confirmation_pending: true) -      build_conn() -      |> assign(:user, admin) -      |> patch("/api/pleroma/admin/users/resend_confirmation_email", %{ -        nicknames: [ -          first_user.nickname, -          second_user.nickname -        ] -      }) +      ret_conn = +        patch(conn, "/api/pleroma/admin/users/resend_confirmation_email", %{ +          nicknames: [ +            first_user.nickname, +            second_user.nickname +          ] +        }) + +      assert ret_conn.status == 200        log_entry = Repo.one(ModerationLog) @@ -3030,8 +2897,7 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do    end    describe "POST /reports/:id/notes" do -    setup do -      admin = insert(:user, is_admin: true) +    setup %{conn: conn, admin: admin} do        [reporter, target_user] = insert_pair(:user)        activity = insert(:note_activity, user: target_user) @@ -3042,22 +2908,17 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do            "status_ids" => [activity.id]          }) -      build_conn() -      |> assign(:user, admin) -      |> post("/api/pleroma/admin/reports/#{report_id}/notes", %{ +      post(conn, "/api/pleroma/admin/reports/#{report_id}/notes", %{          content: "this is disgusting!"        }) -      build_conn() -      |> assign(:user, admin) -      |> post("/api/pleroma/admin/reports/#{report_id}/notes", %{ +      post(conn, "/api/pleroma/admin/reports/#{report_id}/notes", %{          content: "this is disgusting2!"        })        %{          admin_id: admin.id, -        report_id: report_id, -        admin: admin +        report_id: report_id        }      end @@ -3071,11 +2932,8 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do               } = note      end -    test "it returns reports with notes", %{admin: admin} do -      conn = -        build_conn() -        |> assign(:user, admin) -        |> get("/api/pleroma/admin/reports") +    test "it returns reports with notes", %{conn: conn, admin: admin} do +      conn = get(conn, "/api/pleroma/admin/reports")        response = json_response(conn, 200)        notes = hd(response["reports"])["notes"] @@ -3087,14 +2945,12 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do        assert response["total"] == 1      end -    test "it deletes the note", %{admin: admin, report_id: report_id} do +    test "it deletes the note", %{conn: conn, report_id: report_id} do        assert ReportNote |> Repo.all() |> length() == 2        [note, _] = Repo.all(ReportNote) -      build_conn() -      |> assign(:user, admin) -      |> delete("/api/pleroma/admin/reports/#{report_id}/notes/#{note.id}") +      delete(conn, "/api/pleroma/admin/reports/#{report_id}/notes/#{note.id}")        assert ReportNote |> Repo.all() |> length() == 1      end  | 
