============================= test session starts ============================== platform linux -- Python 3.12.13, pytest-9.1.1, pluggy-1.6.0 -- /mnt/c/Users/barlo/projects/drydock/uat/ReadingList/runs/20260815.171255/build/ReadingList/.venv/bin/python cachedir: .pytest_cache rootdir: /mnt/c/Users/barlo/projects/drydock/uat/ReadingList/runs/20260815.171255/build/ReadingList configfile: pytest.ini collecting ... collected 44 items tests/test_architecture.py::test_factory_creates_runnable_application PASSED [ 2%] tests/test_architecture.py::test_factory_isolates_application_instances PASSED [ 4%] tests/test_architecture.py::test_testing_factory_uses_isolated_database_by_default PASSED [ 6%] tests/test_architecture.py::test_app_module_exposes_factory_without_starting_server PASSED [ 9%] tests/test_launcher.py::test_test_launcher_has_valid_posix_syntax PASSED [ 11%] tests/test_launcher.py::test_test_launcher_runs_pytest_from_project_root PASSED [ 13%] tests/test_ordered_list.py::test_root_is_successful_for_an_empty_store PASSED [ 15%] tests/test_ordered_list.py::test_empty_store_has_an_understandable_empty_state PASSED [ 18%] tests/test_ordered_list.py::test_root_renders_books_in_insertion_order PASSED [ 20%] tests/test_persistence.py::test_add_reads_back_submitted_book PASSED [ 22%] tests/test_persistence.py::test_initialize_migrates_existing_rows_to_unread PASSED [ 25%] tests/test_persistence.py::test_mark_read_persists_and_is_idempotent PASSED [ 27%] tests/test_persistence.py::test_mark_read_reports_missing_book PASSED [ 29%] tests/test_persistence.py::test_list_ordered_preserves_addition_order PASSED [ 31%] tests/test_persistence.py::test_remove_existing_book_removes_it PASSED [ 34%] tests/test_persistence.py::test_new_database_lists_no_books PASSED [ 36%] tests/test_persistence.py::test_add_rejects_empty_fields[-Author] PASSED [ 38%] tests/test_persistence.py::test_add_rejects_empty_fields[Title-] PASSED [ 40%] tests/test_persistence.py::test_remove_missing_book_reports_false PASSED [ 43%] tests/test_persistence.py::test_initialization_is_idempotent_and_keeps_rows PASSED [ 45%] tests/test_persistence.py::test_database_rejects_null_book_fields PASSED [ 47%] tests/test_routes.py::test_root_renders_empty_list PASSED [ 50%] tests/test_routes.py::test_reading_list_has_labeled_book_form_and_empty_state PASSED [ 52%] tests/test_routes.py::test_added_book_is_rendered_with_named_removal_control PASSED [ 54%] tests/test_routes.py::test_added_book_is_rendered_as_unread_with_mark_read_control PASSED [ 56%] tests/test_routes.py::test_mark_read_route_persists_and_renders_read_state PASSED [ 59%] tests/test_routes.py::test_mark_read_route_with_unknown_id_keeps_all_books PASSED [ 61%] tests/test_routes.py::test_book_creation_redirects_to_the_list PASSED [ 63%] tests/test_routes.py::test_book_creation_preserves_existing_insertion_order PASSED [ 65%] tests/test_routes.py::test_invalid_submission_keeps_reader_on_page_with_error PASSED [ 68%] tests/test_routes.py::test_invalid_submission_with_missing_author_returns_client_error PASSED [ 70%] tests/test_routes.py::test_submission_with_both_required_fields_missing_returns_client_error PASSED [ 72%] tests/test_routes.py::test_invalid_submission_is_not_persisted[Rejected Title-] PASSED [ 75%] tests/test_routes.py::test_invalid_submission_is_not_persisted[-Rejected Author] PASSED [ 77%] tests/test_routes.py::test_invalid_submission_is_not_persisted[-] PASSED [ 79%] tests/test_routes.py::test_valid_submission_remains_supported_after_validation PASSED [ 81%] tests/test_routes.py::test_removal_control_removes_only_target_book PASSED [ 84%] tests/test_routes.py::test_removal_route_preserves_relative_order_of_remaining_books PASSED [ 86%] tests/test_routes.py::test_removal_route_with_unknown_id_keeps_all_books PASSED [ 88%] tests/test_routes.py::test_health_reports_ok PASSED [ 90%] tests/test_screen.py::test_screen_loads_at_root PASSED [ 93%] tests/test_screen.py::test_screen_accepts_book_submission PASSED [ 95%] tests/test_screen.py::test_screen_removes_book_using_its_identity PASSED [ 97%] tests/test_screen.py::test_screen_supports_an_empty_list PASSED [100%] ============================== 44 passed in 1.08s ==============================