diff options
Diffstat (limited to 'test/web/twitter_api')
| -rw-r--r-- | test/web/twitter_api/password_controller_test.exs | 21 | ||||
| -rw-r--r-- | test/web/twitter_api/twitter_api_test.exs | 8 | ||||
| -rw-r--r-- | test/web/twitter_api/util_controller_test.exs | 161 | 
3 files changed, 163 insertions, 27 deletions
| diff --git a/test/web/twitter_api/password_controller_test.exs b/test/web/twitter_api/password_controller_test.exs index 3a7246ea8..dc6d4e3e3 100644 --- a/test/web/twitter_api/password_controller_test.exs +++ b/test/web/twitter_api/password_controller_test.exs @@ -6,6 +6,7 @@ defmodule Pleroma.Web.TwitterAPI.PasswordControllerTest do    use Pleroma.Web.ConnCase    alias Pleroma.PasswordResetToken +  alias Pleroma.User    alias Pleroma.Web.OAuth.Token    import Pleroma.Factory @@ -56,5 +57,25 @@ defmodule Pleroma.Web.TwitterAPI.PasswordControllerTest do        assert Comeonin.Pbkdf2.checkpw("test", user.password_hash)        assert length(Token.get_user_tokens(user)) == 0      end + +    test "it sets password_reset_pending to false", %{conn: conn} do +      user = insert(:user, info: %{password_reset_pending: true}) + +      {:ok, token} = PasswordResetToken.create_token(user) +      {:ok, _access_token} = Token.create_token(insert(:oauth_app), user, %{}) + +      params = %{ +        "password" => "test", +        password_confirmation: "test", +        token: token.token +      } + +      conn +      |> assign(:user, user) +      |> post("/api/pleroma/password_reset", %{data: params}) +      |> html_response(:ok) + +      assert User.get_by_id(user.id).info.password_reset_pending == false +    end    end  end diff --git a/test/web/twitter_api/twitter_api_test.exs b/test/web/twitter_api/twitter_api_test.exs index c5b18234e..bf1e233f5 100644 --- a/test/web/twitter_api/twitter_api_test.exs +++ b/test/web/twitter_api/twitter_api_test.exs @@ -1,10 +1,11 @@  # Pleroma: A lightweight social networking server -# Copyright © 2017-2018 Pleroma Authors <https://pleroma.social/> +# Copyright © 2017-2019 Pleroma Authors <https://pleroma.social/>  # SPDX-License-Identifier: AGPL-3.0-only  defmodule Pleroma.Web.TwitterAPI.TwitterAPITest do    use Pleroma.DataCase    alias Pleroma.Repo +  alias Pleroma.Tests.ObanHelpers    alias Pleroma.User    alias Pleroma.UserInviteToken    alias Pleroma.Web.MastodonAPI.AccountView @@ -68,6 +69,7 @@ defmodule Pleroma.Web.TwitterAPI.TwitterAPITest do      }      {:ok, user} = TwitterAPI.register_user(data) +    ObanHelpers.perform_all()      assert user.info.confirmation_pending @@ -107,7 +109,9 @@ defmodule Pleroma.Web.TwitterAPI.TwitterAPITest do      {:ok, user2} = TwitterAPI.register_user(data2)      expected_text = -      "<span class='h-card'><a data-user='#{user1.id}' class='u-url mention' href='#{user1.ap_id}'>@<span>john</span></a></span> test" +      ~s(<span class="h-card"><a data-user="#{user1.id}" class="u-url mention" href="#{ +        user1.ap_id +      }" rel="ugc">@<span>john</span></a></span> test)      assert user2.bio == expected_text    end diff --git a/test/web/twitter_api/util_controller_test.exs b/test/web/twitter_api/util_controller_test.exs index a3c6145c0..56e318182 100644 --- a/test/web/twitter_api/util_controller_test.exs +++ b/test/web/twitter_api/util_controller_test.exs @@ -4,10 +4,13 @@  defmodule Pleroma.Web.TwitterAPI.UtilControllerTest do    use Pleroma.Web.ConnCase +  use Oban.Testing, repo: Pleroma.Repo    alias Pleroma.Repo +  alias Pleroma.Tests.ObanHelpers    alias Pleroma.User    alias Pleroma.Web.CommonAPI +  import ExUnit.CaptureLog    import Pleroma.Factory    import Mock @@ -42,8 +45,7 @@ defmodule Pleroma.Web.TwitterAPI.UtilControllerTest do          {File, [],           read!: fn "follow_list.txt" ->             "Account address,Show boosts\n#{user2.ap_id},true" -         end}, -        {PleromaJobQueue, [:passthrough], []} +         end}        ]) do          response =            conn @@ -51,15 +53,16 @@ defmodule Pleroma.Web.TwitterAPI.UtilControllerTest do            |> post("/api/pleroma/follow_import", %{"list" => %Plug.Upload{path: "follow_list.txt"}})            |> json_response(:ok) -        assert called( -                 PleromaJobQueue.enqueue( -                   :background, -                   User, -                   [:follow_import, user1, [user2.ap_id]] -                 ) -               ) -          assert response == "job started" + +        assert ObanHelpers.member?( +                 %{ +                   "op" => "follow_import", +                   "follower_id" => user1.id, +                   "followed_identifiers" => [user2.ap_id] +                 }, +                 all_enqueued(worker: Pleroma.Workers.BackgroundWorker) +               )        end      end @@ -118,8 +121,7 @@ defmodule Pleroma.Web.TwitterAPI.UtilControllerTest do        user3 = insert(:user)        with_mocks([ -        {File, [], read!: fn "blocks_list.txt" -> "#{user2.ap_id} #{user3.ap_id}" end}, -        {PleromaJobQueue, [:passthrough], []} +        {File, [], read!: fn "blocks_list.txt" -> "#{user2.ap_id} #{user3.ap_id}" end}        ]) do          response =            conn @@ -127,15 +129,16 @@ defmodule Pleroma.Web.TwitterAPI.UtilControllerTest do            |> post("/api/pleroma/blocks_import", %{"list" => %Plug.Upload{path: "blocks_list.txt"}})            |> json_response(:ok) -        assert called( -                 PleromaJobQueue.enqueue( -                   :background, -                   User, -                   [:blocks_import, user1, [user2.ap_id, user3.ap_id]] -                 ) -               ) -          assert response == "job started" + +        assert ObanHelpers.member?( +                 %{ +                   "op" => "blocks_import", +                   "blocker_id" => user1.id, +                   "blocked_identifiers" => [user2.ap_id, user3.ap_id] +                 }, +                 all_enqueued(worker: Pleroma.Workers.BackgroundWorker) +               )        end      end    end @@ -338,12 +341,14 @@ defmodule Pleroma.Web.TwitterAPI.UtilControllerTest do      test "show follow page with error when user cannot fecth by `acct` link", %{conn: conn} do        user = insert(:user) -      response = -        conn -        |> assign(:user, user) -        |> get("/ostatus_subscribe?acct=https://mastodon.social/users/not_found") +      assert capture_log(fn -> +               response = +                 conn +                 |> assign(:user, user) +                 |> get("/ostatus_subscribe?acct=https://mastodon.social/users/not_found") -      assert html_response(response, 200) =~ "Error fetching user" +               assert html_response(response, 200) =~ "Error fetching user" +             end) =~ "Object has been deleted"      end    end @@ -557,6 +562,7 @@ defmodule Pleroma.Web.TwitterAPI.UtilControllerTest do          |> json_response(:ok)        assert response == %{"status" => "success"} +      ObanHelpers.perform_all()        user = User.get_cached_by_id(user.id) @@ -769,4 +775,109 @@ defmodule Pleroma.Web.TwitterAPI.UtilControllerTest do        assert json_response(conn, 200) == %{"status" => "success"}      end    end + +  describe "POST /api/pleroma/change_password" do +    setup [:valid_user] + +    test "without credentials", %{conn: conn} do +      conn = post(conn, "/api/pleroma/change_password") +      assert json_response(conn, 403) == %{"error" => "Invalid credentials."} +    end + +    test "with credentials and invalid password", %{conn: conn, user: current_user} do +      conn = +        conn +        |> with_credentials(current_user.nickname, "test") +        |> post("/api/pleroma/change_password", %{ +          "password" => "hi", +          "new_password" => "newpass", +          "new_password_confirmation" => "newpass" +        }) + +      assert json_response(conn, 200) == %{"error" => "Invalid password."} +    end + +    test "with credentials, valid password and new password and confirmation not matching", %{ +      conn: conn, +      user: current_user +    } do +      conn = +        conn +        |> with_credentials(current_user.nickname, "test") +        |> post("/api/pleroma/change_password", %{ +          "password" => "test", +          "new_password" => "newpass", +          "new_password_confirmation" => "notnewpass" +        }) + +      assert json_response(conn, 200) == %{ +               "error" => "New password does not match confirmation." +             } +    end + +    test "with credentials, valid password and invalid new password", %{ +      conn: conn, +      user: current_user +    } do +      conn = +        conn +        |> with_credentials(current_user.nickname, "test") +        |> post("/api/pleroma/change_password", %{ +          "password" => "test", +          "new_password" => "", +          "new_password_confirmation" => "" +        }) + +      assert json_response(conn, 200) == %{ +               "error" => "New password can't be blank." +             } +    end + +    test "with credentials, valid password and matching new password and confirmation", %{ +      conn: conn, +      user: current_user +    } do +      conn = +        conn +        |> with_credentials(current_user.nickname, "test") +        |> post("/api/pleroma/change_password", %{ +          "password" => "test", +          "new_password" => "newpass", +          "new_password_confirmation" => "newpass" +        }) + +      assert json_response(conn, 200) == %{"status" => "success"} +      fetched_user = User.get_cached_by_id(current_user.id) +      assert Comeonin.Pbkdf2.checkpw("newpass", fetched_user.password_hash) == true +    end +  end + +  describe "POST /api/pleroma/delete_account" do +    setup [:valid_user] + +    test "without credentials", %{conn: conn} do +      conn = post(conn, "/api/pleroma/delete_account") +      assert json_response(conn, 403) == %{"error" => "Invalid credentials."} +    end + +    test "with credentials and invalid password", %{conn: conn, user: current_user} do +      conn = +        conn +        |> with_credentials(current_user.nickname, "test") +        |> post("/api/pleroma/delete_account", %{"password" => "hi"}) + +      assert json_response(conn, 200) == %{"error" => "Invalid password."} +    end + +    test "with credentials and valid password", %{conn: conn, user: current_user} do +      conn = +        conn +        |> with_credentials(current_user.nickname, "test") +        |> post("/api/pleroma/delete_account", %{"password" => "test"}) + +      assert json_response(conn, 200) == %{"status" => "success"} +      # Wait a second for the started task to end +      :timer.sleep(1000) +    end +  end  end | 
