============================= test session starts ============================== platform linux -- Python 3.13.5, pytest-8.4.2, pluggy-1.6.0 -- /workspace/gitea-atd/Ty_Tech/SlabUploader/backend/.venv/bin/python cachedir: .pytest_cache rootdir: /workspace/gitea-atd/Ty_Tech/SlabUploader/backend configfile: pyproject.toml testpaths: tests plugins: anyio-4.15.1, respx-0.23.1 collecting ... collected 39 items tests/contract/test_health.py::TestHealthEndpoint::test_returns_200 PASSED [ 2%] tests/contract/test_health.py::TestHealthEndpoint::test_returns_ok_status PASSED [ 5%] tests/contract/test_health.py::TestHealthEndpoint::test_woo_reachable_false_when_credentials_not_configured PASSED [ 7%] tests/contract/test_health.py::TestHealthEndpoint::test_response_shape PASSED [ 10%] tests/contract/test_health.py::TestHealthEndpoint::test_with_test_client_lifespan PASSED [ 12%] tests/contract/test_slabs.py::TestCreateSlab::test_returns_201 PASSED [ 15%] tests/contract/test_slabs.py::TestCreateSlab::test_returns_status_calibrated PASSED [ 17%] tests/contract/test_slabs.py::TestCreateSlab::test_returns_server_rev PASSED [ 20%] tests/contract/test_slabs.py::TestCreateSlab::test_response_shape PASSED [ 23%] tests/contract/test_slabs.py::TestCreateSlab::test_multiple_photos PASSED [ 25%] tests/contract/test_slabs.py::TestCreateSlab::test_missing_data_field_returns_400 PASSED [ 28%] tests/contract/test_slabs.py::TestCreateSlab::test_duplicate_sku_returns_409 PASSED [ 30%] tests/contract/test_slabs.py::TestCreateSlab::test_with_test_client_lifespan PASSED [ 33%] tests/contract/test_woo_base_url.py::TestWooBaseUrlValidation::test_refuses_http_url PASSED [ 35%] tests/contract/test_woo_base_url.py::TestWooBaseUrlValidation::test_refuses_missing_url PASSED [ 38%] tests/contract/test_woo_base_url.py::TestWooBaseUrlValidation::test_accepts_https_url PASSED [ 41%] tests/contract/test_woo_base_url.py::TestWooBaseUrlReadOnly::test_get_settings_returns_woo_base_url PASSED [ 43%] tests/contract/test_woo_base_url.py::TestWooBaseUrlReadOnly::test_put_settings_rejects_woo_base_url PASSED [ 46%] tests/contract/test_woo_base_url.py::TestWooBaseUrlReadOnly::test_put_settings_allows_other_fields PASSED [ 48%] tests/contract/test_woo_base_url.py::TestWooBaseUrlReadOnly::test_get_settings_never_returns_app_password PASSED [ 51%] tests/contract/test_woo_base_url.py::TestWooBaseUrlReadOnly::test_put_settings_rejects_consumer_keys PASSED [ 53%] tests/unit/test_aes.py::TestAESRoundTrip::test_roundtrip_username PASSED [ 56%] tests/unit/test_aes.py::TestAESRoundTrip::test_roundtrip_password PASSED [ 58%] tests/unit/test_aes.py::TestAESRoundTrip::test_roundtrip_empty_string PASSED [ 61%] tests/unit/test_aes.py::TestAESRoundTrip::test_roundtrip_unicode PASSED [ 64%] tests/unit/test_aes.py::TestAESRoundTrip::test_roundtrip_special_chars PASSED [ 66%] tests/unit/test_aes.py::TestAESRoundTrip::test_ciphertext_is_bytes PASSED [ 69%] tests/unit/test_aes.py::TestAESRoundTrip::test_ciphertext_starts_with_nonce PASSED [ 71%] tests/unit/test_aes.py::TestAESRoundTrip::test_ciphertext_different_from_plaintext PASSED [ 74%] tests/unit/test_aes.py::TestAESRoundTrip::test_ciphertext_changes_each_call PASSED [ 76%] tests/unit/test_aes.py::TestFreshNonce::test_nonce_differs_across_encryptions PASSED [ 79%] tests/unit/test_aes.py::TestFreshNonce::test_multiple_encryptions_all_unique_nonces PASSED [ 82%] tests/unit/test_aes.py::TestTamperedCiphertext::test_tampered_body_raises_authentication_error PASSED [ 84%] tests/unit/test_aes.py::TestTamperedCiphertext::test_truncated_ciphertext_raises_error PASSED [ 87%] tests/unit/test_aes.py::TestTamperedCiphertext::test_wrong_key_raises_error PASSED [ 89%] tests/unit/test_aes.py::TestMissingKey::test_missing_key_refuses_startup PASSED [ 92%] tests/unit/test_aes.py::TestMissingKey::test_too_short_key_refuses_startup PASSED [ 94%] tests/unit/test_aes.py::TestMissingKey::test_get_aes_key_returns_bytes PASSED [ 97%] tests/unit/test_aes.py::TestNoPlaintextFallback::test_decrypt_returns_decrypted_value PASSED [100%] =============================== warnings summary =============================== .venv/lib/python3.13/site-packages/fastapi/testclient.py:1 /workspace/gitea-atd/Ty_Tech/SlabUploader/backend/.venv/lib/python3.13/site-packages/fastapi/testclient.py:1: StarletteDeprecationWarning: Using `httpx` with `starlette.testclient` is deprecated; install `httpx2` instead. from starlette.testclient import TestClient as TestClient # noqa .venv/lib/python3.13/site-packages/starlette/testclient.py:53 /workspace/gitea-atd/Ty_Tech/SlabUploader/backend/.venv/lib/python3.13/site-packages/starlette/testclient.py:53: DeprecationWarning: The anyio.abc.BlockingPortal alias is deprecated, use anyio.from_thread.BlockingPortal instead. _PortalFactoryType = Callable[[], AbstractContextManager[anyio.abc.BlockingPortal]] -- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html ======================== 39 passed, 2 warnings in 0.40s ========================