Files
labelmaker/test/labelmaker_web/constants_test.exs
2025-10-13 08:24:31 -04:00

197 lines
5.3 KiB
Elixir

defmodule LabelmakerWeb.ConstantsTest do
use ExUnit.Case, async: true
alias LabelmakerWeb.Constants
describe "colors/0" do
test "returns list of valid colors" do
colors = Constants.colors()
assert is_list(colors)
assert "black" in colors
assert "white" in colors
assert "red" in colors
assert "blue" in colors
assert "green" in colors
end
test "contains no duplicates" do
colors = Constants.colors()
assert length(colors) == length(Enum.uniq(colors))
end
end
describe "fonts/0" do
test "returns list of valid fonts" do
fonts = Constants.fonts()
assert is_list(fonts)
assert "Helvetica" in fonts
assert "Impact" in fonts
assert "Georgia" in fonts
end
test "fonts are properly formatted" do
fonts = Constants.fonts()
# Should not contain -MS suffix
refute "Comic-Sans-MS" in fonts
# Should contain cleaned version
assert "Comic Sans" in fonts
end
end
describe "font_map/0" do
test "returns map with font shortcuts" do
font_map = Constants.font_map()
assert is_map(font_map)
assert font_map["h"] == "Helvetica"
assert font_map["i"] == "Impact"
assert font_map["cs"] == "Comic-Sans-MS"
end
test "includes full font names as keys" do
font_map = Constants.font_map()
assert font_map["helvetica"] == "Helvetica"
assert font_map["impact"] == "Impact"
end
end
describe "outlines/0" do
test "returns list including 'none' and all colors" do
outlines = Constants.outlines()
assert "none" in outlines
assert "black" in outlines
assert "white" in outlines
end
end
describe "sizes/0" do
test "returns list of valid sizes as strings" do
sizes = Constants.sizes()
assert is_list(sizes)
assert "16" in sizes
assert "72" in sizes
assert "128" in sizes
end
test "all sizes are strings" do
sizes = Constants.sizes()
assert Enum.all?(sizes, &is_binary/1)
end
test "sizes are in increments of 8" do
sizes = Constants.sizes()
integers = Enum.map(sizes, &String.to_integer/1)
# Check that consecutive sizes differ by 8
diffs =
integers
|> Enum.chunk_every(2, 1, :discard)
|> Enum.map(fn [a, b] -> b - a end)
assert Enum.all?(diffs, &(&1 == 8))
end
end
describe "defaults/0" do
test "returns map with default values" do
defaults = Constants.defaults()
assert is_map(defaults)
assert defaults.color == "black"
assert defaults.font == "Helvetica"
assert defaults.size == "72"
assert defaults.outline == "white"
end
test "includes all required keys" do
defaults = Constants.defaults()
assert Map.has_key?(defaults, :color)
assert Map.has_key?(defaults, :font)
assert Map.has_key?(defaults, :size)
assert Map.has_key?(defaults, :outline)
assert Map.has_key?(defaults, :label)
assert Map.has_key?(defaults, :align)
assert Map.has_key?(defaults, :width)
assert Map.has_key?(defaults, :height)
end
end
describe "form_defaults/0" do
test "returns map with form-specific defaults" do
form_defaults = Constants.form_defaults()
assert is_map(form_defaults)
assert form_defaults.sizing == "font"
assert form_defaults.preview_background == "r"
end
end
describe "permitted_alignments/0" do
test "returns list of valid alignments" do
alignments = Constants.permitted_alignments()
assert "left" in alignments
assert "center" in alignments
assert "right" in alignments
end
end
describe "permitted_gravity/0" do
test "returns list of ImageMagick gravity values" do
gravity = Constants.permitted_gravity()
assert "west" in gravity
assert "center" in gravity
assert "east" in gravity
end
end
describe "sizing_values/0" do
test "returns valid sizing modes" do
values = Constants.sizing_values()
assert "font" in values
assert "wxh" in values
end
end
describe "max_label_length/0" do
test "returns positive integer" do
max_length = Constants.max_label_length()
assert is_integer(max_length)
assert max_length > 0
end
end
describe "max_width/0 and max_height/0" do
test "returns positive integers" do
assert is_integer(Constants.max_width())
assert is_integer(Constants.max_height())
assert Constants.max_width() > 0
assert Constants.max_height() > 0
end
end
describe "rows_min/0 and rows_max/0" do
test "returns valid range" do
assert Constants.rows_min() > 0
assert Constants.rows_max() > Constants.rows_min()
end
end
describe "danger/0" do
test "returns hex color code" do
danger = Constants.danger()
assert String.starts_with?(danger, "#")
end
end
describe "permitted_keys/0" do
test "returns list of all permitted parameter keys" do
keys = Constants.permitted_keys()
assert is_list(keys)
assert "color" in keys
assert "font" in keys
assert "size" in keys
assert "label" in keys
end
test "all keys are strings" do
keys = Constants.permitted_keys()
assert Enum.all?(keys, &is_binary/1)
end
end
end