defmodule Aprsme.Workers.PacketCleanupWorkerTest do
  use Aprsme.DataCase, async: true

  import Mox

  alias Aprsme.PacketsMock
  alias Aprsme.Workers.PacketCleanupWorker

  # Make sure mocks are verified when the test exits
  setup :verify_on_exit!

  describe "perform/1 with cleanup_days" do
    test "cleans up packets older than the specified number of days" do
      days = 30
      job = %Oban.Job{args: %{"cleanup_days" => days}}

      expect(PacketsMock, :clean_packets_older_than, fn ^days ->
        5
      end)

      assert :ok = PacketCleanupWorker.perform(job)
    end
  end

  describe "perform/1 without cleanup_days" do
    test "cleans up packets using the default retention period" do
      job = %Oban.Job{args: %{}}

      expect(PacketsMock, :clean_old_packets, fn ->
        10
      end)

      assert :ok = PacketCleanupWorker.perform(job)
    end
  end

  describe "cleanup_packets_older_than/1" do
    test "cleans up packets older than the given number of days" do
      days = 60
      deleted_count = 15

      expect(PacketsMock, :clean_packets_older_than, fn ^days ->
        deleted_count
      end)

      assert ^deleted_count = PacketCleanupWorker.cleanup_packets_older_than(days)
    end
  end
end
