Files
CyberGril/docs/r3/pytest-final-HEL-833.txt
T

254 lines
21 KiB
Plaintext

Python 3.12.14
SQLite 3.53.1
============================= test session starts ==============================
platform linux -- Python 3.12.14, pytest-9.1.1, pluggy-1.7.0 -- /home/xiaomo/multica_workspaces/hello-af23464d222e/hel-829-8ee8ba59fefd/workdir/CyberGril/.venv312/bin/python
cachedir: .pytest_cache
rootdir: /home/xiaomo/multica_workspaces/hello-af23464d222e/hel-833-599228edb82a/workdir/CyberGril
configfile: pyproject.toml
testpaths: tests
plugins: asyncio-1.4.0, anyio-4.15.1
asyncio: mode=Mode.AUTO, debug=False, asyncio_default_fixture_loop_scope=None, asyncio_default_test_loop_scope=function
collecting ... collected 225 items
tests/test_api.py::test_preview_validation_singleton_and_readonly PASSED
tests/test_api.py::test_history_context_relation_retry_and_restart PASSED
tests/test_api.py::test_errors_retry_context_excludes_failed_and_health_cache PASSED
tests/test_api.py::test_real_disconnect_and_immediate_new_turn PASSED
tests/test_api.py::test_concurrent_identical_retry_generates_once PASSED
tests/test_api.py::test_model_health_requires_success_and_requested_model[401-data0-False] PASSED
tests/test_api.py::test_model_health_requires_success_and_requested_model[404-data1-False] PASSED
tests/test_api.py::test_model_health_requires_success_and_requested_model[503-data2-False] PASSED
tests/test_api.py::test_model_health_requires_success_and_requested_model[200-data3-False] PASSED
tests/test_api.py::test_model_health_requires_success_and_requested_model[200-data4-True] PASSED
tests/test_api.py::test_health_timeout_is_bounded_and_cached PASSED
tests/test_api.py::test_disconnect_closes_real_openai_http_stream PASSED
tests/test_api.py::test_retry_old_turn_preserves_user_assistant_context_pairs PASSED
tests/test_api.py::test_upstream_http_503_maps_to_chinese_sse_error PASSED
tests/test_bazi.py::test_pillars_day_master PASSED
tests/test_bazi.py::test_element_scores_sum_positive PASSED
tests/test_bazi.py::test_element_scores_rejects_bad_format PASSED
tests/test_bazi.py::test_day_master_strength_in_range PASSED
tests/test_bazi.py::test_ten_god_known_relations PASSED
tests/test_bazi.py::test_ten_god_distribution_normalized PASSED
tests/test_bazi.py::test_compile_is_deterministic PASSED
tests/test_bazi.py::test_compile_produces_bounded_params PASSED
tests/test_bazi.py::test_strength_drives_sensitivity PASSED
tests/test_bazi.py::test_traits_text_non_empty PASSED
tests/test_birth_view.py::test_calendar_and_hour_boundaries_preserve_existing_chart[\u5b50\u65f6-1900-01-01] PASSED
tests/test_birth_view.py::test_calendar_and_hour_boundaries_preserve_existing_chart[\u5b50\u65f6-2000-02-04] PASSED
tests/test_birth_view.py::test_calendar_and_hour_boundaries_preserve_existing_chart[\u5b50\u65f6-2000-02-05] PASSED
tests/test_birth_view.py::test_calendar_and_hour_boundaries_preserve_existing_chart[\u5b50\u65f6-2001-05-23] PASSED
tests/test_birth_view.py::test_calendar_and_hour_boundaries_preserve_existing_chart[\u4e11\u65f6-1900-01-01] PASSED
tests/test_birth_view.py::test_calendar_and_hour_boundaries_preserve_existing_chart[\u4e11\u65f6-2000-02-04] PASSED
tests/test_birth_view.py::test_calendar_and_hour_boundaries_preserve_existing_chart[\u4e11\u65f6-2000-02-05] PASSED
tests/test_birth_view.py::test_calendar_and_hour_boundaries_preserve_existing_chart[\u4e11\u65f6-2001-05-23] PASSED
tests/test_birth_view.py::test_calendar_and_hour_boundaries_preserve_existing_chart[\u5bc5\u65f6-1900-01-01] PASSED
tests/test_birth_view.py::test_calendar_and_hour_boundaries_preserve_existing_chart[\u5bc5\u65f6-2000-02-04] PASSED
tests/test_birth_view.py::test_calendar_and_hour_boundaries_preserve_existing_chart[\u5bc5\u65f6-2000-02-05] PASSED
tests/test_birth_view.py::test_calendar_and_hour_boundaries_preserve_existing_chart[\u5bc5\u65f6-2001-05-23] PASSED
tests/test_birth_view.py::test_calendar_and_hour_boundaries_preserve_existing_chart[\u536f\u65f6-1900-01-01] PASSED
tests/test_birth_view.py::test_calendar_and_hour_boundaries_preserve_existing_chart[\u536f\u65f6-2000-02-04] PASSED
tests/test_birth_view.py::test_calendar_and_hour_boundaries_preserve_existing_chart[\u536f\u65f6-2000-02-05] PASSED
tests/test_birth_view.py::test_calendar_and_hour_boundaries_preserve_existing_chart[\u536f\u65f6-2001-05-23] PASSED
tests/test_birth_view.py::test_calendar_and_hour_boundaries_preserve_existing_chart[\u8fb0\u65f6-1900-01-01] PASSED
tests/test_birth_view.py::test_calendar_and_hour_boundaries_preserve_existing_chart[\u8fb0\u65f6-2000-02-04] PASSED
tests/test_birth_view.py::test_calendar_and_hour_boundaries_preserve_existing_chart[\u8fb0\u65f6-2000-02-05] PASSED
tests/test_birth_view.py::test_calendar_and_hour_boundaries_preserve_existing_chart[\u8fb0\u65f6-2001-05-23] PASSED
tests/test_birth_view.py::test_calendar_and_hour_boundaries_preserve_existing_chart[\u5df3\u65f6-1900-01-01] PASSED
tests/test_birth_view.py::test_calendar_and_hour_boundaries_preserve_existing_chart[\u5df3\u65f6-2000-02-04] PASSED
tests/test_birth_view.py::test_calendar_and_hour_boundaries_preserve_existing_chart[\u5df3\u65f6-2000-02-05] PASSED
tests/test_birth_view.py::test_calendar_and_hour_boundaries_preserve_existing_chart[\u5df3\u65f6-2001-05-23] PASSED
tests/test_birth_view.py::test_calendar_and_hour_boundaries_preserve_existing_chart[\u5348\u65f6-1900-01-01] PASSED
tests/test_birth_view.py::test_calendar_and_hour_boundaries_preserve_existing_chart[\u5348\u65f6-2000-02-04] PASSED
tests/test_birth_view.py::test_calendar_and_hour_boundaries_preserve_existing_chart[\u5348\u65f6-2000-02-05] PASSED
tests/test_birth_view.py::test_calendar_and_hour_boundaries_preserve_existing_chart[\u5348\u65f6-2001-05-23] PASSED
tests/test_birth_view.py::test_calendar_and_hour_boundaries_preserve_existing_chart[\u672a\u65f6-1900-01-01] PASSED
tests/test_birth_view.py::test_calendar_and_hour_boundaries_preserve_existing_chart[\u672a\u65f6-2000-02-04] PASSED
tests/test_birth_view.py::test_calendar_and_hour_boundaries_preserve_existing_chart[\u672a\u65f6-2000-02-05] PASSED
tests/test_birth_view.py::test_calendar_and_hour_boundaries_preserve_existing_chart[\u672a\u65f6-2001-05-23] PASSED
tests/test_birth_view.py::test_calendar_and_hour_boundaries_preserve_existing_chart[\u7533\u65f6-1900-01-01] PASSED
tests/test_birth_view.py::test_calendar_and_hour_boundaries_preserve_existing_chart[\u7533\u65f6-2000-02-04] PASSED
tests/test_birth_view.py::test_calendar_and_hour_boundaries_preserve_existing_chart[\u7533\u65f6-2000-02-05] PASSED
tests/test_birth_view.py::test_calendar_and_hour_boundaries_preserve_existing_chart[\u7533\u65f6-2001-05-23] PASSED
tests/test_birth_view.py::test_calendar_and_hour_boundaries_preserve_existing_chart[\u9149\u65f6-1900-01-01] PASSED
tests/test_birth_view.py::test_calendar_and_hour_boundaries_preserve_existing_chart[\u9149\u65f6-2000-02-04] PASSED
tests/test_birth_view.py::test_calendar_and_hour_boundaries_preserve_existing_chart[\u9149\u65f6-2000-02-05] PASSED
tests/test_birth_view.py::test_calendar_and_hour_boundaries_preserve_existing_chart[\u9149\u65f6-2001-05-23] PASSED
tests/test_birth_view.py::test_calendar_and_hour_boundaries_preserve_existing_chart[\u620c\u65f6-1900-01-01] PASSED
tests/test_birth_view.py::test_calendar_and_hour_boundaries_preserve_existing_chart[\u620c\u65f6-2000-02-04] PASSED
tests/test_birth_view.py::test_calendar_and_hour_boundaries_preserve_existing_chart[\u620c\u65f6-2000-02-05] PASSED
tests/test_birth_view.py::test_calendar_and_hour_boundaries_preserve_existing_chart[\u620c\u65f6-2001-05-23] PASSED
tests/test_birth_view.py::test_calendar_and_hour_boundaries_preserve_existing_chart[\u4ea5\u65f6-1900-01-01] PASSED
tests/test_birth_view.py::test_calendar_and_hour_boundaries_preserve_existing_chart[\u4ea5\u65f6-2000-02-04] PASSED
tests/test_birth_view.py::test_calendar_and_hour_boundaries_preserve_existing_chart[\u4ea5\u65f6-2000-02-05] PASSED
tests/test_birth_view.py::test_calendar_and_hour_boundaries_preserve_existing_chart[\u4ea5\u65f6-2001-05-23] PASSED
tests/test_birth_view.py::test_legacy_read_uses_saved_parameters_without_writes_or_recompilation PASSED
tests/test_birth_view.py::test_profiles_are_deterministic_and_differ_across_births PASSED
tests/test_contracts.py::test_state_clamp_bounds PASSED
tests/test_contracts.py::test_state_energy_band PASSED
tests/test_contracts.py::test_utterance_strip_tags_removes_inline PASSED
tests/test_contracts.py::test_utterance_tag_density PASSED
tests/test_contracts.py::test_capabilities_tag_support PASSED
tests/test_contracts.py::test_capabilities_can PASSED
tests/test_contracts.py::test_degradation_readable PASSED
tests/test_contracts.py::test_paralinguistics_distress PASSED
tests/test_contracts.py::test_percept_factories PASSED
tests/test_contracts.py::test_expression_from_state PASSED
tests/test_mood.py::test_decay_moves_toward_baseline PASSED
tests/test_mood.py::test_negative_bias_slower_recovery PASSED
tests/test_mood.py::test_decay_is_monotonic_toward_baseline PASSED
tests/test_mood.py::test_impulse_scales_with_sensitivity PASSED
tests/test_mood.py::test_impulse_direction PASSED
tests/test_mood.py::test_step_clamps_and_advances_time PASSED
tests/test_mood.py::test_step_no_impulse_returns_valid_state PASSED
tests/test_mood.py::test_mood_word_bands PASSED
tests/test_mood.py::test_numbing_kicks_in_after_threshold PASSED
tests/test_mood.py::test_numbing_resets_on_positive PASSED
tests/test_projection.py::test_known_event_projects PASSED
tests/test_projection.py::test_unknown_event_falls_back_and_counts PASSED
tests/test_projection.py::test_register_fills_gap PASSED
tests/test_projection.py::test_custom_table_overrides PASSED
tests/test_projection.py::test_no_secrets_leak_into_projection PASSED
tests/test_projection.py::test_absence_rule_detects_forbidden_patterns PASSED
tests/test_projection.py::test_all_default_projections_are_nonempty PASSED
tests/test_providers.py::test_registry_unknown_provider_raises PASSED
tests/test_providers.py::test_bootstrap_registers_builtins PASSED
tests/test_providers.py::test_plan_keeps_tags_when_supported PASSED
tests/test_providers.py::test_plan_reports_missing_paralinguistics PASSED
tests/test_providers.py::test_plan_partial_tag_support PASSED
tests/test_providers.py::test_echo_llm_streams_and_closes PASSED
tests/test_providers.py::test_echo_llm_complete PASSED
tests/test_providers.py::test_scripted_asr_emits_partial_then_final PASSED
tests/test_providers.py::test_asr_capabilities_claim_partial PASSED
tests/test_providers.py::test_turn_waits_on_hesitation PASSED
tests/test_providers.py::test_turn_ends_on_sentence_punctuation PASSED
tests/test_providers.py::test_turn_waits_when_too_short_silence PASSED
tests/test_providers.py::test_provider_repr_contains_caps PASSED
tests/test_r2.py::test_additive_migration_preserves_populated_old_database PASSED
tests/test_r2.py::test_actual_r1_schema_upgrade_and_repeat PASSED
tests/test_r2.py::test_new_persona_and_relation_do_not_mutate_any_layer PASSED
tests/test_r2.py::test_old_profile_never_auto_backfilled_and_explicit_backfill_is_honest[11-1] PASSED
tests/test_r2.py::test_old_profile_never_auto_backfilled_and_explicit_backfill_is_honest[12-0] PASSED
tests/test_r2.py::test_generation_requests_carry_voice_and_current_world_without_rewriting_output PASSED
tests/test_r2.py::test_failed_persona_retry_has_no_template_or_half_seeds PASSED
tests/test_r2.py::test_disclosure_requires_receipt_and_judgment_in_either_order[True] PASSED
tests/test_r2.py::test_disclosure_requires_receipt_and_judgment_in_either_order[False] PASSED
tests/test_r2.py::test_forged_receipts_never_publish[token-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx] PASSED
tests/test_r2.py::test_forged_receipts_never_publish[epoch-987] PASSED
tests/test_r2.py::test_forged_receipts_never_publish[message_id-987] PASSED
tests/test_r2.py::test_forged_receipts_never_publish[turn_id-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa] PASSED
tests/test_r2.py::test_forged_receipts_never_publish[text_hash-0000000000000000000000000000000000000000000000000000000000000000] PASSED
tests/test_r2.py::test_invalid_or_non_narrative_judgments_fail_closed[unknown] PASSED
tests/test_r2.py::test_invalid_or_non_narrative_judgments_fail_closed[duplicate] PASSED
tests/test_r2.py::test_invalid_or_non_narrative_judgments_fail_closed[bad_evidence] PASSED
tests/test_r2.py::test_invalid_or_non_narrative_judgments_fail_closed[word_only] PASSED
tests/test_r2.py::test_invalid_or_non_narrative_judgments_fail_closed[error] PASSED
tests/test_r2.py::test_failed_and_incomplete_turn_has_no_receipt_or_disclosure[error] PASSED
tests/test_r2.py::test_failed_and_incomplete_turn_has_no_receipt_or_disclosure[truncated] PASSED
tests/test_r2.py::test_failed_and_incomplete_turn_has_no_receipt_or_disclosure[length] PASSED
tests/test_r2.py::test_restart_and_replay_preserve_legal_receipt_without_reissuing_token[True] PASSED
tests/test_r2.py::test_restart_and_replay_preserve_legal_receipt_without_reissuing_token[False] PASSED
tests/test_r2.py::test_expired_and_interrupted_judgment_never_publish PASSED
tests/test_r2.py::test_hidden_unknown_and_forged_ids_have_identical_404[1] PASSED
tests/test_r2.py::test_hidden_unknown_and_forged_ids_have_identical_404[2] PASSED
tests/test_r2.py::test_hidden_unknown_and_forged_ids_have_identical_404[999999] PASSED
tests/test_r2.py::test_hidden_unknown_and_forged_ids_have_identical_404[fake] PASSED
tests/test_r2.py::test_hidden_unknown_and_forged_ids_have_identical_404[-1] PASSED
tests/test_r2.py::test_hidden_unknown_and_forged_ids_have_identical_404[0] PASSED
tests/test_r2.py::test_hidden_unknown_and_forged_ids_have_identical_404[999999999999999999999999999999] PASSED
tests/test_r2.py::test_hidden_unknown_and_forged_ids_have_identical_404[1.0] PASSED
tests/test_r2.py::test_pagination_is_over_allowed_set_and_growth_is_guarded PASSED
tests/test_r2.py::test_schedule_concurrency_restart_downtime_and_timezone PASSED
tests/test_r2.py::test_abandoned_claim_is_not_stolen_or_regenerated PASSED
tests/test_r2.py::test_failures_pause_durably_without_template PASSED
tests/test_r2.py::test_budget_warning_stop_and_restart_cannot_reset_usage PASSED
tests/test_r2.py::test_growth_only_from_verified_sources_and_no_private_candidates PASSED
tests/test_r2.py::test_persona_concurrent_claim_and_life_cancel_have_no_orphans PASSED
tests/test_r2.py::test_real_loopback_disconnect_never_creates_a_receipt PASSED
tests/test_r2.py::test_receipt_is_bound_to_an_entire_successful_turn[companion-cancelled] PASSED
tests/test_r2.py::test_receipt_is_bound_to_an_entire_successful_turn[companion-failed] PASSED
tests/test_r2.py::test_receipt_is_bound_to_an_entire_successful_turn[user-failed] PASSED
tests/test_r2.py::test_receipt_is_bound_to_an_entire_successful_turn[user-pending] PASSED
tests/test_r2.py::test_told_and_log_are_atomic_under_write_failure PASSED
tests/test_r2.py::test_persona_layers_roll_back_together_on_seed_write_failure PASSED
tests/test_r2.py::test_lifespan_cancels_owned_generation_and_joins_task PASSED
tests/test_r2.py::test_separate_sqlite_connections_cannot_claim_same_slot PASSED
tests/test_r2.py::test_server_loop_advances_with_no_browser_requests PASSED
tests/test_r2.py::test_client_cannot_choose_public_events_and_message_refs_are_trimmed PASSED
tests/test_r2_model_smoke.py::test_smoke_evidence_preserves_partial_failure_and_caps_all_attempts PASSED
tests/test_r3.py::test_chinese_probe_and_legacy_tokenizer SQLite 3.53.1: trigram short LIKE rows=1; short MATCH=0
PASSED
tests/test_r3.py::test_untrusted_match_syntax_is_only_data[\u96be\u8fc7"] PASSED
tests/test_r3.py::test_untrusted_match_syntax_is_only_data[a OR b] PASSED
tests/test_r3.py::test_untrusted_match_syntax_is_only_data[NEAR(a b)] PASSED
tests/test_r3.py::test_untrusted_match_syntax_is_only_data[rain*] PASSED
tests/test_r3.py::test_untrusted_match_syntax_is_only_data["unclosed] PASSED
tests/test_r3.py::test_untrusted_match_syntax_is_only_data[a-b] PASSED
tests/test_r3.py::test_untrusted_match_syntax_is_only_data[\u96e8\u58f0" OR 1=1 --] PASSED
tests/test_r3.py::test_untrusted_match_syntax_is_only_data[\x00] PASSED
tests/test_r3.py::test_untrusted_match_syntax_is_only_data[] PASSED
tests/test_r3.py::test_untrusted_match_syntax_is_only_data[***] PASSED
tests/test_r3.py::test_untrusted_match_syntax_is_only_data["\u676d\u5dde\u7684\u96e8"] PASSED
tests/test_r3.py::test_search_topk_floor_exclusion_noise_budget_and_logs PASSED
tests/test_r3.py::test_jobs_retries_recovery_dual_indexes_and_clock PASSED
tests/test_r3.py::test_cancelled_worker_restart_lease_and_no_duplicate_claim PASSED
tests/test_r3.py::test_success_replay_restart_and_transaction_rollback PASSED
tests/test_r3.py::test_failed_turn_has_no_raw_or_job[error] PASSED
tests/test_r3.py::test_failed_turn_has_no_raw_or_job[truncated] PASSED
tests/test_r3.py::test_disconnect_and_explicit_cancel_never_create_memory[False] PASSED
tests/test_r3.py::test_disconnect_and_explicit_cancel_never_create_memory[True] PASSED
tests/test_r3.py::test_private_companion_entire_memory_hidden_at_every_stage[unacknowledged] PASSED
tests/test_r3.py::test_private_companion_entire_memory_hidden_at_every_stage[unjudged] PASSED
tests/test_r3.py::test_private_companion_entire_memory_hidden_at_every_stage[private_candidate] PASSED
tests/test_r3.py::test_private_companion_entire_memory_hidden_at_every_stage[unknown] PASSED
tests/test_r3.py::test_memories_dto_pagination_visibility_epoch_and_source_links PASSED
tests/test_r3.py::test_real_chat_retrieval_excludes_twenty_turns_and_preserves_birth PASSED
tests/test_r3.py::test_startup_factory_clock_precedes_recovery PASSED
tests/test_r3.py::test_populated_migration_idempotence_and_old_code_rollback PASSED
tests/test_r3.py::test_three_endpoint_bytes_equal_product_baseline /home/xiaomo/multica_workspaces/hello-af23464d222e/hel-829-8ee8ba59fefd/workdir/CyberGril/.venv312/lib/python3.12/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
/home/xiaomo/multica_workspaces/hello-af23464d222e/hel-829-8ee8ba59fefd/workdir/CyberGril/.venv312/lib/python3.12/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
c285a0f == current /api/life: sha256=aef4a4018853b3bb48d9e17297b75485debd828c411129d1dc83e233645a0913
c285a0f == current /api/messages: sha256=949804e8f226fbebc83a6fd4d6a798657cde31787c033b74a42cbd494cbdad06
c285a0f == current /api/persona: sha256=47e925640ccc01cc42e7c38795bbbeadca183eccb852eae8014686417115a958
PASSED
tests/test_r3.py::test_direct_record_idempotence_and_unique_role PASSED
tests/test_r3.py::test_memory_budget_is_durable_and_hard_stop_makes_no_call PASSED
tests/test_router.py::test_heartbeat_and_rules_never_use_model[tick] PASSED
tests/test_router.py::test_heartbeat_and_rules_never_use_model[filler] PASSED
tests/test_router.py::test_heartbeat_and_rules_never_use_model[reach_out] PASSED
tests/test_router.py::test_heartbeat_and_rules_never_use_model[avatar_drive] PASSED
tests/test_router.py::test_dialogue_main_uses_high PASSED
tests/test_router.py::test_background_tasks_use_low PASSED
tests/test_router.py::test_is_model_scene_helper PASSED
tests/test_router.py::test_budget_tight_drops_to_floor PASSED
tests/test_router.py::test_dialogue_floor_is_low_not_none PASSED
tests/test_router.py::test_crisis_never_downgrades PASSED
tests/test_router.py::test_never_none_scenes_are_declared PASSED
tests/test_router.py::test_estimated_tokens_downgrades_one_step PASSED
tests/test_router.py::test_missing_tier_falls_through PASSED
tests/test_router.py::test_budget_records_by_scene PASSED
tests/test_router.py::test_budget_usage_dict PASSED
tests/test_router.py::test_budget_ratio_and_remaining PASSED
tests/test_router.py::test_budget_warning_threshold PASSED
tests/test_router.py::test_budget_summary_readable PASSED
tests/test_router.py::test_context_budget_decreases_with_tier PASSED
tests/test_router.py::test_routing_decision_str PASSED
tests/test_store.py::test_schema_initialises PASSED
tests/test_store.py::test_save_and_read_state PASSED
tests/test_store.py::test_add_episodic_and_fts PASSED
tests/test_store.py::test_decay_never_reaches_zero PASSED
tests/test_store.py::test_high_salience_decays_slower PASSED
tests/test_store.py::test_reinforce_raises_accessibility PASSED
tests/test_store.py::test_dyad_persistence PASSED
tests/test_store.py::test_projection_gap_recorded PASSED
=============================== warnings summary ===============================
../../../hel-829-8ee8ba59fefd/workdir/CyberGril/.venv312/lib/python3.12/site-packages/fastapi/testclient.py:1
/home/xiaomo/multica_workspaces/hello-af23464d222e/hel-829-8ee8ba59fefd/workdir/CyberGril/.venv312/lib/python3.12/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
-- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html
======================== 225 passed, 1 warning in 9.72s ========================