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

  alias Pleroma.Delivery
  alias Pleroma.Object
  alias Pleroma.Object.Pruner

  import Pleroma.Factory

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

      old_tombstone =
        insert(:tombstone,
          inserted_at: DateTime.utc_now() |> DateTime.add(-31 * 24, :hour)
        )

      Pruner.prune_tombstones()
      assert Object.get_by_id(new_tombstone.id)
      refute Object.get_by_id(old_tombstone.id)
    end
  end

  describe "prune_tombstoned_deliveries" do
    test "it prunes old tombstone deliveries" do
      user = insert(:user)

      tombstone = insert(:tombstone)
      tombstoned = insert(:delivery, object: tombstone, user: user)

      note = insert(:note)
      not_tombstoned = insert(:delivery, object: note, user: user)

      Pruner.prune_tombstoned_deliveries()

      refute Repo.get(Delivery, tombstoned.id)
      assert Repo.get(Delivery, not_tombstoned.id)
    end
  end
end