defmodule Pleroma.Activity.PrunerTest do
  use Pleroma.DataCase, async: true

  alias Pleroma.Activity
  alias Pleroma.Activity.Pruner

  import Pleroma.Factory

  describe "prune_deletes" do
    test "it prunes old delete objects" do
      user = insert(:user)

      new_delete = insert(:delete_activity, type: "Delete", user: user)

      old_delete =
        insert(:delete_activity,
          type: "Delete",
          user: user,
          inserted_at: DateTime.utc_now() |> DateTime.add(-31 * 24, :hour)
        )

      Pruner.prune_deletes()
      assert Activity.get_by_id(new_delete.id)
      refute Activity.get_by_id(old_delete.id)
    end
  end

  describe "prune_stale_follow_requests" do
    test "it prunes old follow requests" do
      follower = insert(:user)
      followee = insert(:user)

      new_follow_request =
        insert(
          :follow_activity,
          follower: follower,
          followed: followee,
          state: "reject"
        )

      old_not_rejected_request =
        insert(:follow_activity,
          follower: follower,
          followed: followee,
          state: "pending",
          inserted_at: DateTime.utc_now() |> DateTime.add(-31 * 24, :hour)
        )

      old_follow_request =
        insert(:follow_activity,
          follower: follower,
          followed: followee,
          inserted_at: DateTime.utc_now() |> DateTime.add(-31 * 24, :hour),
          state: "reject"
        )

      Pruner.prune_stale_follow_requests()
      assert Activity.get_by_id(new_follow_request.id)
      assert Activity.get_by_id(old_not_rejected_request.id)
      refute Activity.get_by_id(old_follow_request.id)
    end
  end
end