pyWebLayout/tests/examples/test_10_forms_demo.py
2025-11-12 12:03:27 +00:00

160 lines
4.5 KiB
Python

"""
Test for forms example (10_forms_demo.py).
This test ensures the forms example runs correctly and produces expected output.
"""
import pytest
import sys
from pathlib import Path
import importlib.util
# Add examples to path
examples_dir = Path(__file__).parent.parent.parent / "examples"
sys.path.insert(0, str(examples_dir))
# Load the demo module
spec = importlib.util.spec_from_file_location(
"forms_demo",
examples_dir / "10_forms_demo.py"
)
demo_module = importlib.util.module_from_spec(spec)
spec.loader.exec_module(demo_module)
def test_forms_demo_imports():
"""Test that the forms demo can be imported without errors."""
assert demo_module is not None
def test_form_submit_callback():
"""Test that form submit callbacks work correctly."""
form_submit_callback = demo_module.form_submit_callback
demo_module.form_submissions = []
callback = form_submit_callback("test_form")
callback({"field1": "value1"})
assert len(demo_module.form_submissions) == 1
assert demo_module.form_submissions[0][0] == "test_form"
assert demo_module.form_submissions[0][1] == {"field1": "value1"}
def test_create_example_1_text_fields():
"""Test creating text fields example."""
create_example_1 = demo_module.create_example_1_text_fields
from pyWebLayout.concrete.page import Page
page = create_example_1()
assert isinstance(page, Page)
assert page.size == (500, 600)
def test_create_example_2_number_fields():
"""Test creating number fields example."""
create_example_2 = demo_module.create_example_2_number_fields
from pyWebLayout.concrete.page import Page
page = create_example_2()
assert isinstance(page, Page)
assert page.size == (500, 600)
def test_create_example_3_selection_fields():
"""Test creating selection fields example."""
create_example_3 = demo_module.create_example_3_selection_fields
from pyWebLayout.concrete.page import Page
page = create_example_3()
assert isinstance(page, Page)
assert page.size == (500, 600)
def test_create_example_4_complete_form():
"""Test creating complete form example."""
create_example_4 = demo_module.create_example_4_complete_form
from pyWebLayout.concrete.page import Page
page = create_example_4()
assert isinstance(page, Page)
assert page.size == (500, 700)
def test_all_form_field_types():
"""Test that all FormFieldType values are demonstrated."""
from pyWebLayout.abstract.functional import FormFieldType
# All field types that should be in examples
expected_types = {
FormFieldType.TEXT,
FormFieldType.PASSWORD,
FormFieldType.EMAIL,
FormFieldType.URL,
FormFieldType.TEXTAREA,
FormFieldType.NUMBER,
FormFieldType.DATE,
FormFieldType.TIME,
FormFieldType.RANGE,
FormFieldType.COLOR,
FormFieldType.CHECKBOX,
FormFieldType.RADIO,
FormFieldType.SELECT,
FormFieldType.HIDDEN
}
# This test verifies that the example includes all major field types
# (the actual verification would happen by inspecting the forms,
# but this confirms the enum exists)
assert len(expected_types) == 14
def test_combine_pages_into_grid():
"""Test combining pages into grid."""
combine_pages_into_grid = demo_module.combine_pages_into_grid
from pyWebLayout.concrete.page import Page
from pyWebLayout.style.page_style import PageStyle
# Create a few pages
page_style = PageStyle()
pages = [
Page(size=(200, 200), style=page_style),
Page(size=(200, 200), style=page_style),
Page(size=(200, 200), style=page_style),
Page(size=(200, 200), style=page_style)
]
combined = combine_pages_into_grid(pages, "Test Title")
# Should create a combined image
from PIL import Image
assert isinstance(combined, Image.Image)
def test_main_function():
"""Test that the main function runs without errors."""
main = demo_module.main
# Run main (will create output files)
result = main()
# Should return combined image and form submissions
assert result is not None
assert len(result) == 2
combined_image, form_submissions = result
# Should be a PIL image
from PIL import Image
assert isinstance(combined_image, Image.Image)
# Form submissions should be a list
assert isinstance(form_submissions, list)
# Output file should exist
output_dir = Path("docs/images")
assert (output_dir / "example_10_forms.png").exists()
if __name__ == "__main__":
pytest.main([__file__, "-v"])