diff options
Diffstat (limited to 'test/web')
| -rw-r--r-- | test/web/activity_pub/mrf/ensure_re_prepended_test.exs | 10 | ||||
| -rw-r--r-- | test/web/admin_api/controllers/admin_api_controller_test.exs | 164 | ||||
| -rw-r--r-- | test/web/admin_api/search_test.exs | 11 | ||||
| -rw-r--r-- | test/web/feed/user_controller_test.exs | 11 | ||||
| -rw-r--r-- | test/web/mastodon_api/controllers/account_controller_test.exs | 70 | ||||
| -rw-r--r-- | test/web/mastodon_api/controllers/instance_controller_test.exs | 1 | ||||
| -rw-r--r-- | test/web/oauth/oauth_controller_test.exs | 29 | ||||
| -rw-r--r-- | test/web/twitter_api/twitter_api_test.exs | 38 | 
8 files changed, 309 insertions, 25 deletions
| diff --git a/test/web/activity_pub/mrf/ensure_re_prepended_test.exs b/test/web/activity_pub/mrf/ensure_re_prepended_test.exs index 38ddec5bb..9a283f27d 100644 --- a/test/web/activity_pub/mrf/ensure_re_prepended_test.exs +++ b/test/web/activity_pub/mrf/ensure_re_prepended_test.exs @@ -78,5 +78,15 @@ defmodule Pleroma.Web.ActivityPub.MRF.EnsureRePrependedTest do        assert {:ok, res} = EnsureRePrepended.filter(message)        assert res == message      end + +    test "it skips if the object is only a reference" do +      message = %{ +        "type" => "Create", +        "object" => "somereference" +      } + +      assert {:ok, res} = EnsureRePrepended.filter(message) +      assert res == message +    end    end  end diff --git a/test/web/admin_api/controllers/admin_api_controller_test.exs b/test/web/admin_api/controllers/admin_api_controller_test.exs index 6082441ee..b5d5bd8c7 100644 --- a/test/web/admin_api/controllers/admin_api_controller_test.exs +++ b/test/web/admin_api/controllers/admin_api_controller_test.exs @@ -349,7 +349,9 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do          "avatar" => User.avatar_url(user) |> MediaProxy.url(),          "display_name" => HTML.strip_tags(user.name || user.nickname),          "confirmation_pending" => false, -        "url" => user.ap_id +        "approval_pending" => false, +        "url" => user.ap_id, +        "registration_reason" => nil        }        assert expected == json_response(conn, 200) @@ -613,6 +615,8 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do    describe "GET /api/pleroma/admin/users" do      test "renders users array for the first page", %{conn: conn, admin: admin} do        user = insert(:user, local: false, tags: ["foo", "bar"]) +      user2 = insert(:user, approval_pending: true, registration_reason: "I'm a chill dude") +        conn = get(conn, "/api/pleroma/admin/users?page=1")        users = @@ -627,7 +631,9 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do              "avatar" => User.avatar_url(admin) |> MediaProxy.url(),              "display_name" => HTML.strip_tags(admin.name || admin.nickname),              "confirmation_pending" => false, -            "url" => admin.ap_id +            "approval_pending" => false, +            "url" => admin.ap_id, +            "registration_reason" => nil            },            %{              "deactivated" => user.deactivated, @@ -639,13 +645,29 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do              "avatar" => User.avatar_url(user) |> MediaProxy.url(),              "display_name" => HTML.strip_tags(user.name || user.nickname),              "confirmation_pending" => false, -            "url" => user.ap_id +            "approval_pending" => false, +            "url" => user.ap_id, +            "registration_reason" => nil +          }, +          %{ +            "deactivated" => user2.deactivated, +            "id" => user2.id, +            "nickname" => user2.nickname, +            "roles" => %{"admin" => false, "moderator" => false}, +            "local" => true, +            "tags" => [], +            "avatar" => User.avatar_url(user2) |> MediaProxy.url(), +            "display_name" => HTML.strip_tags(user2.name || user2.nickname), +            "confirmation_pending" => false, +            "approval_pending" => true, +            "url" => user2.ap_id, +            "registration_reason" => "I'm a chill dude"            }          ]          |> Enum.sort_by(& &1["nickname"])        assert json_response(conn, 200) == %{ -               "count" => 2, +               "count" => 3,                 "page_size" => 50,                 "users" => users               } @@ -712,7 +734,9 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do                     "avatar" => User.avatar_url(user) |> MediaProxy.url(),                     "display_name" => HTML.strip_tags(user.name || user.nickname),                     "confirmation_pending" => false, -                   "url" => user.ap_id +                   "approval_pending" => false, +                   "url" => user.ap_id, +                   "registration_reason" => nil                   }                 ]               } @@ -738,7 +762,9 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do                     "avatar" => User.avatar_url(user) |> MediaProxy.url(),                     "display_name" => HTML.strip_tags(user.name || user.nickname),                     "confirmation_pending" => false, -                   "url" => user.ap_id +                   "approval_pending" => false, +                   "url" => user.ap_id, +                   "registration_reason" => nil                   }                 ]               } @@ -764,7 +790,9 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do                     "avatar" => User.avatar_url(user) |> MediaProxy.url(),                     "display_name" => HTML.strip_tags(user.name || user.nickname),                     "confirmation_pending" => false, -                   "url" => user.ap_id +                   "approval_pending" => false, +                   "url" => user.ap_id, +                   "registration_reason" => nil                   }                 ]               } @@ -790,7 +818,9 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do                     "avatar" => User.avatar_url(user) |> MediaProxy.url(),                     "display_name" => HTML.strip_tags(user.name || user.nickname),                     "confirmation_pending" => false, -                   "url" => user.ap_id +                   "approval_pending" => false, +                   "url" => user.ap_id, +                   "registration_reason" => nil                   }                 ]               } @@ -816,7 +846,9 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do                     "avatar" => User.avatar_url(user) |> MediaProxy.url(),                     "display_name" => HTML.strip_tags(user.name || user.nickname),                     "confirmation_pending" => false, -                   "url" => user.ap_id +                   "approval_pending" => false, +                   "url" => user.ap_id, +                   "registration_reason" => nil                   }                 ]               } @@ -842,7 +874,9 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do                     "avatar" => User.avatar_url(user) |> MediaProxy.url(),                     "display_name" => HTML.strip_tags(user.name || user.nickname),                     "confirmation_pending" => false, -                   "url" => user.ap_id +                   "approval_pending" => false, +                   "url" => user.ap_id, +                   "registration_reason" => nil                   }                 ]               } @@ -863,7 +897,9 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do                     "avatar" => User.avatar_url(user2) |> MediaProxy.url(),                     "display_name" => HTML.strip_tags(user2.name || user2.nickname),                     "confirmation_pending" => false, -                   "url" => user2.ap_id +                   "approval_pending" => false, +                   "url" => user2.ap_id, +                   "registration_reason" => nil                   }                 ]               } @@ -896,7 +932,9 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do                     "avatar" => User.avatar_url(user) |> MediaProxy.url(),                     "display_name" => HTML.strip_tags(user.name || user.nickname),                     "confirmation_pending" => false, -                   "url" => user.ap_id +                   "approval_pending" => false, +                   "url" => user.ap_id, +                   "registration_reason" => nil                   }                 ]               } @@ -922,7 +960,9 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do              "avatar" => User.avatar_url(user) |> MediaProxy.url(),              "display_name" => HTML.strip_tags(user.name || user.nickname),              "confirmation_pending" => false, -            "url" => user.ap_id +            "approval_pending" => false, +            "url" => user.ap_id, +            "registration_reason" => nil            },            %{              "deactivated" => admin.deactivated, @@ -934,7 +974,9 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do              "avatar" => User.avatar_url(admin) |> MediaProxy.url(),              "display_name" => HTML.strip_tags(admin.name || admin.nickname),              "confirmation_pending" => false, -            "url" => admin.ap_id +            "approval_pending" => false, +            "url" => admin.ap_id, +            "registration_reason" => nil            },            %{              "deactivated" => false, @@ -946,7 +988,9 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do              "avatar" => User.avatar_url(old_admin) |> MediaProxy.url(),              "display_name" => HTML.strip_tags(old_admin.name || old_admin.nickname),              "confirmation_pending" => false, -            "url" => old_admin.ap_id +            "approval_pending" => false, +            "url" => old_admin.ap_id, +            "registration_reason" => nil            }          ]          |> Enum.sort_by(& &1["nickname"]) @@ -958,6 +1002,44 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do               }      end +    test "only unapproved users", %{conn: conn} do +      user = +        insert(:user, +          nickname: "sadboy", +          approval_pending: true, +          registration_reason: "Plz let me in!" +        ) + +      insert(:user, nickname: "happyboy", approval_pending: false) + +      conn = get(conn, "/api/pleroma/admin/users?filters=need_approval") + +      users = +        [ +          %{ +            "deactivated" => user.deactivated, +            "id" => user.id, +            "nickname" => user.nickname, +            "roles" => %{"admin" => false, "moderator" => false}, +            "local" => true, +            "tags" => [], +            "avatar" => User.avatar_url(user) |> MediaProxy.url(), +            "display_name" => HTML.strip_tags(user.name || user.nickname), +            "confirmation_pending" => false, +            "approval_pending" => true, +            "url" => user.ap_id, +            "registration_reason" => "Plz let me in!" +          } +        ] +        |> Enum.sort_by(& &1["nickname"]) + +      assert json_response(conn, 200) == %{ +               "count" => 1, +               "page_size" => 50, +               "users" => users +             } +    end +      test "load only admins", %{conn: conn, admin: admin} do        second_admin = insert(:user, is_admin: true)        insert(:user) @@ -977,7 +1059,9 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do              "avatar" => User.avatar_url(admin) |> MediaProxy.url(),              "display_name" => HTML.strip_tags(admin.name || admin.nickname),              "confirmation_pending" => false, -            "url" => admin.ap_id +            "approval_pending" => false, +            "url" => admin.ap_id, +            "registration_reason" => nil            },            %{              "deactivated" => false, @@ -989,7 +1073,9 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do              "avatar" => User.avatar_url(second_admin) |> MediaProxy.url(),              "display_name" => HTML.strip_tags(second_admin.name || second_admin.nickname),              "confirmation_pending" => false, -            "url" => second_admin.ap_id +            "approval_pending" => false, +            "url" => second_admin.ap_id, +            "registration_reason" => nil            }          ]          |> Enum.sort_by(& &1["nickname"]) @@ -1022,7 +1108,9 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do                     "avatar" => User.avatar_url(moderator) |> MediaProxy.url(),                     "display_name" => HTML.strip_tags(moderator.name || moderator.nickname),                     "confirmation_pending" => false, -                   "url" => moderator.ap_id +                   "approval_pending" => false, +                   "url" => moderator.ap_id, +                   "registration_reason" => nil                   }                 ]               } @@ -1048,7 +1136,9 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do              "avatar" => User.avatar_url(user1) |> MediaProxy.url(),              "display_name" => HTML.strip_tags(user1.name || user1.nickname),              "confirmation_pending" => false, -            "url" => user1.ap_id +            "approval_pending" => false, +            "url" => user1.ap_id, +            "registration_reason" => nil            },            %{              "deactivated" => false, @@ -1060,7 +1150,9 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do              "avatar" => User.avatar_url(user2) |> MediaProxy.url(),              "display_name" => HTML.strip_tags(user2.name || user2.nickname),              "confirmation_pending" => false, -            "url" => user2.ap_id +            "approval_pending" => false, +            "url" => user2.ap_id, +            "registration_reason" => nil            }          ]          |> Enum.sort_by(& &1["nickname"]) @@ -1100,7 +1192,9 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do                     "avatar" => User.avatar_url(user) |> MediaProxy.url(),                     "display_name" => HTML.strip_tags(user.name || user.nickname),                     "confirmation_pending" => false, -                   "url" => user.ap_id +                   "approval_pending" => false, +                   "url" => user.ap_id, +                   "registration_reason" => nil                   }                 ]               } @@ -1125,7 +1219,9 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do                     "avatar" => User.avatar_url(admin) |> MediaProxy.url(),                     "display_name" => HTML.strip_tags(admin.name || admin.nickname),                     "confirmation_pending" => false, -                   "url" => admin.ap_id +                   "approval_pending" => false, +                   "url" => admin.ap_id, +                   "registration_reason" => nil                   }                 ]               } @@ -1172,6 +1268,26 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do               "@#{admin.nickname} deactivated users: @#{user_one.nickname}, @#{user_two.nickname}"    end +  test "PATCH /api/pleroma/admin/users/approve", %{admin: admin, conn: conn} do +    user_one = insert(:user, approval_pending: true) +    user_two = insert(:user, approval_pending: true) + +    conn = +      patch( +        conn, +        "/api/pleroma/admin/users/approve", +        %{nicknames: [user_one.nickname, user_two.nickname]} +      ) + +    response = json_response(conn, 200) +    assert Enum.map(response["users"], & &1["approval_pending"]) == [false, false] + +    log_entry = Repo.one(ModerationLog) + +    assert ModerationLog.get_log_entry_message(log_entry) == +             "@#{admin.nickname} approved users: @#{user_one.nickname}, @#{user_two.nickname}" +  end +    test "PATCH /api/pleroma/admin/users/:nickname/toggle_activation", %{admin: admin, conn: conn} do      user = insert(:user) @@ -1188,7 +1304,9 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do                 "avatar" => User.avatar_url(user) |> MediaProxy.url(),                 "display_name" => HTML.strip_tags(user.name || user.nickname),                 "confirmation_pending" => false, -               "url" => user.ap_id +               "approval_pending" => false, +               "url" => user.ap_id, +               "registration_reason" => nil               }      log_entry = Repo.one(ModerationLog) diff --git a/test/web/admin_api/search_test.exs b/test/web/admin_api/search_test.exs index e0e3d4153..b974cedd5 100644 --- a/test/web/admin_api/search_test.exs +++ b/test/web/admin_api/search_test.exs @@ -166,5 +166,16 @@ defmodule Pleroma.Web.AdminAPI.SearchTest do        assert total == 3        assert count == 1      end + +    test "it returns unapproved user" do +      unapproved = insert(:user, approval_pending: true) +      insert(:user) +      insert(:user) + +      {:ok, _results, total} = Search.user() +      {:ok, [^unapproved], count} = Search.user(%{need_approval: true}) +      assert total == 3 +      assert count == 1 +    end    end  end diff --git a/test/web/feed/user_controller_test.exs b/test/web/feed/user_controller_test.exs index fa2ed1ea5..0d2a61967 100644 --- a/test/web/feed/user_controller_test.exs +++ b/test/web/feed/user_controller_test.exs @@ -181,6 +181,17 @@ defmodule Pleroma.Web.Feed.UserControllerTest do        assert activity_titles == ['public', 'unlisted']      end + +    test "returns 404 when the user is remote", %{conn: conn} do +      user = insert(:user, local: false) + +      {:ok, _} = CommonAPI.post(user, %{status: "test"}) + +      assert conn +             |> put_req_header("accept", "application/atom+xml") +             |> get(user_feed_path(conn, :feed, user.nickname)) +             |> response(404) +    end    end    # Note: see ActivityPubControllerTest for JSON format tests diff --git a/test/web/mastodon_api/controllers/account_controller_test.exs b/test/web/mastodon_api/controllers/account_controller_test.exs index c304487ea..e6b283aab 100644 --- a/test/web/mastodon_api/controllers/account_controller_test.exs +++ b/test/web/mastodon_api/controllers/account_controller_test.exs @@ -904,6 +904,7 @@ defmodule Pleroma.Web.MastodonAPI.AccountControllerTest do      end      setup do: clear_config([:instance, :account_activation_required]) +    setup do: clear_config([:instance, :account_approval_required])      test "Account registration via Application", %{conn: conn} do        conn = @@ -968,6 +969,75 @@ defmodule Pleroma.Web.MastodonAPI.AccountControllerTest do        assert token_from_db.user.confirmation_pending      end +    test "Account registration via app with account_approval_required", %{conn: conn} do +      Pleroma.Config.put([:instance, :account_approval_required], true) + +      conn = +        conn +        |> put_req_header("content-type", "application/json") +        |> post("/api/v1/apps", %{ +          client_name: "client_name", +          redirect_uris: "urn:ietf:wg:oauth:2.0:oob", +          scopes: "read, write, follow" +        }) + +      assert %{ +               "client_id" => client_id, +               "client_secret" => client_secret, +               "id" => _, +               "name" => "client_name", +               "redirect_uri" => "urn:ietf:wg:oauth:2.0:oob", +               "vapid_key" => _, +               "website" => nil +             } = json_response_and_validate_schema(conn, 200) + +      conn = +        post(conn, "/oauth/token", %{ +          grant_type: "client_credentials", +          client_id: client_id, +          client_secret: client_secret +        }) + +      assert %{"access_token" => token, "refresh_token" => refresh, "scope" => scope} = +               json_response(conn, 200) + +      assert token +      token_from_db = Repo.get_by(Token, token: token) +      assert token_from_db +      assert refresh +      assert scope == "read write follow" + +      conn = +        build_conn() +        |> put_req_header("content-type", "multipart/form-data") +        |> put_req_header("authorization", "Bearer " <> token) +        |> post("/api/v1/accounts", %{ +          username: "lain", +          email: "lain@example.org", +          password: "PlzDontHackLain", +          bio: "Test Bio", +          agreement: true, +          reason: "I'm a cool dude, bro" +        }) + +      %{ +        "access_token" => token, +        "created_at" => _created_at, +        "scope" => ^scope, +        "token_type" => "Bearer" +      } = json_response_and_validate_schema(conn, 200) + +      token_from_db = Repo.get_by(Token, token: token) +      assert token_from_db +      token_from_db = Repo.preload(token_from_db, :user) +      assert token_from_db.user + +      assert token_from_db.user.confirmation_pending +      assert token_from_db.user.approval_pending + +      assert token_from_db.user.registration_reason == "I'm a cool dude, bro" +    end +      test "returns error when user already registred", %{conn: conn, valid_params: valid_params} do        _user = insert(:user, email: "lain@example.org")        app_token = insert(:oauth_token, user: nil) diff --git a/test/web/mastodon_api/controllers/instance_controller_test.exs b/test/web/mastodon_api/controllers/instance_controller_test.exs index cc880d82c..6a9ccd979 100644 --- a/test/web/mastodon_api/controllers/instance_controller_test.exs +++ b/test/web/mastodon_api/controllers/instance_controller_test.exs @@ -27,6 +27,7 @@ defmodule Pleroma.Web.MastodonAPI.InstanceControllerTest do               "thumbnail" => _,               "languages" => _,               "registrations" => _, +             "approval_required" => _,               "poll_limits" => _,               "upload_limit" => _,               "avatar_upload_limit" => _, diff --git a/test/web/oauth/oauth_controller_test.exs b/test/web/oauth/oauth_controller_test.exs index d389e4ce0..1200126b8 100644 --- a/test/web/oauth/oauth_controller_test.exs +++ b/test/web/oauth/oauth_controller_test.exs @@ -19,7 +19,10 @@ defmodule Pleroma.Web.OAuth.OAuthControllerTest do      key: "_test",      signing_salt: "cooldude"    ] -  setup do: clear_config([:instance, :account_activation_required]) +  setup do +    clear_config([:instance, :account_activation_required]) +    clear_config([:instance, :account_approval_required]) +  end    describe "in OAuth consumer mode, " do      setup do @@ -995,6 +998,30 @@ defmodule Pleroma.Web.OAuth.OAuthControllerTest do               }      end +    test "rejects token exchange for valid credentials belonging to an unapproved user" do +      password = "testpassword" + +      user = insert(:user, password_hash: Pbkdf2.hash_pwd_salt(password), approval_pending: true) + +      refute Pleroma.User.account_status(user) == :active + +      app = insert(:oauth_app) + +      conn = +        build_conn() +        |> post("/oauth/token", %{ +          "grant_type" => "password", +          "username" => user.nickname, +          "password" => password, +          "client_id" => app.client_id, +          "client_secret" => app.client_secret +        }) + +      assert resp = json_response(conn, 403) +      assert %{"error" => _} = resp +      refute Map.has_key?(resp, "access_token") +    end +      test "rejects an invalid authorization code" do        app = insert(:oauth_app) diff --git a/test/web/twitter_api/twitter_api_test.exs b/test/web/twitter_api/twitter_api_test.exs index 5bb2d8d89..20a45cb6f 100644 --- a/test/web/twitter_api/twitter_api_test.exs +++ b/test/web/twitter_api/twitter_api_test.exs @@ -4,7 +4,7 @@  defmodule Pleroma.Web.TwitterAPI.TwitterAPITest do    use Pleroma.DataCase - +  import Pleroma.Factory    alias Pleroma.Repo    alias Pleroma.Tests.ObanHelpers    alias Pleroma.User @@ -79,6 +79,42 @@ defmodule Pleroma.Web.TwitterAPI.TwitterAPITest do      )    end +  test "it sends an admin email if :account_approval_required is specified in instance config" do +    admin = insert(:user, is_admin: true) +    setting = Pleroma.Config.get([:instance, :account_approval_required]) + +    unless setting do +      Pleroma.Config.put([:instance, :account_approval_required], true) +      on_exit(fn -> Pleroma.Config.put([:instance, :account_approval_required], setting) end) +    end + +    data = %{ +      :username => "lain", +      :email => "lain@wired.jp", +      :fullname => "lain iwakura", +      :bio => "", +      :password => "bear", +      :confirm => "bear", +      :reason => "I love anime" +    } + +    {:ok, user} = TwitterAPI.register_user(data) +    ObanHelpers.perform_all() + +    assert user.approval_pending + +    email = Pleroma.Emails.AdminEmail.new_unapproved_registration(admin, user) + +    notify_email = Pleroma.Config.get([:instance, :notify_email]) +    instance_name = Pleroma.Config.get([:instance, :name]) + +    Swoosh.TestAssertions.assert_email_sent( +      from: {instance_name, notify_email}, +      to: {admin.name, admin.email}, +      html_body: email.html_body +    ) +  end +    test "it registers a new user and parses mentions in the bio" do      data1 = %{        :username => "john", | 
