78 lines
2.4 KiB
Elixir
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
|