diff options
Diffstat (limited to 'test')
3 files changed, 126 insertions, 1 deletions
| diff --git a/test/web/activity_pub/activity_pub_test.exs b/test/web/activity_pub/activity_pub_test.exs index 2f65dfc8e..8a21c6fca 100644 --- a/test/web/activity_pub/activity_pub_test.exs +++ b/test/web/activity_pub/activity_pub_test.exs @@ -1986,4 +1986,20 @@ defmodule Pleroma.Web.ActivityPub.ActivityPubTest do               end) =~ "Follower/Following counter update for #{user.ap_id} failed"      end    end + +  describe "global activity expiration" do +    setup do: clear_config([:instance, :rewrite_policy]) + +    test "creates an activity expiration for local Create activities" do +      Pleroma.Config.put( +        [:instance, :rewrite_policy], +        Pleroma.Web.ActivityPub.MRF.ActivityExpirationPolicy +      ) + +      {:ok, %{id: id_create}} = ActivityBuilder.insert(%{"type" => "Create", "context" => "3hu"}) +      {:ok, _follow} = ActivityBuilder.insert(%{"type" => "Follow", "context" => "3hu"}) + +      assert [%{activity_id: ^id_create}] = Pleroma.ActivityExpiration |> Repo.all() +    end +  end  end diff --git a/test/web/activity_pub/mrf/activity_expiration_policy_test.exs b/test/web/activity_pub/mrf/activity_expiration_policy_test.exs new file mode 100644 index 000000000..8babf49e7 --- /dev/null +++ b/test/web/activity_pub/mrf/activity_expiration_policy_test.exs @@ -0,0 +1,77 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2020 Pleroma Authors <https://pleroma.social/> +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Web.ActivityPub.MRF.ActivityExpirationPolicyTest do +  use ExUnit.Case, async: true +  alias Pleroma.Web.ActivityPub.MRF.ActivityExpirationPolicy + +  @id Pleroma.Web.Endpoint.url() <> "/activities/cofe" + +  test "adds `expires_at` property" do +    assert {:ok, %{"type" => "Create", "expires_at" => expires_at}} = +             ActivityExpirationPolicy.filter(%{ +               "id" => @id, +               "type" => "Create", +               "object" => %{"type" => "Note"} +             }) + +    assert Timex.diff(expires_at, NaiveDateTime.utc_now(), :days) == 364 +  end + +  test "keeps existing `expires_at` if it less than the config setting" do +    expires_at = NaiveDateTime.utc_now() |> Timex.shift(days: 1) + +    assert {:ok, %{"type" => "Create", "expires_at" => ^expires_at}} = +             ActivityExpirationPolicy.filter(%{ +               "id" => @id, +               "type" => "Create", +               "expires_at" => expires_at, +               "object" => %{"type" => "Note"} +             }) +  end + +  test "overwrites existing `expires_at` if it greater than the config setting" do +    too_distant_future = NaiveDateTime.utc_now() |> Timex.shift(years: 2) + +    assert {:ok, %{"type" => "Create", "expires_at" => expires_at}} = +             ActivityExpirationPolicy.filter(%{ +               "id" => @id, +               "type" => "Create", +               "expires_at" => too_distant_future, +               "object" => %{"type" => "Note"} +             }) + +    assert Timex.diff(expires_at, NaiveDateTime.utc_now(), :days) == 364 +  end + +  test "ignores remote activities" do +    assert {:ok, activity} = +             ActivityExpirationPolicy.filter(%{ +               "id" => "https://example.com/123", +               "type" => "Create", +               "object" => %{"type" => "Note"} +             }) + +    refute Map.has_key?(activity, "expires_at") +  end + +  test "ignores non-Create/Note activities" do +    assert {:ok, activity} = +             ActivityExpirationPolicy.filter(%{ +               "id" => "https://example.com/123", +               "type" => "Follow" +             }) + +    refute Map.has_key?(activity, "expires_at") + +    assert {:ok, activity} = +             ActivityExpirationPolicy.filter(%{ +               "id" => "https://example.com/123", +               "type" => "Create", +               "object" => %{"type" => "Cofe"} +             }) + +    refute Map.has_key?(activity, "expires_at") +  end +end diff --git a/test/workers/cron/purge_expired_activities_worker_test.exs b/test/workers/cron/purge_expired_activities_worker_test.exs index 5864f9e5f..6d2991a60 100644 --- a/test/workers/cron/purge_expired_activities_worker_test.exs +++ b/test/workers/cron/purge_expired_activities_worker_test.exs @@ -11,7 +11,10 @@ defmodule Pleroma.Workers.Cron.PurgeExpiredActivitiesWorkerTest do    import Pleroma.Factory    import ExUnit.CaptureLog -  setup do: clear_config([ActivityExpiration, :enabled]) +  setup do +    clear_config([ActivityExpiration, :enabled]) +    clear_config([:instance, :rewrite_policy]) +  end    test "deletes an expiration activity" do      Pleroma.Config.put([ActivityExpiration, :enabled], true) @@ -36,6 +39,35 @@ defmodule Pleroma.Workers.Cron.PurgeExpiredActivitiesWorkerTest do      refute Pleroma.Repo.get(Pleroma.ActivityExpiration, expiration.id)    end +  test "works with ActivityExpirationPolicy" do +    Pleroma.Config.put([ActivityExpiration, :enabled], true) + +    Pleroma.Config.put( +      [:instance, :rewrite_policy], +      Pleroma.Web.ActivityPub.MRF.ActivityExpirationPolicy +    ) + +    user = insert(:user) + +    days = Pleroma.Config.get([:mrf_activity_expiration, :days], 365) + +    {:ok, %{id: id} = activity} = Pleroma.Web.CommonAPI.post(user, %{status: "cofe"}) + +    past_date = +      NaiveDateTime.utc_now() |> Timex.shift(days: -days) |> NaiveDateTime.truncate(:second) + +    activity +    |> Repo.preload(:expiration) +    |> Map.get(:expiration) +    |> Ecto.Changeset.change(%{scheduled_at: past_date}) +    |> Repo.update!() + +    Pleroma.Workers.Cron.PurgeExpiredActivitiesWorker.perform(:ops, :pid) + +    assert [%{data: %{"type" => "Delete", "deleted_activity_id" => ^id}}] = +             Pleroma.Repo.all(Pleroma.Activity) +  end +    describe "delete_activity/1" do      test "adds log message if activity isn't find" do        assert capture_log([level: :error], fn -> | 
