tests courtesy of Claude
This commit is contained in:
167
test/labelmaker_web/controllers/label_controller_test.exs
Normal file
167
test/labelmaker_web/controllers/label_controller_test.exs
Normal file
@@ -0,0 +1,167 @@
|
||||
defmodule LabelmakerWeb.LabelControllerTest do
|
||||
use LabelmakerWeb.ConnCase, async: false
|
||||
|
||||
@label_dir Path.join(:code.priv_dir(:labelmaker), "static/labels")
|
||||
|
||||
setup do
|
||||
# Clean up test images before each test
|
||||
File.rm_rf!(@label_dir)
|
||||
File.mkdir_p!(@label_dir)
|
||||
:ok
|
||||
end
|
||||
|
||||
describe "show/2" do
|
||||
test "generates and returns PNG image for valid label", %{conn: conn} do
|
||||
conn = get(conn, ~p"/TestLabel")
|
||||
|
||||
assert conn.status == 200
|
||||
assert get_resp_header(conn, "content-type") == ["image/png; charset=utf-8"]
|
||||
assert byte_size(conn.resp_body) > 0
|
||||
end
|
||||
|
||||
test "generates image with custom color", %{conn: conn} do
|
||||
conn = get(conn, ~p"/ColorTest?color=red")
|
||||
|
||||
assert conn.status == 200
|
||||
assert get_resp_header(conn, "content-type") == ["image/png; charset=utf-8"]
|
||||
end
|
||||
|
||||
test "generates image with custom font", %{conn: conn} do
|
||||
conn = get(conn, ~p"/FontTest?font=Impact")
|
||||
|
||||
assert conn.status == 200
|
||||
assert get_resp_header(conn, "content-type") == ["image/png; charset=utf-8"]
|
||||
end
|
||||
|
||||
test "generates image with font shortcut", %{conn: conn} do
|
||||
conn = get(conn, ~p"/ShortcutTest?font=h")
|
||||
|
||||
assert conn.status == 200
|
||||
assert get_resp_header(conn, "content-type") == ["image/png; charset=utf-8"]
|
||||
end
|
||||
|
||||
test "generates image with custom size", %{conn: conn} do
|
||||
conn = get(conn, ~p"/SizeTest?size=96")
|
||||
|
||||
assert conn.status == 200
|
||||
assert get_resp_header(conn, "content-type") == ["image/png; charset=utf-8"]
|
||||
end
|
||||
|
||||
test "generates image with outline", %{conn: conn} do
|
||||
conn = get(conn, ~p"/OutlineTest?outline=blue")
|
||||
|
||||
assert conn.status == 200
|
||||
assert get_resp_header(conn, "content-type") == ["image/png; charset=utf-8"]
|
||||
end
|
||||
|
||||
test "generates image without outline", %{conn: conn} do
|
||||
conn = get(conn, ~p"/NoOutline?outline=none")
|
||||
|
||||
assert conn.status == 200
|
||||
assert get_resp_header(conn, "content-type") == ["image/png; charset=utf-8"]
|
||||
end
|
||||
|
||||
test "generates image with width and height", %{conn: conn} do
|
||||
conn = get(conn, ~p"/FixedSize?width=400&height=300")
|
||||
|
||||
assert conn.status == 200
|
||||
assert get_resp_header(conn, "content-type") == ["image/png; charset=utf-8"]
|
||||
end
|
||||
|
||||
test "generates image with alignment", %{conn: conn} do
|
||||
conn = get(conn, ~p"/AlignTest?width=400&height=300&align=left")
|
||||
|
||||
assert conn.status == 200
|
||||
assert get_resp_header(conn, "content-type") == ["image/png; charset=utf-8"]
|
||||
end
|
||||
|
||||
test "handles multiline labels with newlines", %{conn: conn} do
|
||||
conn = get(conn, ~p"/Line1\nLine2\nLine3")
|
||||
|
||||
assert conn.status == 200
|
||||
assert get_resp_header(conn, "content-type") == ["image/png; charset=utf-8"]
|
||||
end
|
||||
|
||||
test "handles URL-encoded labels", %{conn: conn} do
|
||||
conn = get(conn, ~p"/Hello%20World")
|
||||
|
||||
assert conn.status == 200
|
||||
assert get_resp_header(conn, "content-type") == ["image/png; charset=utf-8"]
|
||||
end
|
||||
|
||||
test "caches generated images", %{conn: conn} do
|
||||
# First request generates the image
|
||||
conn1 = get(conn, ~p"/CacheTest?color=blue")
|
||||
assert conn1.status == 200
|
||||
|
||||
# Get the generated filename
|
||||
files_before = File.ls!(@label_dir)
|
||||
assert length(files_before) > 0
|
||||
|
||||
# Second request should use cached image
|
||||
conn2 = get(conn, ~p"/CacheTest?color=blue")
|
||||
assert conn2.status == 200
|
||||
|
||||
# Should still have same number of files (no duplicate generation)
|
||||
files_after = File.ls!(@label_dir)
|
||||
assert files_before == files_after
|
||||
end
|
||||
|
||||
test "generates different files for different parameters", %{conn: conn} do
|
||||
_conn1 = get(conn, ~p"/Test?color=red")
|
||||
_conn2 = get(conn, ~p"/Test?color=blue")
|
||||
|
||||
files = File.ls!(@label_dir)
|
||||
assert length(files) == 2
|
||||
end
|
||||
|
||||
test "handles special characters in label", %{conn: conn} do
|
||||
conn = get(conn, ~p"/Test!@#$%")
|
||||
|
||||
assert conn.status == 200
|
||||
assert get_resp_header(conn, "content-type") == ["image/png; charset=utf-8"]
|
||||
end
|
||||
|
||||
test "handles emoji in label", %{conn: conn} do
|
||||
conn = get(conn, ~p"/Hello🎉")
|
||||
|
||||
assert conn.status == 200
|
||||
assert get_resp_header(conn, "content-type") == ["image/png; charset=utf-8"]
|
||||
end
|
||||
|
||||
test "ignores invalid color parameter and uses default", %{conn: conn} do
|
||||
conn = get(conn, ~p"/Test?color=invalidcolor")
|
||||
|
||||
assert conn.status == 200
|
||||
assert get_resp_header(conn, "content-type") == ["image/png; charset=utf-8"]
|
||||
end
|
||||
|
||||
test "ignores invalid font parameter and uses default", %{conn: conn} do
|
||||
conn = get(conn, ~p"/Test?font=invalidfont")
|
||||
|
||||
assert conn.status == 200
|
||||
assert get_resp_header(conn, "content-type") == ["image/png; charset=utf-8"]
|
||||
end
|
||||
|
||||
test "ignores invalid size parameter and uses default", %{conn: conn} do
|
||||
conn = get(conn, ~p"/Test?size=999")
|
||||
|
||||
assert conn.status == 200
|
||||
assert get_resp_header(conn, "content-type") == ["image/png; charset=utf-8"]
|
||||
end
|
||||
|
||||
test "handles combination of all valid parameters", %{conn: conn} do
|
||||
conn = get(conn, ~p"/FullTest?color=yellow&font=Impact&outline=black&size=96")
|
||||
|
||||
assert conn.status == 200
|
||||
assert get_resp_header(conn, "content-type") == ["image/png; charset=utf-8"]
|
||||
end
|
||||
|
||||
test "handles empty label", %{conn: conn} do
|
||||
conn = get(conn, ~p"/ ")
|
||||
|
||||
assert conn.status == 200
|
||||
assert get_resp_header(conn, "content-type") == ["image/png; charset=utf-8"]
|
||||
end
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user