diff options
Diffstat (limited to 'test/web')
| -rw-r--r-- | test/web/common_api/common_api_test.exs | 45 | ||||
| -rw-r--r-- | test/web/common_api/common_api_utils_test.exs | 20 | ||||
| -rw-r--r-- | test/web/federator_test.exs | 7 | ||||
| -rw-r--r-- | test/web/mastodon_api/controllers/account_controller_test.exs | 6 | ||||
| -rw-r--r-- | test/web/mastodon_api/controllers/status_controller_test.exs | 11 | ||||
| -rw-r--r-- | test/web/mastodon_api/views/poll_view_test.exs | 16 | ||||
| -rw-r--r-- | test/web/push/impl_test.exs | 4 | ||||
| -rw-r--r-- | test/web/streamer/streamer_test.exs | 36 | ||||
| -rw-r--r-- | test/web/twitter_api/util_controller_test.exs | 47 | 
9 files changed, 160 insertions, 32 deletions
diff --git a/test/web/common_api/common_api_test.exs b/test/web/common_api/common_api_test.exs index 86b3648ac..0f8860ec5 100644 --- a/test/web/common_api/common_api_test.exs +++ b/test/web/common_api/common_api_test.exs @@ -71,6 +71,33 @@ defmodule Pleroma.Web.CommonAPITest do      end    end +  test "favoriting race condition" do +    user = insert(:user) +    users_serial = insert_list(10, :user) +    users = insert_list(10, :user) + +    {:ok, activity} = CommonAPI.post(user, %{"status" => "."}) + +    users_serial +    |> Enum.map(fn user -> +      CommonAPI.favorite(user, activity.id) +    end) + +    object = Object.get_by_ap_id(activity.data["object"]) +    assert object.data["like_count"] == 10 + +    users +    |> Enum.map(fn user -> +      Task.async(fn -> +        CommonAPI.favorite(user, activity.id) +      end) +    end) +    |> Enum.map(&Task.await/1) + +    object = Object.get_by_ap_id(activity.data["object"]) +    assert object.data["like_count"] == 20 +  end +    test "when replying to a conversation / participation, it will set the correct context id even if no explicit reply_to is given" do      user = insert(:user)      {:ok, activity} = CommonAPI.post(user, %{"status" => ".", "visibility" => "direct"}) @@ -306,6 +333,16 @@ defmodule Pleroma.Web.CommonAPITest do        {:ok, %Activity{}, _} = CommonAPI.repeat(activity.id, user)      end +    test "can't repeat a repeat" do +      user = insert(:user) +      other_user = insert(:user) +      {:ok, activity} = CommonAPI.post(other_user, %{"status" => "cofe"}) + +      {:ok, %Activity{} = announce, _} = CommonAPI.repeat(activity.id, other_user) + +      refute match?({:ok, %Activity{}, _}, CommonAPI.repeat(announce.id, user)) +    end +      test "repeating a status privately" do        user = insert(:user)        other_user = insert(:user) @@ -335,8 +372,8 @@ defmodule Pleroma.Web.CommonAPITest do        other_user = insert(:user)        {:ok, activity} = CommonAPI.post(other_user, %{"status" => "cofe"}) -      {:ok, %Activity{} = activity, object} = CommonAPI.repeat(activity.id, user) -      {:ok, ^activity, ^object} = CommonAPI.repeat(activity.id, user) +      {:ok, %Activity{} = announce, object} = CommonAPI.repeat(activity.id, user) +      {:ok, ^announce, ^object} = CommonAPI.repeat(activity.id, user)      end      test "favoriting a status twice returns ok, but without the like activity" do @@ -410,7 +447,9 @@ defmodule Pleroma.Web.CommonAPITest do        user = refresh_record(user) -      assert {:ok, ^activity} = CommonAPI.unpin(activity.id, user) +      id = activity.id + +      assert match?({:ok, %{id: ^id}}, CommonAPI.unpin(activity.id, user))        user = refresh_record(user) diff --git a/test/web/common_api/common_api_utils_test.exs b/test/web/common_api/common_api_utils_test.exs index b21445fe9..18a3b3b87 100644 --- a/test/web/common_api/common_api_utils_test.exs +++ b/test/web/common_api/common_api_utils_test.exs @@ -335,26 +335,6 @@ defmodule Pleroma.Web.CommonAPI.UtilsTest do      end    end -  describe "get_by_id_or_ap_id/1" do -    test "get activity by id" do -      activity = insert(:note_activity) -      %Pleroma.Activity{} = note = Utils.get_by_id_or_ap_id(activity.id) -      assert note.id == activity.id -    end - -    test "get activity by ap_id" do -      activity = insert(:note_activity) -      %Pleroma.Activity{} = note = Utils.get_by_id_or_ap_id(activity.data["object"]) -      assert note.id == activity.id -    end - -    test "get activity by object when type isn't `Create` " do -      activity = insert(:like_activity) -      %Pleroma.Activity{} = like = Utils.get_by_id_or_ap_id(activity.id) -      assert like.data["object"] == activity.data["object"] -    end -  end -    describe "to_master_date/1" do      test "removes microseconds from date (NaiveDateTime)" do        assert Utils.to_masto_date(~N[2015-01-23 23:50:07.123]) == "2015-01-23T23:50:07.000Z" diff --git a/test/web/federator_test.exs b/test/web/federator_test.exs index 59e53bb03..261518ef0 100644 --- a/test/web/federator_test.exs +++ b/test/web/federator_test.exs @@ -130,6 +130,9 @@ defmodule Pleroma.Web.FederatorTest do        assert {:ok, job} = Federator.incoming_ap_doc(params)        assert {:ok, _activity} = ObanHelpers.perform(job) + +      assert {:ok, job} = Federator.incoming_ap_doc(params) +      assert {:error, :already_present} = ObanHelpers.perform(job)      end      test "rejects incoming AP docs with incorrect origin" do @@ -148,7 +151,7 @@ defmodule Pleroma.Web.FederatorTest do        }        assert {:ok, job} = Federator.incoming_ap_doc(params) -      assert :error = ObanHelpers.perform(job) +      assert {:error, :origin_containment_failed} = ObanHelpers.perform(job)      end      test "it does not crash if MRF rejects the post" do @@ -164,7 +167,7 @@ defmodule Pleroma.Web.FederatorTest do          |> Poison.decode!()        assert {:ok, job} = Federator.incoming_ap_doc(params) -      assert :error = ObanHelpers.perform(job) +      assert {:error, _} = ObanHelpers.perform(job)      end    end  end diff --git a/test/web/mastodon_api/controllers/account_controller_test.exs b/test/web/mastodon_api/controllers/account_controller_test.exs index 61c2697b2..8c428efee 100644 --- a/test/web/mastodon_api/controllers/account_controller_test.exs +++ b/test/web/mastodon_api/controllers/account_controller_test.exs @@ -681,17 +681,17 @@ defmodule Pleroma.Web.MastodonAPI.AccountControllerTest do      test "following / unfollowing errors", %{user: user, conn: conn} do        # self follow        conn_res = post(conn, "/api/v1/accounts/#{user.id}/follow") -      assert %{"error" => "Record not found"} = json_response(conn_res, 404) +      assert %{"error" => "Can not follow yourself"} = json_response(conn_res, 400)        # self unfollow        user = User.get_cached_by_id(user.id)        conn_res = post(conn, "/api/v1/accounts/#{user.id}/unfollow") -      assert %{"error" => "Record not found"} = json_response(conn_res, 404) +      assert %{"error" => "Can not unfollow yourself"} = json_response(conn_res, 400)        # self follow via uri        user = User.get_cached_by_id(user.id)        conn_res = post(conn, "/api/v1/follows", %{"uri" => user.nickname}) -      assert %{"error" => "Record not found"} = json_response(conn_res, 404) +      assert %{"error" => "Can not follow yourself"} = json_response(conn_res, 400)        # follow non existing user        conn_res = post(conn, "/api/v1/accounts/doesntexist/follow") diff --git a/test/web/mastodon_api/controllers/status_controller_test.exs b/test/web/mastodon_api/controllers/status_controller_test.exs index 162f7b1b2..85068edd0 100644 --- a/test/web/mastodon_api/controllers/status_controller_test.exs +++ b/test/web/mastodon_api/controllers/status_controller_test.exs @@ -302,6 +302,17 @@ defmodule Pleroma.Web.MastodonAPI.StatusControllerTest do        assert [] == Repo.all(Activity)      end +    test "ignores nil values", %{conn: conn} do +      conn = +        post(conn, "/api/v1/statuses", %{ +          "status" => "not scheduled", +          "scheduled_at" => nil +        }) + +      assert result = json_response(conn, 200) +      assert Activity.get_by_id(result["id"]) +    end +      test "creates a scheduled activity with a media attachment", %{user: user, conn: conn} do        scheduled_at = NaiveDateTime.add(NaiveDateTime.utc_now(), :timer.minutes(120), :millisecond) diff --git a/test/web/mastodon_api/views/poll_view_test.exs b/test/web/mastodon_api/views/poll_view_test.exs index 6211fa888..63b204387 100644 --- a/test/web/mastodon_api/views/poll_view_test.exs +++ b/test/web/mastodon_api/views/poll_view_test.exs @@ -43,7 +43,8 @@ defmodule Pleroma.Web.MastodonAPI.PollViewTest do          %{title: "why are you even asking?", votes_count: 0}        ],        voted: false, -      votes_count: 0 +      votes_count: 0, +      voters_count: nil      }      result = PollView.render("show.json", %{object: object}) @@ -69,9 +70,20 @@ defmodule Pleroma.Web.MastodonAPI.PollViewTest do          }        }) +    voter = insert(:user) +      object = Object.normalize(activity) -    assert %{multiple: true} = PollView.render("show.json", %{object: object}) +    {:ok, _votes, object} = CommonAPI.vote(voter, object, [0, 1]) + +    assert match?( +             %{ +               multiple: true, +               voters_count: 1, +               votes_count: 2 +             }, +             PollView.render("show.json", %{object: object}) +           )    end    test "detects emoji" do diff --git a/test/web/push/impl_test.exs b/test/web/push/impl_test.exs index 9121d90e7..b2664bf28 100644 --- a/test/web/push/impl_test.exs +++ b/test/web/push/impl_test.exs @@ -63,12 +63,12 @@ defmodule Pleroma.Web.Push.ImplTest do          activity: activity        ) -    assert Impl.perform(notif) == [:ok, :ok] +    assert Impl.perform(notif) == {:ok, [:ok, :ok]}    end    @tag capture_log: true    test "returns error if notif does not match " do -    assert Impl.perform(%{}) == :error +    assert Impl.perform(%{}) == {:error, :unknown_type}    end    test "successful message sending" do diff --git a/test/web/streamer/streamer_test.exs b/test/web/streamer/streamer_test.exs index eb082b79f..8b8d8af6c 100644 --- a/test/web/streamer/streamer_test.exs +++ b/test/web/streamer/streamer_test.exs @@ -28,6 +28,42 @@ defmodule Pleroma.Web.StreamerTest do        {:ok, %{user: user, notify: notify}}      end +    test "it streams the user's post in the 'user' stream", %{user: user} do +      task = +        Task.async(fn -> +          assert_receive {:text, _}, @streamer_timeout +        end) + +      Streamer.add_socket( +        "user", +        %{transport_pid: task.pid, assigns: %{user: user}} +      ) + +      {:ok, activity} = CommonAPI.post(user, %{"status" => "hey"}) + +      Streamer.stream("user", activity) +      Task.await(task) +    end + +    test "it streams boosts of the user in the 'user' stream", %{user: user} do +      task = +        Task.async(fn -> +          assert_receive {:text, _}, @streamer_timeout +        end) + +      Streamer.add_socket( +        "user", +        %{transport_pid: task.pid, assigns: %{user: user}} +      ) + +      other_user = insert(:user) +      {:ok, activity} = CommonAPI.post(other_user, %{"status" => "hey"}) +      {:ok, announce, _} = CommonAPI.repeat(activity.id, user) + +      Streamer.stream("user", announce) +      Task.await(task) +    end +      test "it sends notify to in the 'user' stream", %{user: user, notify: notify} do        task =          Task.async(fn -> diff --git a/test/web/twitter_api/util_controller_test.exs b/test/web/twitter_api/util_controller_test.exs index 30e54bebd..b701239a0 100644 --- a/test/web/twitter_api/util_controller_test.exs +++ b/test/web/twitter_api/util_controller_test.exs @@ -95,6 +95,30 @@ defmodule Pleroma.Web.TwitterAPI.UtilControllerTest do          end        end      end + +    test "it imports follows with different nickname variations", %{conn: conn} do +      [user2, user3, user4, user5, user6] = insert_list(5, :user) + +      identifiers = +        [ +          user2.ap_id, +          user3.nickname, +          "  ", +          "@" <> user4.nickname, +          user5.nickname <> "@localhost", +          "@" <> user6.nickname <> "@localhost" +        ] +        |> Enum.join("\n") + +      response = +        conn +        |> post("/api/pleroma/follow_import", %{"list" => identifiers}) +        |> json_response(:ok) + +      assert response == "job started" +      assert [{:ok, job_result}] = ObanHelpers.perform_all() +      assert job_result == [user2, user3, user4, user5, user6] +    end    end    describe "POST /api/pleroma/blocks_import" do @@ -136,6 +160,29 @@ defmodule Pleroma.Web.TwitterAPI.UtilControllerTest do                 )        end      end + +    test "it imports blocks with different nickname variations", %{conn: conn} do +      [user2, user3, user4, user5, user6] = insert_list(5, :user) + +      identifiers = +        [ +          user2.ap_id, +          user3.nickname, +          "@" <> user4.nickname, +          user5.nickname <> "@localhost", +          "@" <> user6.nickname <> "@localhost" +        ] +        |> Enum.join(" ") + +      response = +        conn +        |> post("/api/pleroma/blocks_import", %{"list" => identifiers}) +        |> json_response(:ok) + +      assert response == "job started" +      assert [{:ok, job_result}] = ObanHelpers.perform_all() +      assert job_result == [user2, user3, user4, user5, user6] +    end    end    describe "PUT /api/pleroma/notification_settings" do  | 
