All modules, configs, paths, and references updated. 836 tests pass, zero warnings. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
48 lines
1.3 KiB
Elixir
48 lines
1.3 KiB
Elixir
defmodule Berrypod.Images.OptimizeWorkerTest do
|
|
use Berrypod.DataCase, async: false
|
|
use Oban.Testing, repo: Berrypod.Repo
|
|
|
|
alias Berrypod.Images.OptimizeWorker
|
|
import Berrypod.ImageFixtures
|
|
|
|
setup do
|
|
cleanup_cache()
|
|
on_exit(&cleanup_cache/0)
|
|
:ok
|
|
end
|
|
|
|
describe "perform/1" do
|
|
test "processes image and generates variants" do
|
|
image = image_fixture(%{source_width: 1200, source_height: 800})
|
|
|
|
assert :ok = perform_job(OptimizeWorker, %{image_id: image.id})
|
|
|
|
for w <- [400, 800, 1200], fmt <- [:avif, :webp, :jpg] do
|
|
assert File.exists?(cache_path(image.id, w, fmt))
|
|
end
|
|
end
|
|
|
|
test "cancels for missing image" do
|
|
assert {:cancel, :image_not_found} =
|
|
perform_job(OptimizeWorker, %{image_id: Ecto.UUID.generate()})
|
|
end
|
|
|
|
test "skips SVG images" do
|
|
image = svg_fixture()
|
|
assert :ok = perform_job(OptimizeWorker, %{image_id: image.id})
|
|
end
|
|
end
|
|
|
|
describe "enqueue/1" do
|
|
test "inserts and executes job (inline mode)" do
|
|
image = image_fixture(%{source_width: 1200, source_height: 800})
|
|
|
|
# In inline test mode, job executes immediately
|
|
assert {:ok, %Oban.Job{state: "completed"}} = OptimizeWorker.enqueue(image.id)
|
|
|
|
# Verify variants were created (job ran inline)
|
|
assert File.exists?(cache_path(image.id, 400, :avif))
|
|
end
|
|
end
|
|
end
|