tests courtesy of Claude
This commit is contained in:
194
test/labelmaker_web/live/home_test.exs
Normal file
194
test/labelmaker_web/live/home_test.exs
Normal file
@@ -0,0 +1,194 @@
|
||||
defmodule LabelmakerWeb.HomeTest do
|
||||
use LabelmakerWeb.ConnCase, async: true
|
||||
|
||||
import Phoenix.LiveViewTest
|
||||
|
||||
describe "Home LiveView" do
|
||||
test "mounts successfully and displays form", %{conn: conn} do
|
||||
{:ok, view, html} = live(conn, ~p"/")
|
||||
|
||||
assert html =~ "Labelmaker"
|
||||
assert has_element?(view, "textarea[name='label']")
|
||||
end
|
||||
|
||||
test "displays default values on mount", %{conn: conn} do
|
||||
{:ok, view, _html} = live(conn, ~p"/")
|
||||
|
||||
# Check that default values are present
|
||||
assert has_element?(view, "select[name='color']")
|
||||
assert has_element?(view, "select[name='font']")
|
||||
assert has_element?(view, "select[name='size']")
|
||||
end
|
||||
|
||||
test "updates label text", %{conn: conn} do
|
||||
{:ok, view, _html} = live(conn, ~p"/")
|
||||
|
||||
view
|
||||
|> element("form")
|
||||
|> render_change(%{"label" => "Test Label"})
|
||||
|
||||
assert render(view) =~ "Test Label"
|
||||
end
|
||||
|
||||
test "updates color selection", %{conn: conn} do
|
||||
{:ok, view, _html} = live(conn, ~p"/")
|
||||
|
||||
view
|
||||
|> element("form")
|
||||
|> render_change(%{"color" => "red"})
|
||||
|
||||
# The preview should update with the new color
|
||||
html = render(view)
|
||||
assert html =~ "red" or has_element?(view, "[data-color='red']")
|
||||
end
|
||||
|
||||
test "updates font selection", %{conn: conn} do
|
||||
{:ok, view, _html} = live(conn, ~p"/")
|
||||
|
||||
view
|
||||
|> element("form")
|
||||
|> render_change(%{"font" => "Impact"})
|
||||
|
||||
html = render(view)
|
||||
assert html =~ "Impact" or has_element?(view, "[data-font='Impact']")
|
||||
end
|
||||
|
||||
test "updates size selection", %{conn: conn} do
|
||||
{:ok, view, _html} = live(conn, ~p"/")
|
||||
|
||||
view
|
||||
|> element("form")
|
||||
|> render_change(%{"size" => "96"})
|
||||
|
||||
html = render(view)
|
||||
assert html =~ "96" or has_element?(view, "[data-size='96']")
|
||||
end
|
||||
|
||||
test "updates outline selection", %{conn: conn} do
|
||||
{:ok, view, _html} = live(conn, ~p"/")
|
||||
|
||||
view
|
||||
|> element("form")
|
||||
|> render_change(%{"outline" => "blue"})
|
||||
|
||||
html = render(view)
|
||||
assert html =~ "blue" or has_element?(view, "[data-outline='blue']")
|
||||
end
|
||||
|
||||
test "handles preview background toggle", %{conn: conn} do
|
||||
{:ok, view, _html} = live(conn, ~p"/")
|
||||
|
||||
# Simulate clicking background toggle
|
||||
render_click(view, "update_preview", %{"bg" => "b"})
|
||||
|
||||
# View should still render without error
|
||||
assert render(view)
|
||||
end
|
||||
|
||||
test "handles sizing mode toggle", %{conn: conn} do
|
||||
{:ok, view, _html} = live(conn, ~p"/")
|
||||
|
||||
# Switch to width x height mode
|
||||
render_click(view, "update_sizing", %{"sizing" => "wxh"})
|
||||
|
||||
html = render(view)
|
||||
# Should now show width/height inputs
|
||||
assert has_element?(view, "input[name='width']") or html =~ "width"
|
||||
end
|
||||
|
||||
test "handles alignment change", %{conn: conn} do
|
||||
{:ok, view, _html} = live(conn, ~p"/")
|
||||
|
||||
# Change alignment
|
||||
render_click(view, "update_alignment", %{"option" => "left"})
|
||||
|
||||
# View should update without error
|
||||
assert render(view)
|
||||
end
|
||||
|
||||
test "converts escaped newlines in preview", %{conn: conn} do
|
||||
{:ok, view, _html} = live(conn, ~p"/")
|
||||
|
||||
view
|
||||
|> element("form")
|
||||
|> render_change(%{"label" => "Line1\\nLine2"})
|
||||
|
||||
html = render(view)
|
||||
# Should show actual line break in preview (as <br />)
|
||||
assert html =~ "<br" or html =~ "Line1" and html =~ "Line2"
|
||||
end
|
||||
|
||||
test "shows warning for long labels", %{conn: conn} do
|
||||
{:ok, view, _html} = live(conn, ~p"/")
|
||||
|
||||
long_label = String.duplicate("a", 2000)
|
||||
|
||||
view
|
||||
|> element("form")
|
||||
|> render_change(%{"label" => long_label})
|
||||
|
||||
html = render(view)
|
||||
# Should show some kind of warning or truncation indicator
|
||||
assert html =~ "1024" or html =~ "maximum" or html =~ "too long"
|
||||
end
|
||||
|
||||
test "generates valid preview link", %{conn: conn} do
|
||||
{:ok, view, _html} = live(conn, ~p"/")
|
||||
|
||||
view
|
||||
|> element("form")
|
||||
|> render_change(%{
|
||||
"label" => "TestLabel",
|
||||
"color" => "red",
|
||||
"size" => "96"
|
||||
})
|
||||
|
||||
html = render(view)
|
||||
# Should contain a link to the generated image
|
||||
assert html =~ "/TestLabel" or html =~ "href"
|
||||
end
|
||||
|
||||
test "handles multiple rapid updates", %{conn: conn} do
|
||||
{:ok, view, _html} = live(conn, ~p"/")
|
||||
|
||||
# Simulate rapid changes
|
||||
view
|
||||
|> element("form")
|
||||
|> render_change(%{"label" => "Test1"})
|
||||
|
||||
view
|
||||
|> element("form")
|
||||
|> render_change(%{"label" => "Test2"})
|
||||
|
||||
view
|
||||
|> element("form")
|
||||
|> render_change(%{"color" => "blue"})
|
||||
|
||||
# Should handle all updates without crashing
|
||||
assert render(view)
|
||||
end
|
||||
|
||||
test "handles special characters in label", %{conn: conn} do
|
||||
{:ok, view, _html} = live(conn, ~p"/")
|
||||
|
||||
view
|
||||
|> element("form")
|
||||
|> render_change(%{"label" => "Test!@#$%^&*()"})
|
||||
|
||||
# Should handle special characters without crashing
|
||||
assert render(view)
|
||||
end
|
||||
|
||||
test "handles emoji in label", %{conn: conn} do
|
||||
{:ok, view, _html} = live(conn, ~p"/")
|
||||
|
||||
view
|
||||
|> element("form")
|
||||
|> render_change(%{"label" => "Hello 🎉 World 🚀"})
|
||||
|
||||
# Should handle emoji without crashing
|
||||
html = render(view)
|
||||
assert html =~ "Hello" or html =~ "World"
|
||||
end
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user