analytics/test/workers/purge_cdn_cache_test.exs

78 lines
2.4 KiB
Elixir

defmodule Plausible.Workers.PurgeCDNCacheTest do
use Plausible.DataCase, async: true
import ExUnit.CaptureLog
import Plug.Conn
alias Plausible.Workers.PurgeCDNCache
describe "perform/1" do
setup do
# Set test configuration
Application.put_env(:plausible, Plausible.Workers.PurgeCDNCache,
pullzone_id: "456",
api_key: "test-api-key",
req_opts: [
plug: {Req.Test, Plausible.Workers.PurgeCDNCache}
]
)
:ok
end
test "successfully purges cache" do
Req.Test.expect(Plausible.Workers.PurgeCDNCache, &send_resp(&1, 204, "ok"))
assert {:ok, :success} = PurgeCDNCache.perform(%Oban.Job{args: %{"id" => "adf"}})
end
test "handles missing configuration" do
# Clear configuration
Application.put_env(:plausible, Plausible.Workers.PurgeCDNCache, [])
{result, log} =
with_log(fn -> PurgeCDNCache.perform(%Oban.Job{args: %{"id" => "adf"}}) end)
assert {:discard, "Configuration missing"} = result
assert log =~ "Ignoring purge CDN cache for tracker script adf: Configuration missing"
end
test "handles unexpected status code" do
Req.Test.expect(
Plausible.Workers.PurgeCDNCache,
&send_resp(&1, 500, "internal server error")
)
{result, log} =
with_log(fn -> PurgeCDNCache.perform(%Oban.Job{args: %{"id" => "adf"}}) end)
assert {:error, "Unexpected status: 500"} = result
assert log =~ "Failed to purge CDN cache for tracker script adf: Unexpected status: 500"
end
test "handles network errors" do
Req.Test.expect(
Plausible.Workers.PurgeCDNCache,
&Req.Test.transport_error(&1, :econnrefused)
)
{result, log} =
with_log(fn -> PurgeCDNCache.perform(%Oban.Job{args: %{"id" => "adf"}}) end)
assert {:error, %Req.TransportError{reason: :econnrefused}} = result
assert log =~
"Failed to purge CDN cache for tracker script adf: %Req.TransportError{reason: :econnrefused}"
end
end
describe "backoff/1" do
test "implements exponential backoff starting at 3 minutes" do
assert PurgeCDNCache.backoff(%Oban.Job{attempt: 1}) == 180
assert PurgeCDNCache.backoff(%Oban.Job{attempt: 2}) == 360
assert PurgeCDNCache.backoff(%Oban.Job{attempt: 3}) == 720
assert PurgeCDNCache.backoff(%Oban.Job{attempt: 4}) == 1440
assert PurgeCDNCache.backoff(%Oban.Job{attempt: 5}) == 2880
end
end
end