diff options
Diffstat (limited to 'test')
| -rw-r--r-- | test/support/conn_case.ex | 1 | ||||
| -rw-r--r-- | test/support/data_case.ex | 1 | ||||
| -rw-r--r-- | test/web/activity_pub/activity_pub_test.exs | 73 | ||||
| -rw-r--r-- | test/web/federator_test.exs | 37 | ||||
| -rw-r--r-- | test/web/instances/instances_test.exs | 23 | ||||
| -rw-r--r-- | test/web/mastodon_api/mastodon_api_controller_test.exs | 5 | ||||
| -rw-r--r-- | test/web/ostatus/ostatus_test.exs | 2 | ||||
| -rw-r--r-- | test/web/twitter_api/twitter_api_test.exs | 15 | 
8 files changed, 145 insertions, 12 deletions
diff --git a/test/support/conn_case.ex b/test/support/conn_case.ex index c201d9a9b..ec5892ff5 100644 --- a/test/support/conn_case.ex +++ b/test/support/conn_case.ex @@ -33,6 +33,7 @@ defmodule Pleroma.Web.ConnCase do    setup tags do      Cachex.clear(:user_cache) +    Cachex.clear(:object_cache)      :ok = Ecto.Adapters.SQL.Sandbox.checkout(Pleroma.Repo)      unless tags[:async] do diff --git a/test/support/data_case.ex b/test/support/data_case.ex index 56d5896ad..df260bd3f 100644 --- a/test/support/data_case.ex +++ b/test/support/data_case.ex @@ -32,6 +32,7 @@ defmodule Pleroma.DataCase do    setup tags do      Cachex.clear(:user_cache) +    Cachex.clear(:object_cache)      :ok = Ecto.Adapters.SQL.Sandbox.checkout(Pleroma.Repo)      unless tags[:async] do diff --git a/test/web/activity_pub/activity_pub_test.exs b/test/web/activity_pub/activity_pub_test.exs index 2ada4f2e5..a55961ac4 100644 --- a/test/web/activity_pub/activity_pub_test.exs +++ b/test/web/activity_pub/activity_pub_test.exs @@ -698,7 +698,57 @@ defmodule Pleroma.Web.ActivityPub.ActivityPubTest do    end    describe "publish_one/1" do -    test_with_mock "it calls `Instances.set_unreachable` on target inbox on non-2xx HTTP response code", +    test_with_mock "calls `Instances.set_reachable` on successful federation if `unreachable_since` is not specified", +                   Instances, +                   [:passthrough], +                   [] do +      actor = insert(:user) +      inbox = "http://200.site/users/nick1/inbox" + +      assert {:ok, _} = ActivityPub.publish_one(%{inbox: inbox, json: "{}", actor: actor, id: 1}) + +      assert called(Instances.set_reachable(inbox)) +    end + +    test_with_mock "calls `Instances.set_reachable` on successful federation if `unreachable_since` is set", +                   Instances, +                   [:passthrough], +                   [] do +      actor = insert(:user) +      inbox = "http://200.site/users/nick1/inbox" + +      assert {:ok, _} = +               ActivityPub.publish_one(%{ +                 inbox: inbox, +                 json: "{}", +                 actor: actor, +                 id: 1, +                 unreachable_since: NaiveDateTime.utc_now() +               }) + +      assert called(Instances.set_reachable(inbox)) +    end + +    test_with_mock "does NOT call `Instances.set_reachable` on successful federation if `unreachable_since` is nil", +                   Instances, +                   [:passthrough], +                   [] do +      actor = insert(:user) +      inbox = "http://200.site/users/nick1/inbox" + +      assert {:ok, _} = +               ActivityPub.publish_one(%{ +                 inbox: inbox, +                 json: "{}", +                 actor: actor, +                 id: 1, +                 unreachable_since: nil +               }) + +      refute called(Instances.set_reachable(inbox)) +    end + +    test_with_mock "calls `Instances.set_unreachable` on target inbox on non-2xx HTTP response code",                     Instances,                     [:passthrough],                     [] do @@ -724,7 +774,7 @@ defmodule Pleroma.Web.ActivityPub.ActivityPubTest do        assert called(Instances.set_unreachable(inbox))      end -    test_with_mock "it does NOT call `Instances.set_unreachable` if target is reachable", +    test_with_mock "does NOT call `Instances.set_unreachable` if target is reachable",                     Instances,                     [:passthrough],                     [] do @@ -735,6 +785,25 @@ defmodule Pleroma.Web.ActivityPub.ActivityPubTest do        refute called(Instances.set_unreachable(inbox))      end + +    test_with_mock "does NOT call `Instances.set_unreachable` if target instance has non-nil `unreachable_since`", +                   Instances, +                   [:passthrough], +                   [] do +      actor = insert(:user) +      inbox = "http://connrefused.site/users/nick1/inbox" + +      assert {:error, _} = +               ActivityPub.publish_one(%{ +                 inbox: inbox, +                 json: "{}", +                 actor: actor, +                 id: 1, +                 unreachable_since: NaiveDateTime.utc_now() +               }) + +      refute called(Instances.set_unreachable(inbox)) +    end    end    def data_uri do diff --git a/test/web/federator_test.exs b/test/web/federator_test.exs index c6d10ef78..05f813291 100644 --- a/test/web/federator_test.exs +++ b/test/web/federator_test.exs @@ -95,15 +95,18 @@ defmodule Pleroma.Web.FederatorTest do          info: %{ap_enabled: true, source_data: %{"inbox" => inbox2}}        }) -      Instances.set_unreachable( -        URI.parse(inbox2).host, -        Instances.reachability_datetime_threshold() -      ) +      dt = NaiveDateTime.utc_now() +      Instances.set_unreachable(inbox1, dt) + +      Instances.set_consistently_unreachable(URI.parse(inbox2).host)        {:ok, _activity} =          CommonAPI.post(user, %{"status" => "HI @nick1@domain.com, @nick2@domain2.com!"}) -      assert called(Federator.enqueue(:publish_single_ap, %{inbox: inbox1})) +      assert called( +               Federator.enqueue(:publish_single_ap, %{inbox: inbox1, unreachable_since: dt}) +             ) +        refute called(Federator.enqueue(:publish_single_ap, %{inbox: inbox2}))      end @@ -128,11 +131,20 @@ defmodule Pleroma.Web.FederatorTest do            callback: "https://pleroma2.soykaf.com/cb"          }) +      dt = NaiveDateTime.utc_now() +      Instances.set_unreachable(sub2.callback, dt) +        Instances.set_consistently_unreachable(sub1.callback)        {:ok, _activity} = CommonAPI.post(user, %{"status" => "HI"}) -      assert called(Federator.enqueue(:publish_single_websub, %{callback: sub2.callback})) +      assert called( +               Federator.enqueue(:publish_single_websub, %{ +                 callback: sub2.callback, +                 unreachable_since: dt +               }) +             ) +        refute called(Federator.enqueue(:publish_single_websub, %{callback: sub1.callback}))      end @@ -158,13 +170,22 @@ defmodule Pleroma.Web.FederatorTest do            info: %{salmon: "https://domain2.com/salmon"}          }) +      dt = NaiveDateTime.utc_now() +      Instances.set_unreachable(remote_user2.ap_id, dt) +        Instances.set_consistently_unreachable("domain.com")        {:ok, _activity} =          CommonAPI.post(user, %{"status" => "HI @nick1@domain.com, @nick2@domain2.com!"}) -      assert called(Federator.enqueue(:publish_single_salmon, {remote_user2, :_, :_})) -      refute called(Federator.enqueue(:publish_single_websub, {remote_user1, :_, :_})) +      assert called( +               Federator.enqueue(:publish_single_salmon, %{ +                 recipient: remote_user2, +                 unreachable_since: dt +               }) +             ) + +      refute called(Federator.enqueue(:publish_single_websub, %{recipient: remote_user1}))      end    end diff --git a/test/web/instances/instances_test.exs b/test/web/instances/instances_test.exs index adb8560a7..2530c09fe 100644 --- a/test/web/instances/instances_test.exs +++ b/test/web/instances/instances_test.exs @@ -47,7 +47,7 @@ defmodule Pleroma.InstancesTest do    end    describe "filter_reachable/1" do -    test "keeps only reachable elements of supplied list" do +    setup do        host = "consistently-unreachable.name"        url1 = "http://eventually-unreachable.com/path"        url2 = "http://domain.com/path" @@ -55,7 +55,26 @@ defmodule Pleroma.InstancesTest do        Instances.set_consistently_unreachable(host)        Instances.set_unreachable(url1) -      assert [url1, url2] == Instances.filter_reachable([host, url1, url2]) +      result = Instances.filter_reachable([host, url1, url2, nil]) +      %{result: result, url1: url1, url2: url2} +    end + +    test "returns a map with keys containing 'not marked consistently unreachable' elements of supplied list", +         %{result: result, url1: url1, url2: url2} do +      assert is_map(result) +      assert Enum.sort([url1, url2]) == result |> Map.keys() |> Enum.sort() +    end + +    test "returns a map with `unreachable_since` values for keys", +         %{result: result, url1: url1, url2: url2} do +      assert is_map(result) +      assert %NaiveDateTime{} = result[url1] +      assert is_nil(result[url2]) +    end + +    test "returns an empty map for empty list or list containing no hosts / url" do +      assert %{} == Instances.filter_reachable([]) +      assert %{} == Instances.filter_reachable([nil])      end    end diff --git a/test/web/mastodon_api/mastodon_api_controller_test.exs b/test/web/mastodon_api/mastodon_api_controller_test.exs index 141d300c7..8528d4f64 100644 --- a/test/web/mastodon_api/mastodon_api_controller_test.exs +++ b/test/web/mastodon_api/mastodon_api_controller_test.exs @@ -137,6 +137,7 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIControllerTest do    end    test "posting a status with OGP link preview", %{conn: conn} do +    Pleroma.Config.put([:rich_media, :enabled], true)      user = insert(:user)      conn = @@ -148,6 +149,7 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIControllerTest do      assert %{"id" => id, "card" => %{"title" => "The Rock"}} = json_response(conn, 200)      assert Repo.get(Activity, id) +    Pleroma.Config.put([:rich_media, :enabled], false)    end    test "posting a direct status", %{conn: conn} do @@ -1667,6 +1669,7 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIControllerTest do      end      test "Status rich-media Card", %{conn: conn, user: user} do +      Pleroma.Config.put([:rich_media, :enabled], true)        {:ok, activity} = CommonAPI.post(user, %{"status" => "http://example.com/ogp"})        response = @@ -1691,6 +1694,8 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIControllerTest do                   }                 }               } + +      Pleroma.Config.put([:rich_media, :enabled], false)      end    end diff --git a/test/web/ostatus/ostatus_test.exs b/test/web/ostatus/ostatus_test.exs index 0c63dd84d..dbe5de2e2 100644 --- a/test/web/ostatus/ostatus_test.exs +++ b/test/web/ostatus/ostatus_test.exs @@ -530,6 +530,8 @@ defmodule Pleroma.Web.OStatusTest do          note_object.data          |> Map.put("type", "Article") +      Cachex.clear(:object_cache) +        cs = Object.change(note_object, %{data: note_data})        {:ok, _article_object} = Repo.update(cs) diff --git a/test/web/twitter_api/twitter_api_test.exs b/test/web/twitter_api/twitter_api_test.exs index f94e2b873..48ddbcf50 100644 --- a/test/web/twitter_api/twitter_api_test.exs +++ b/test/web/twitter_api/twitter_api_test.exs @@ -200,12 +200,27 @@ defmodule Pleroma.Web.TwitterAPI.TwitterAPITest do    test "it favorites a status, returns the updated activity" do      user = insert(:user) +    other_user = insert(:user)      note_activity = insert(:note_activity)      {:ok, status} = TwitterAPI.fav(user, note_activity.id)      updated_activity = Activity.get_by_ap_id(note_activity.data["id"]) +    assert ActivityView.render("activity.json", %{activity: updated_activity})["fave_num"] == 1 + +    object = Object.normalize(note_activity.data["object"]) + +    assert object.data["like_count"] == 1      assert status == updated_activity + +    {:ok, _status} = TwitterAPI.fav(other_user, note_activity.id) + +    object = Object.normalize(note_activity.data["object"]) + +    assert object.data["like_count"] == 2 + +    updated_activity = Activity.get_by_ap_id(note_activity.data["id"]) +    assert ActivityView.render("activity.json", %{activity: updated_activity})["fave_num"] == 2    end    test "it unfavorites a status, returns the updated activity" do  | 
