diff options
Diffstat (limited to 'test')
| -rw-r--r-- | test/fixtures/lambadalambda.json | 64 | ||||
| -rw-r--r-- | test/support/http_request_mock.ex | 4 | ||||
| -rw-r--r-- | test/web/twitter_api/twitter_api_test.exs | 361 | 
3 files changed, 380 insertions, 49 deletions
diff --git a/test/fixtures/lambadalambda.json b/test/fixtures/lambadalambda.json new file mode 100644 index 000000000..1f09fb591 --- /dev/null +++ b/test/fixtures/lambadalambda.json @@ -0,0 +1,64 @@ +{ +  "@context": [ +    "https://www.w3.org/ns/activitystreams", +    "https://w3id.org/security/v1", +    { +      "manuallyApprovesFollowers": "as:manuallyApprovesFollowers", +      "toot": "http://joinmastodon.org/ns#", +      "featured": { +        "@id": "toot:featured", +        "@type": "@id" +      }, +      "alsoKnownAs": { +        "@id": "as:alsoKnownAs", +        "@type": "@id" +      }, +      "movedTo": { +        "@id": "as:movedTo", +        "@type": "@id" +      }, +      "schema": "http://schema.org#", +      "PropertyValue": "schema:PropertyValue", +      "value": "schema:value", +      "Hashtag": "as:Hashtag", +      "Emoji": "toot:Emoji", +      "IdentityProof": "toot:IdentityProof", +      "focalPoint": { +        "@container": "@list", +        "@id": "toot:focalPoint" +      } +    } +  ], +  "id": "https://mastodon.social/users/lambadalambda", +  "type": "Person", +  "following": "https://mastodon.social/users/lambadalambda/following", +  "followers": "https://mastodon.social/users/lambadalambda/followers", +  "inbox": "https://mastodon.social/users/lambadalambda/inbox", +  "outbox": "https://mastodon.social/users/lambadalambda/outbox", +  "featured": "https://mastodon.social/users/lambadalambda/collections/featured", +  "preferredUsername": "lambadalambda", +  "name": "Critical Value", +  "summary": "\u003cp\u003e\u003c/p\u003e", +  "url": "https://mastodon.social/@lambadalambda", +  "manuallyApprovesFollowers": false, +  "publicKey": { +    "id": "https://mastodon.social/users/lambadalambda#main-key", +    "owner": "https://mastodon.social/users/lambadalambda", +    "publicKeyPem": "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAw0P/Tq4gb4G/QVuMGbJo\nC/AfMNcv+m7NfrlOwkVzcU47jgESuYI4UtJayissCdBycHUnfVUd9qol+eznSODz\nCJhfJloqEIC+aSnuEPGA0POtWad6DU0E6/Ho5zQn5WAWUwbRQqowbrsm/GHo2+3v\neR5jGenwA6sYhINg/c3QQbksyV0uJ20Umyx88w8+TJuv53twOfmyDWuYNoQ3y5cc\nHKOZcLHxYOhvwg3PFaGfFHMFiNmF40dTXt9K96r7sbzc44iLD+VphbMPJEjkMuf8\nPGEFOBzy8pm3wJZw2v32RNW2VESwMYyqDzwHXGSq1a73cS7hEnc79gXlELsK04L9\nQQIDAQAB\n-----END PUBLIC KEY-----\n" +  }, +  "tag": [], +  "attachment": [], +  "endpoints": { +    "sharedInbox": "https://mastodon.social/inbox" +  }, +  "icon": { +    "type": "Image", +    "mediaType": "image/gif", +    "url": "https://files.mastodon.social/accounts/avatars/000/000/264/original/1429214160519.gif" +  }, +  "image": { +    "type": "Image", +    "mediaType": "image/gif", +    "url": "https://files.mastodon.social/accounts/headers/000/000/264/original/28b26104f83747d2.gif" +  } +} diff --git a/test/support/http_request_mock.ex b/test/support/http_request_mock.ex index d3b547d91..5b355bfe6 100644 --- a/test/support/http_request_mock.ex +++ b/test/support/http_request_mock.ex @@ -716,6 +716,10 @@ defmodule HttpRequestMock do      {:ok, %Tesla.Env{status: 200, body: File.read!("test/fixtures/lambadalambda.atom")}}    end +  def get("https://mastodon.social/users/lambadalambda", _, _, _) do +    {:ok, %Tesla.Env{status: 200, body: File.read!("test/fixtures/lambadalambda.json")}} +  end +    def get("https://social.heldscal.la/user/23211", _, _, Accept: "application/activity+json") do      {:ok, Tesla.Mock.json(%{"id" => "https://social.heldscal.la/user/23211"}, status: 200)}    end diff --git a/test/web/twitter_api/twitter_api_test.exs b/test/web/twitter_api/twitter_api_test.exs index 6c00244de..716fccfb2 100644 --- a/test/web/twitter_api/twitter_api_test.exs +++ b/test/web/twitter_api/twitter_api_test.exs @@ -16,6 +16,11 @@ defmodule Pleroma.Web.TwitterAPI.TwitterAPITest do    import Pleroma.Factory +  setup_all do +    Tesla.Mock.mock_global(fn env -> apply(HttpRequestMock, :request, [env]) end) +    :ok +  end +    test "create a status" do      user = insert(:user)      mentioned_user = insert(:user, %{nickname: "shp", ap_id: "shp"}) @@ -299,7 +304,6 @@ defmodule Pleroma.Web.TwitterAPI.TwitterAPITest do               UserView.render("show.json", %{user: fetched_user})    end -  @moduletag skip: "needs 'account_activation_required: true' in config"    test "it sends confirmation email if :account_activation_required is specified in instance config" do      setting = Pleroma.Config.get([:instance, :account_activation_required]) @@ -353,68 +357,327 @@ defmodule Pleroma.Web.TwitterAPI.TwitterAPITest do      assert user2.bio == expected_text    end -  @moduletag skip: "needs 'registrations_open: false' in config" -  test "it registers a new user via invite token and returns the user." do -    {:ok, token} = UserInviteToken.create_token() +  describe "register with one time token" do +    setup do +      setting = Pleroma.Config.get([:instance, :registrations_open]) -    data = %{ -      "nickname" => "vinny", -      "email" => "pasta@pizza.vs", -      "fullname" => "Vinny Vinesauce", -      "bio" => "streamer", -      "password" => "hiptofbees", -      "confirm" => "hiptofbees", -      "token" => token.token -    } +      if setting do +        Pleroma.Config.put([:instance, :registrations_open], false) +        on_exit(fn -> Pleroma.Config.put([:instance, :registrations_open], setting) end) +      end -    {:ok, user} = TwitterAPI.register_user(data) +      :ok +    end -    fetched_user = User.get_by_nickname("vinny") -    token = Repo.get_by(UserInviteToken, token: token.token) +    test "returns user on success" do +      {:ok, token} = UserInviteToken.create_token() -    assert token.used == true +      data = %{ +        "nickname" => "vinny", +        "email" => "pasta@pizza.vs", +        "fullname" => "Vinny Vinesauce", +        "bio" => "streamer", +        "password" => "hiptofbees", +        "confirm" => "hiptofbees", +        "token" => token.token +      } -    assert UserView.render("show.json", %{user: user}) == -             UserView.render("show.json", %{user: fetched_user}) +      {:ok, user} = TwitterAPI.register_user(data) + +      fetched_user = User.get_by_nickname("vinny") +      token = Repo.get_by(UserInviteToken, token: token.token) + +      assert token.used == true + +      assert UserView.render("show.json", %{user: user}) == +               UserView.render("show.json", %{user: fetched_user}) +    end + +    test "returns error on invalid token" do +      data = %{ +        "nickname" => "GrimReaper", +        "email" => "death@reapers.afterlife", +        "fullname" => "Reaper Grim", +        "bio" => "Your time has come", +        "password" => "scythe", +        "confirm" => "scythe", +        "token" => "DudeLetMeInImAFairy" +      } + +      {:error, msg} = TwitterAPI.register_user(data) + +      assert msg == "Invalid token" +      refute User.get_by_nickname("GrimReaper") +    end + +    test "returns error on expired token" do +      {:ok, token} = UserInviteToken.create_token() +      UserInviteToken.mark_as_used(token.token) + +      data = %{ +        "nickname" => "GrimReaper", +        "email" => "death@reapers.afterlife", +        "fullname" => "Reaper Grim", +        "bio" => "Your time has come", +        "password" => "scythe", +        "confirm" => "scythe", +        "token" => token.token +      } + +      {:error, msg} = TwitterAPI.register_user(data) + +      assert msg == "Expired token" +      refute User.get_by_nickname("GrimReaper") +    end    end -  @moduletag skip: "needs 'registrations_open: false' in config" -  test "it returns an error if invalid token submitted" do -    data = %{ -      "nickname" => "GrimReaper", -      "email" => "death@reapers.afterlife", -      "fullname" => "Reaper Grim", -      "bio" => "Your time has come", -      "password" => "scythe", -      "confirm" => "scythe", -      "token" => "DudeLetMeInImAFairy" -    } +  describe "registers with date limited token" do +    setup do +      setting = Pleroma.Config.get([:instance, :registrations_open]) + +      if setting do +        Pleroma.Config.put([:instance, :registrations_open], false) +        on_exit(fn -> Pleroma.Config.put([:instance, :registrations_open], setting) end) +      end + +      data = %{ +        "nickname" => "vinny", +        "email" => "pasta@pizza.vs", +        "fullname" => "Vinny Vinesauce", +        "bio" => "streamer", +        "password" => "hiptofbees", +        "confirm" => "hiptofbees" +      } + +      check_fn = fn token -> +        data = Map.put(data, "token", token.token) +        {:ok, user} = TwitterAPI.register_user(data) +        fetched_user = User.get_by_nickname("vinny") + +        assert UserView.render("show.json", %{user: user}) == +                 UserView.render("show.json", %{user: fetched_user}) +      end + +      {:ok, data: data, check_fn: check_fn} +    end + +    test "returns user on success", %{check_fn: check_fn} do +      {:ok, token} = UserInviteToken.create_token(expire_at: Date.utc_today()) + +      check_fn.(token) + +      token = Repo.get_by(UserInviteToken, token: token.token) + +      refute token.used +    end + +    test "returns user on token which expired tomorrow", %{check_fn: check_fn} do +      {:ok, token} = UserInviteToken.create_token(expire_at: Date.add(Date.utc_today(), 1)) + +      check_fn.(token) + +      token = Repo.get_by(UserInviteToken, token: token.token) -    {:error, msg} = TwitterAPI.register_user(data) +      refute token.used +    end + +    test "returns an error on overdue date", %{data: data} do +      {:ok, token} = UserInviteToken.create_token(expire_at: Date.add(Date.utc_today(), -1)) + +      data = Map.put(data, "token", token.token) + +      {:error, msg} = TwitterAPI.register_user(data) -    assert msg == "Invalid token" -    refute User.get_by_nickname("GrimReaper") +      assert msg == "Expired token" +      refute User.get_by_nickname("vinny") +      token = Repo.get_by(UserInviteToken, token: token.token) + +      assert token.used == true +    end    end -  @moduletag skip: "needs 'registrations_open: false' in config" -  test "it returns an error if expired token submitted" do -    {:ok, token} = UserInviteToken.create_token() -    UserInviteToken.mark_as_used(token.token) +  describe "registers with reusable token" do +    setup do +      setting = Pleroma.Config.get([:instance, :registrations_open]) -    data = %{ -      "nickname" => "GrimReaper", -      "email" => "death@reapers.afterlife", -      "fullname" => "Reaper Grim", -      "bio" => "Your time has come", -      "password" => "scythe", -      "confirm" => "scythe", -      "token" => token.token -    } +      if setting do +        Pleroma.Config.put([:instance, :registrations_open], false) +        on_exit(fn -> Pleroma.Config.put([:instance, :registrations_open], setting) end) +      end + +      :ok +    end + +    test "returns user on success, after him registration fails" do +      {:ok, token} = UserInviteToken.create_token(max_use: 100) + +      Ecto.Changeset.change(token, uses: 99) |> Repo.update!() + +      data = %{ +        "nickname" => "vinny", +        "email" => "pasta@pizza.vs", +        "fullname" => "Vinny Vinesauce", +        "bio" => "streamer", +        "password" => "hiptofbees", +        "confirm" => "hiptofbees", +        "token" => token.token +      } + +      {:ok, user} = TwitterAPI.register_user(data) +      fetched_user = User.get_by_nickname("vinny") +      token = Repo.get_by(UserInviteToken, token: token.token) + +      assert token.used == true + +      assert UserView.render("show.json", %{user: user}) == +               UserView.render("show.json", %{user: fetched_user}) -    {:error, msg} = TwitterAPI.register_user(data) +      data = %{ +        "nickname" => "GrimReaper", +        "email" => "death@reapers.afterlife", +        "fullname" => "Reaper Grim", +        "bio" => "Your time has come", +        "password" => "scythe", +        "confirm" => "scythe", +        "token" => token.token +      } -    assert msg == "Expired token" -    refute User.get_by_nickname("GrimReaper") +      {:error, msg} = TwitterAPI.register_user(data) + +      assert msg == "Expired token" +      refute User.get_by_nickname("GrimReaper") +    end +  end + +  describe "registers with reusable date limited token" do +    setup do +      setting = Pleroma.Config.get([:instance, :registrations_open]) + +      if setting do +        Pleroma.Config.put([:instance, :registrations_open], false) +        on_exit(fn -> Pleroma.Config.put([:instance, :registrations_open], setting) end) +      end + +      :ok +    end + +    test "returns user on success" do +      {:ok, token} = +        UserInviteToken.create_token( +          expire_at: Date.utc_today(), +          max_use: 100 +        ) + +      data = %{ +        "nickname" => "vinny", +        "email" => "pasta@pizza.vs", +        "fullname" => "Vinny Vinesauce", +        "bio" => "streamer", +        "password" => "hiptofbees", +        "confirm" => "hiptofbees", +        "token" => token.token +      } + +      {:ok, user} = TwitterAPI.register_user(data) +      fetched_user = User.get_by_nickname("vinny") +      token = Repo.get_by(UserInviteToken, token: token.token) + +      refute token.used + +      assert UserView.render("show.json", %{user: user}) == +               UserView.render("show.json", %{user: fetched_user}) +    end + +    test "error after max uses" do +      {:ok, token} = +        UserInviteToken.create_token( +          expire_at: Date.utc_today(), +          max_use: 100 +        ) + +      Ecto.Changeset.change(token, uses: 99) |> Repo.update!() + +      data = %{ +        "nickname" => "vinny", +        "email" => "pasta@pizza.vs", +        "fullname" => "Vinny Vinesauce", +        "bio" => "streamer", +        "password" => "hiptofbees", +        "confirm" => "hiptofbees", +        "token" => token.token +      } + +      {:ok, user} = TwitterAPI.register_user(data) +      fetched_user = User.get_by_nickname("vinny") +      token = Repo.get_by(UserInviteToken, token: token.token) +      assert token.used == true + +      assert UserView.render("show.json", %{user: user}) == +               UserView.render("show.json", %{user: fetched_user}) + +      data = %{ +        "nickname" => "GrimReaper", +        "email" => "death@reapers.afterlife", +        "fullname" => "Reaper Grim", +        "bio" => "Your time has come", +        "password" => "scythe", +        "confirm" => "scythe", +        "token" => token.token +      } + +      {:error, msg} = TwitterAPI.register_user(data) + +      assert msg == "Expired token" +      refute User.get_by_nickname("GrimReaper") +    end + +    test "returns error on overdue date" do +      {:ok, token} = +        UserInviteToken.create_token( +          expire_at: Date.add(Date.utc_today(), -1), +          max_use: 100 +        ) + +      data = %{ +        "nickname" => "GrimReaper", +        "email" => "death@reapers.afterlife", +        "fullname" => "Reaper Grim", +        "bio" => "Your time has come", +        "password" => "scythe", +        "confirm" => "scythe", +        "token" => token.token +      } + +      {:error, msg} = TwitterAPI.register_user(data) + +      assert msg == "Expired token" +      refute User.get_by_nickname("GrimReaper") +    end + +    test "returns error on with overdue date and after max" do +      {:ok, token} = +        UserInviteToken.create_token( +          expire_at: Date.add(Date.utc_today(), -1), +          max_use: 100 +        ) + +      Ecto.Changeset.change(token, uses: 100) |> Repo.update!() + +      data = %{ +        "nickname" => "GrimReaper", +        "email" => "death@reapers.afterlife", +        "fullname" => "Reaper Grim", +        "bio" => "Your time has come", +        "password" => "scythe", +        "confirm" => "scythe", +        "token" => token.token +      } + +      {:error, msg} = TwitterAPI.register_user(data) + +      assert msg == "Expired token" +      refute User.get_by_nickname("GrimReaper") +    end    end    test "it returns the error on registration problems" do  | 
