============================= test session starts =============================
platform win32 -- Python 3.13.12, pytest-9.0.3, pluggy-1.6.0 -- C:\Users\simon\.workbuddy\binaries\python\versions\3.13.12\python.exe
cachedir: .pytest_cache
rootdir: C:\Users\simon\wecom_it_smart_desk\backend
configfile: pytest.ini
plugins: anyio-4.13.0, asyncio-1.4.0
asyncio: mode=Mode.AUTO, debug=False, asyncio_default_fixture_loop_scope=None, asyncio_default_test_loop_scope=function
collecting ... collected 49 items

tests/test_nontext_message.py::TestGetNonTextDisplay::test_image_display PASSED [  2%]
tests/test_nontext_message.py::TestGetNonTextDisplay::test_voice_display PASSED [  4%]
tests/test_nontext_message.py::TestGetNonTextDisplay::test_video_display PASSED [  6%]
tests/test_nontext_message.py::TestGetNonTextDisplay::test_location_display PASSED [  8%]
tests/test_nontext_message.py::TestGetNonTextDisplay::test_file_display_with_name PASSED [ 10%]
tests/test_nontext_message.py::TestGetNonTextDisplay::test_file_display_without_name PASSED [ 12%]
tests/test_nontext_message.py::TestGetNonTextDisplay::test_unknown_type_display PASSED [ 14%]
tests/test_nontext_message.py::TestGetNonTextReply::test_image_reply_suggests_description PASSED [ 16%]
tests/test_nontext_message.py::TestGetNonTextReply::test_voice_reply_says_unsupported PASSED [ 18%]
tests/test_nontext_message.py::TestGetNonTextReply::test_video_reply_says_unsupported PASSED [ 20%]
tests/test_nontext_message.py::TestGetNonTextReply::test_file_reply_says_unsupported PASSED [ 22%]
tests/test_nontext_message.py::TestGetNonTextReply::test_location_reply_says_unsupported PASSED [ 24%]
tests/test_nontext_message.py::TestGetNonTextReply::test_unknown_type_fallback_reply PASSED [ 26%]
tests/test_nontext_message.py::TestHandleNonTextMessage::test_image_message_storage_and_reply PASSED [ 28%]
tests/test_nontext_message.py::TestHandleNonTextMessage::test_voice_message_storage_and_reply PASSED [ 30%]
tests/test_nontext_message.py::TestHandleNonTextMessage::test_video_message_storage_and_reply PASSED [ 32%]
tests/test_nontext_message.py::TestHandleNonTextMessage::test_file_message_storage_with_metadata PASSED [ 34%]
tests/test_nontext_message.py::TestHandleNonTextMessage::test_file_message_without_name PASSED [ 36%]
tests/test_nontext_message.py::TestHandleNonTextMessage::test_location_message_storage PASSED [ 38%]
tests/test_nontext_message.py::TestNonTextDoesNotTriggerAI::test_non_text_does_not_change_status PASSED [ 40%]
tests/test_nontext_message.py::TestNonTextDoesNotTriggerAI::test_non_text_does_not_call_ai_handler PASSED [ 42%]
tests/test_nontext_message.py::TestNonTextDoesNotTriggerAI::test_non_text_reuses_existing_conversation PASSED [ 44%]
tests/test_nontext_message.py::TestTextMessageUnaffected::test_text_message_routes_normally PASSED [ 46%]
tests/test_nontext_message.py::TestTextMessageUnaffected::test_text_message_with_hand_raise_still_works PASSED [ 48%]
tests/test_nontext_message.py::TestTextMessageUnaffected::test_text_message_creates_new_conversation PASSED [ 51%]
tests/test_nontext_message.py::TestTextMessageUnaffected::test_text_message_sets_correct_status PASSED [ 53%]
tests/test_nontext_message.py::TestWebSocketBroadcastFormat::test_image_broadcast_contains_media_fields PASSED [ 55%]
tests/test_nontext_message.py::TestWebSocketBroadcastFormat::test_file_broadcast_contains_file_fields PASSED [ 57%]
tests/test_nontext_message.py::TestWebSocketBroadcastFormat::test_text_broadcast_does_not_contain_media_fields PASSED [ 59%]
tests/test_nontext_message.py::TestWebSocketBroadcastFormat::test_broadcast_failure_does_not_block PASSED [ 61%]
tests/test_nontext_message.py::TestWecomCallbackFieldExtraction::test_image_fields_mapped_correctly PASSED [ 63%]
tests/test_nontext_message.py::TestWecomCallbackFieldExtraction::test_voice_fields_mapped_correctly PASSED [ 65%]
tests/test_nontext_message.py::TestWecomCallbackFieldExtraction::test_video_fields_mapped_correctly PASSED [ 67%]
tests/test_nontext_message.py::TestWecomCallbackFieldExtraction::test_file_fields_mapped_correctly PASSED [ 69%]
tests/test_nontext_message.py::TestWecomCallbackFieldExtraction::test_location_fields_mapped_correctly PASSED [ 71%]
tests/test_nontext_message.py::TestWecomCallbackFieldExtraction::test_text_message_passes_through PASSED [ 73%]
tests/test_nontext_message.py::TestWecomCallbackFieldExtraction::test_empty_media_id_maps_to_none PASSED [ 75%]
tests/test_nontext_message.py::TestWecomCallbackFieldExtraction::test_empty_file_size_not_converted PASSED [ 77%]
tests/test_nontext_message.py::TestWecomCallbackFieldExtraction::test_file_size_converts_to_int PASSED [ 79%]
tests/test_nontext_message.py::TestFrontendRenderingLogic::test_text_msg_type_renders_text PASSED [ 81%]
tests/test_nontext_message.py::TestFrontendRenderingLogic::test_non_text_msg_type_renders_media_card PASSED [ 83%]
tests/test_nontext_message.py::TestFrontendRenderingLogic::test_media_icons_match_expected PASSED [ 85%]
tests/test_nontext_message.py::TestFrontendRenderingLogic::test_media_type_labels_match_expected PASSED [ 87%]
tests/test_nontext_message.py::TestFrontendRenderingLogic::test_format_file_size_correct PASSED [ 89%]
tests/test_nontext_message.py::TestFrontendRenderingLogic::test_media_card_template_shows_file_info PASSED [ 91%]
tests/test_nontext_message.py::TestFrontendRenderingLogic::test_sender_type_not_affected PASSED [ 93%]
tests/test_nontext_message.py::TestFrontendRenderingLogic::test_unknown_msg_type_fallback_icon PASSED [ 95%]
tests/test_nontext_message.py::TestFrontendRenderingLogic::test_unknown_msg_type_fallback_label PASSED [ 97%]
tests/test_nontext_message.py::TestFrontendRenderingLogic::test_message_interface_has_media_fields PASSED [100%]

============================= 49 passed in 0.34s ==============================
