diff options
Diffstat (limited to 'test')
| -rw-r--r-- | test/notification_test.exs | 4 | ||||
| -rw-r--r-- | test/object_test.exs | 40 | ||||
| -rw-r--r-- | test/repo_test.exs | 43 | ||||
| -rw-r--r-- | test/web/activity_pub/activity_pub_test.exs | 20 | ||||
| -rw-r--r-- | test/web/activity_pub/transmogrifier/follow_handling_test.exs | 2 | ||||
| -rw-r--r-- | test/web/admin_api/admin_api_controller_test.exs | 26 | ||||
| -rw-r--r-- | test/web/common_api/common_api_test.exs | 12 | ||||
| -rw-r--r-- | test/web/common_api/common_api_utils_test.exs | 8 | ||||
| -rw-r--r-- | test/web/mastodon_api/controllers/search_controller_test.exs | 50 | ||||
| -rw-r--r-- | test/web/mastodon_api/controllers/status_controller_test.exs | 7 | ||||
| -rw-r--r-- | test/web/mastodon_api/views/status_view_test.exs | 18 | ||||
| -rw-r--r-- | test/web/pleroma_api/controllers/pleroma_api_controller_test.exs | 9 | ||||
| -rw-r--r-- | test/web/twitter_api/password_controller_test.exs | 2 | 
13 files changed, 202 insertions, 39 deletions
diff --git a/test/notification_test.exs b/test/notification_test.exs index f5f23bb5a..9a1c2f2b5 100644 --- a/test/notification_test.exs +++ b/test/notification_test.exs @@ -745,7 +745,7 @@ defmodule Pleroma.NotificationTest do        {:ok, _activity} = CommonAPI.post(blocked, %{"status" => "hey @#{user.nickname}"}) -      assert length(Notification.for_user(user, %{with_muted: true})) == 0 +      assert Enum.empty?(Notification.for_user(user, %{with_muted: true}))      end      test "it doesn't return notifications from a domain-blocked user when with_muted is set" do @@ -755,7 +755,7 @@ defmodule Pleroma.NotificationTest do        {:ok, _activity} = CommonAPI.post(blocked, %{"status" => "hey @#{user.nickname}"}) -      assert length(Notification.for_user(user, %{with_muted: true})) == 0 +      assert Enum.empty?(Notification.for_user(user, %{with_muted: true}))      end      test "it returns notifications from muted threads when with_muted is set" do diff --git a/test/object_test.exs b/test/object_test.exs index b002c2bae..9b4e6f0bf 100644 --- a/test/object_test.exs +++ b/test/object_test.exs @@ -4,12 +4,14 @@  defmodule Pleroma.ObjectTest do    use Pleroma.DataCase +  use Oban.Testing, repo: Pleroma.Repo    import ExUnit.CaptureLog    import Pleroma.Factory    import Tesla.Mock    alias Pleroma.Activity    alias Pleroma.Object    alias Pleroma.Repo +  alias Pleroma.Tests.ObanHelpers    alias Pleroma.Web.CommonAPI    setup do @@ -99,6 +101,8 @@ defmodule Pleroma.ObjectTest do        Object.delete(note) +      ObanHelpers.perform(all_enqueued(worker: Pleroma.Workers.AttachmentsCleanupWorker)) +        assert Object.get_by_id(attachment.id) == nil        assert {:ok, []} == File.ls("#{uploads_dir}/#{path}") @@ -133,10 +137,46 @@ defmodule Pleroma.ObjectTest do        Object.delete(note) +      ObanHelpers.perform(all_enqueued(worker: Pleroma.Workers.AttachmentsCleanupWorker)) +        assert Object.get_by_id(attachment.id) == nil        assert {:ok, files} = File.ls(uploads_dir)        refute filename in files      end + +    test "with objects that have legacy data.url attribute" do +      Pleroma.Config.put([Pleroma.Upload, :uploader], Pleroma.Uploaders.Local) + +      file = %Plug.Upload{ +        content_type: "image/jpg", +        path: Path.absname("test/fixtures/image.jpg"), +        filename: "an_image.jpg" +      } + +      user = insert(:user) + +      {:ok, %Object{} = attachment} = +        Pleroma.Web.ActivityPub.ActivityPub.upload(file, actor: user.ap_id) + +      {:ok, %Object{}} = Object.create(%{url: "https://google.com", actor: user.ap_id}) + +      %{data: %{"attachment" => [%{"url" => [%{"href" => href}]}]}} = +        note = insert(:note, %{user: user, data: %{"attachment" => [attachment.data]}}) + +      uploads_dir = Pleroma.Config.get!([Pleroma.Uploaders.Local, :uploads]) + +      path = href |> Path.dirname() |> Path.basename() + +      assert {:ok, ["an_image.jpg"]} == File.ls("#{uploads_dir}/#{path}") + +      Object.delete(note) + +      ObanHelpers.perform(all_enqueued(worker: Pleroma.Workers.AttachmentsCleanupWorker)) + +      assert Object.get_by_id(attachment.id) == nil + +      assert {:ok, []} == File.ls("#{uploads_dir}/#{path}") +    end    end    describe "normalizer" do diff --git a/test/repo_test.exs b/test/repo_test.exs index 85b64d4d1..5526b0327 100644 --- a/test/repo_test.exs +++ b/test/repo_test.exs @@ -4,7 +4,10 @@  defmodule Pleroma.RepoTest do    use Pleroma.DataCase +  import ExUnit.CaptureLog    import Pleroma.Factory +  import Mock +    alias Pleroma.User    describe "find_resource/1" do @@ -46,4 +49,44 @@ defmodule Pleroma.RepoTest do        assert Repo.get_assoc(token, :user) == {:error, :not_found}      end    end + +  describe "check_migrations_applied!" do +    setup_with_mocks([ +      {Ecto.Migrator, [], +       [ +         with_repo: fn repo, fun -> passthrough([repo, fun]) end, +         migrations: fn Pleroma.Repo -> +           [ +             {:up, 20_191_128_153_944, "fix_missing_following_count"}, +             {:up, 20_191_203_043_610, "create_report_notes"}, +             {:down, 20_191_220_174_645, "add_scopes_to_pleroma_feo_auth_records"} +           ] +         end +       ]} +    ]) do +      :ok +    end + +    test "raises if it detects unapplied migrations" do +      assert_raise Pleroma.Repo.UnappliedMigrationsError, fn -> +        capture_log(&Repo.check_migrations_applied!/0) +      end +    end + +    test "doesn't do anything if disabled" do +      disable_migration_check = +        Pleroma.Config.get([:i_am_aware_this_may_cause_data_loss, :disable_migration_check]) + +      Pleroma.Config.put([:i_am_aware_this_may_cause_data_loss, :disable_migration_check], true) + +      on_exit(fn -> +        Pleroma.Config.put( +          [:i_am_aware_this_may_cause_data_loss, :disable_migration_check], +          disable_migration_check +        ) +      end) + +      assert :ok == Repo.check_migrations_applied!() +    end +  end  end diff --git a/test/web/activity_pub/activity_pub_test.exs b/test/web/activity_pub/activity_pub_test.exs index ad6b9810c..ff4604a52 100644 --- a/test/web/activity_pub/activity_pub_test.exs +++ b/test/web/activity_pub/activity_pub_test.exs @@ -867,6 +867,8 @@ defmodule Pleroma.Web.ActivityPub.ActivityPubTest do      test "adds an emoji reaction activity to the db" do        user = insert(:user)        reactor = insert(:user) +      third_user = insert(:user) +      fourth_user = insert(:user)        {:ok, activity} = CommonAPI.post(user, %{"status" => "YASSSS queen slay"})        assert object = Object.normalize(activity) @@ -881,7 +883,21 @@ defmodule Pleroma.Web.ActivityPub.ActivityPubTest do        assert reaction_activity.data["to"] == [User.ap_followers(reactor), activity.data["actor"]]        assert reaction_activity.data["context"] == object.data["context"]        assert object.data["reaction_count"] == 1 -      assert object.data["reactions"]["🔥"] == [reactor.ap_id] +      assert object.data["reactions"] == [["🔥", [reactor.ap_id]]] + +      {:ok, _reaction_activity, object} = ActivityPub.react_with_emoji(third_user, object, "☕") + +      assert object.data["reaction_count"] == 2 +      assert object.data["reactions"] == [["🔥", [reactor.ap_id]], ["☕", [third_user.ap_id]]] + +      {:ok, _reaction_activity, object} = ActivityPub.react_with_emoji(fourth_user, object, "🔥") + +      assert object.data["reaction_count"] == 3 + +      assert object.data["reactions"] == [ +               ["🔥", [fourth_user.ap_id, reactor.ap_id]], +               ["☕", [third_user.ap_id]] +             ]      end    end @@ -919,7 +935,7 @@ defmodule Pleroma.Web.ActivityPub.ActivityPubTest do        object = Object.get_by_ap_id(object.data["id"])        assert object.data["reaction_count"] == 0 -      assert object.data["reactions"] == %{} +      assert object.data["reactions"] == []      end    end diff --git a/test/web/activity_pub/transmogrifier/follow_handling_test.exs b/test/web/activity_pub/transmogrifier/follow_handling_test.exs index 7d6d0814d..1c88b05c2 100644 --- a/test/web/activity_pub/transmogrifier/follow_handling_test.exs +++ b/test/web/activity_pub/transmogrifier/follow_handling_test.exs @@ -78,7 +78,7 @@ defmodule Pleroma.Web.ActivityPub.Transmogrifier.FollowHandlingTest do          )          |> Repo.all() -      assert length(accepts) == 0 +      assert Enum.empty?(accepts)      end      test "it works for follow requests when you are already followed, creating a new accept activity" do diff --git a/test/web/admin_api/admin_api_controller_test.exs b/test/web/admin_api/admin_api_controller_test.exs index a3fbb6041..c8f8ba310 100644 --- a/test/web/admin_api/admin_api_controller_test.exs +++ b/test/web/admin_api/admin_api_controller_test.exs @@ -1363,6 +1363,30 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do        }      end +    test "requires admin:write:reports scope", %{conn: conn, id: id, admin: admin} do +      read_token = insert(:oauth_token, user: admin, scopes: ["admin:read"]) +      write_token = insert(:oauth_token, user: admin, scopes: ["admin:write:reports"]) + +      response = +        conn +        |> assign(:token, read_token) +        |> patch("/api/pleroma/admin/reports", %{ +          "reports" => [%{"state" => "resolved", "id" => id}] +        }) +        |> json_response(403) + +      assert response == %{ +               "error" => "Insufficient permissions: admin:write:reports." +             } + +      conn +      |> assign(:token, write_token) +      |> patch("/api/pleroma/admin/reports", %{ +        "reports" => [%{"state" => "resolved", "id" => id}] +      }) +      |> json_response(:no_content) +    end +      test "mark report as resolved", %{conn: conn, id: id, admin: admin} do        conn        |> patch("/api/pleroma/admin/reports", %{ @@ -2840,7 +2864,7 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do        response = json_response(ret_conn, 200) -      assert length(response) == 0 +      assert Enum.empty?(response)      end    end diff --git a/test/web/common_api/common_api_test.exs b/test/web/common_api/common_api_test.exs index b5d6d4055..f8963e42e 100644 --- a/test/web/common_api/common_api_test.exs +++ b/test/web/common_api/common_api_test.exs @@ -284,22 +284,22 @@ defmodule Pleroma.Web.CommonAPITest do        {:ok, %Activity{}, _} = CommonAPI.favorite(activity.id, user)      end -    test "retweeting a status twice returns an error" do +    test "retweeting a status twice returns the status" do        user = insert(:user)        other_user = insert(:user)        {:ok, activity} = CommonAPI.post(other_user, %{"status" => "cofe"}) -      {:ok, %Activity{}, _object} = CommonAPI.repeat(activity.id, user) -      {:error, _} = CommonAPI.repeat(activity.id, user) +      {:ok, %Activity{} = activity, object} = CommonAPI.repeat(activity.id, user) +      {:ok, ^activity, ^object} = CommonAPI.repeat(activity.id, user)      end -    test "favoriting a status twice returns an error" do +    test "favoriting a status twice returns the status" do        user = insert(:user)        other_user = insert(:user)        {:ok, activity} = CommonAPI.post(other_user, %{"status" => "cofe"}) -      {:ok, %Activity{}, _object} = CommonAPI.favorite(activity.id, user) -      {:error, _} = CommonAPI.favorite(activity.id, user) +      {:ok, %Activity{} = activity, object} = CommonAPI.favorite(activity.id, user) +      {:ok, ^activity, ^object} = CommonAPI.favorite(activity.id, user)      end    end diff --git a/test/web/common_api/common_api_utils_test.exs b/test/web/common_api/common_api_utils_test.exs index 2588898d0..4b761e039 100644 --- a/test/web/common_api/common_api_utils_test.exs +++ b/test/web/common_api/common_api_utils_test.exs @@ -307,7 +307,7 @@ defmodule Pleroma.Web.CommonAPI.UtilsTest do        {to, cc} = Utils.get_to_and_cc(user, mentions, nil, "private", nil)        assert length(to) == 2 -      assert length(cc) == 0 +      assert Enum.empty?(cc)        assert mentioned_user.ap_id in to        assert user.follower_address in to @@ -323,7 +323,7 @@ defmodule Pleroma.Web.CommonAPI.UtilsTest do        {to, cc} = Utils.get_to_and_cc(user, mentions, activity, "private", nil)        assert length(to) == 3 -      assert length(cc) == 0 +      assert Enum.empty?(cc)        assert mentioned_user.ap_id in to        assert third_user.ap_id in to @@ -338,7 +338,7 @@ defmodule Pleroma.Web.CommonAPI.UtilsTest do        {to, cc} = Utils.get_to_and_cc(user, mentions, nil, "direct", nil)        assert length(to) == 1 -      assert length(cc) == 0 +      assert Enum.empty?(cc)        assert mentioned_user.ap_id in to      end @@ -353,7 +353,7 @@ defmodule Pleroma.Web.CommonAPI.UtilsTest do        {to, cc} = Utils.get_to_and_cc(user, mentions, activity, "direct", nil)        assert length(to) == 2 -      assert length(cc) == 0 +      assert Enum.empty?(cc)        assert mentioned_user.ap_id in to        assert third_user.ap_id in to diff --git a/test/web/mastodon_api/controllers/search_controller_test.exs b/test/web/mastodon_api/controllers/search_controller_test.exs index 7fedf42e5..effae130c 100644 --- a/test/web/mastodon_api/controllers/search_controller_test.exs +++ b/test/web/mastodon_api/controllers/search_controller_test.exs @@ -53,7 +53,8 @@ defmodule Pleroma.Web.MastodonAPI.SearchControllerTest do        {:ok, _} = CommonAPI.post(user_two, %{"status" => "This isn't"})        results = -        get(conn, "/api/v2/search", %{"q" => "2hu #private"}) +        conn +        |> get("/api/v2/search", %{"q" => "2hu #private"})          |> json_response(200)        [account | _] = results["accounts"] @@ -73,6 +74,30 @@ defmodule Pleroma.Web.MastodonAPI.SearchControllerTest do        [status] = results["statuses"]        assert status["id"] == to_string(activity.id)      end + +    test "excludes a blocked users from search results", %{conn: conn} do +      user = insert(:user) +      user_smith = insert(:user, %{nickname: "Agent", name: "I love 2hu"}) +      user_neo = insert(:user, %{nickname: "Agent Neo", name: "Agent"}) + +      {:ok, act1} = CommonAPI.post(user, %{"status" => "This is about 2hu private 天子"}) +      {:ok, act2} = CommonAPI.post(user_smith, %{"status" => "Agent Smith"}) +      {:ok, act3} = CommonAPI.post(user_neo, %{"status" => "Agent Smith"}) +      Pleroma.User.block(user, user_smith) + +      results = +        conn +        |> assign(:user, user) +        |> assign(:token, insert(:oauth_token, user: user, scopes: ["read"])) +        |> get("/api/v2/search", %{"q" => "Agent"}) +        |> json_response(200) + +      status_ids = Enum.map(results["statuses"], fn g -> g["id"] end) + +      assert act3.id in status_ids +      refute act2.id in status_ids +      refute act1.id in status_ids +    end    end    describe ".account_search" do @@ -146,11 +171,10 @@ defmodule Pleroma.Web.MastodonAPI.SearchControllerTest do        {:ok, _} = CommonAPI.post(user_two, %{"status" => "This isn't"}) -      conn = +      results =          conn          |> get("/api/v1/search", %{"q" => "2hu"}) - -      assert results = json_response(conn, 200) +        |> json_response(200)        [account | _] = results["accounts"]        assert account["id"] == to_string(user_three.id) @@ -168,11 +192,10 @@ defmodule Pleroma.Web.MastodonAPI.SearchControllerTest do              "status" => "check out https://shitposter.club/notice/2827873"            }) -        conn = +        results =            conn            |> get("/api/v1/search", %{"q" => "https://shitposter.club/notice/2827873"}) - -        assert results = json_response(conn, 200) +          |> json_response(200)          [status, %{"id" => ^activity_id}] = results["statuses"] @@ -189,11 +212,10 @@ defmodule Pleroma.Web.MastodonAPI.SearchControllerTest do          })        capture_log(fn -> -        conn = +        results =            conn            |> get("/api/v1/search", %{"q" => Object.normalize(activity).data["id"]}) - -        assert results = json_response(conn, 200) +          |> json_response(200)          [] = results["statuses"]        end) @@ -202,23 +224,23 @@ defmodule Pleroma.Web.MastodonAPI.SearchControllerTest do      test "search fetches remote accounts", %{conn: conn} do        user = insert(:user) -      conn = +      results =          conn          |> assign(:user, user)          |> assign(:token, insert(:oauth_token, user: user, scopes: ["read"]))          |> get("/api/v1/search", %{"q" => "mike@osada.macgirvin.com", "resolve" => "true"}) +        |> json_response(200) -      assert results = json_response(conn, 200)        [account] = results["accounts"]        assert account["acct"] == "mike@osada.macgirvin.com"      end      test "search doesn't fetch remote accounts if resolve is false", %{conn: conn} do -      conn = +      results =          conn          |> get("/api/v1/search", %{"q" => "mike@osada.macgirvin.com", "resolve" => "false"}) +        |> json_response(200) -      assert results = json_response(conn, 200)        assert [] == results["accounts"]      end diff --git a/test/web/mastodon_api/controllers/status_controller_test.exs b/test/web/mastodon_api/controllers/status_controller_test.exs index 307221c5d..b03b4b344 100644 --- a/test/web/mastodon_api/controllers/status_controller_test.exs +++ b/test/web/mastodon_api/controllers/status_controller_test.exs @@ -638,6 +638,13 @@ defmodule Pleroma.Web.MastodonAPI.StatusControllerTest do        assert to_string(activity.id) == id      end +    test "favoriting twice will just return 200", %{conn: conn} do +      activity = insert(:note_activity) + +      post(conn, "/api/v1/statuses/#{activity.id}/favourite") +      assert post(conn, "/api/v1/statuses/#{activity.id}/favourite") |> json_response(200) +    end +      test "returns 400 error for a wrong id", %{conn: conn} do        conn = post(conn, "/api/v1/statuses/1/favourite") diff --git a/test/web/mastodon_api/views/status_view_test.exs b/test/web/mastodon_api/views/status_view_test.exs index 17b6ebcbc..069bb8eac 100644 --- a/test/web/mastodon_api/views/status_view_test.exs +++ b/test/web/mastodon_api/views/status_view_test.exs @@ -24,6 +24,21 @@ defmodule Pleroma.Web.MastodonAPI.StatusViewTest do      :ok    end +  test "has an emoji reaction list" do +    user = insert(:user) +    other_user = insert(:user) +    third_user = insert(:user) +    {:ok, activity} = CommonAPI.post(user, %{"status" => "dae cofe??"}) + +    {:ok, _, _} = CommonAPI.react_with_emoji(activity.id, user, "☕") +    {:ok, _, _} = CommonAPI.react_with_emoji(activity.id, third_user, "🍵") +    {:ok, _, _} = CommonAPI.react_with_emoji(activity.id, other_user, "☕") +    activity = Repo.get(Activity, activity.id) +    status = StatusView.render("show.json", activity: activity) + +    assert status[:pleroma][:emoji_reactions] == [["☕", 2], ["🍵", 1]] +  end +    test "loads and returns the direct conversation id when given the `with_direct_conversation_id` option" do      user = insert(:user) @@ -172,7 +187,8 @@ defmodule Pleroma.Web.MastodonAPI.StatusViewTest do          spoiler_text: %{"text/plain" => HTML.strip_tags(object_data["summary"])},          expires_at: nil,          direct_conversation_id: nil, -        thread_muted: false +        thread_muted: false, +        emoji_reactions: []        }      } diff --git a/test/web/pleroma_api/controllers/pleroma_api_controller_test.exs b/test/web/pleroma_api/controllers/pleroma_api_controller_test.exs index 3f7ef13bc..a79ecd05b 100644 --- a/test/web/pleroma_api/controllers/pleroma_api_controller_test.exs +++ b/test/web/pleroma_api/controllers/pleroma_api_controller_test.exs @@ -57,17 +57,12 @@ defmodule Pleroma.Web.PleromaAPI.PleromaAPIControllerTest do      {:ok, activity} = CommonAPI.post(user, %{"status" => "#cofe"}) -    conn = -      conn -      |> assign(:user, user) -      |> assign(:token, insert(:oauth_token, user: user, scopes: ["read:statuses"])) -      result =        conn        |> get("/api/v1/pleroma/statuses/#{activity.id}/emoji_reactions_by")        |> json_response(200) -    assert result == %{} +    assert result == []      {:ok, _, _} = CommonAPI.react_with_emoji(activity.id, other_user, "🎅") @@ -76,7 +71,7 @@ defmodule Pleroma.Web.PleromaAPI.PleromaAPIControllerTest do        |> get("/api/v1/pleroma/statuses/#{activity.id}/emoji_reactions_by")        |> json_response(200) -    [represented_user] = result["🎅"] +    [["🎅", [represented_user]]] = result      assert represented_user["id"] == other_user.id    end diff --git a/test/web/twitter_api/password_controller_test.exs b/test/web/twitter_api/password_controller_test.exs index 840c84a05..29ba7d265 100644 --- a/test/web/twitter_api/password_controller_test.exs +++ b/test/web/twitter_api/password_controller_test.exs @@ -55,7 +55,7 @@ defmodule Pleroma.Web.TwitterAPI.PasswordControllerTest do        user = refresh_record(user)        assert Comeonin.Pbkdf2.checkpw("test", user.password_hash) -      assert length(Token.get_user_tokens(user)) == 0 +      assert Enum.empty?(Token.get_user_tokens(user))      end      test "it sets password_reset_pending to false", %{conn: conn} do  | 
