@@ -448,3 +448,62 @@ async def test_conversation_messages_nonexistent_resources(
448448 )
449449 resp = await client .delete (f"{ delete_url } " )
450450 await assert_status (resp , status .HTTP_404_NOT_FOUND )
451+
452+
453+ ### Test with a database
454+ @pytest .mark .parametrize ("user_role" , [UserRole .USER ])
455+ async def test_conversation_messages_with_database (
456+ client : TestClient ,
457+ logged_user : UserInfoDict ,
458+ mocker : MockerFixture ,
459+ ):
460+ """Test conversation messages with direct database interaction"""
461+ # Mock the email service to verify it's called for first message
462+ mock_send_email = mocker .patch (
463+ "simcore_service_webserver.email.email_service.send_email_from_template"
464+ )
465+
466+ assert client .app
467+
468+ # Create a conversation directly via API (no mocks)
469+ base_url = client .app .router ["list_conversations" ].url_for ()
470+ body = {"name" : "Database Test Conversation" , "type" : "SUPPORT" }
471+ resp = await client .post (f"{ base_url } " , json = body )
472+ data , _ = await assert_status (resp , status .HTTP_201_CREATED )
473+ conversation_id = data ["conversationId" ]
474+
475+ # Verify the conversation was created
476+ assert conversation_id is not None
477+ assert data ["name" ] == "Database Test Conversation"
478+ assert data ["type" ] == "SUPPORT"
479+
480+ # Create a message in the conversation
481+ create_message_url = client .app .router ["create_conversation_message" ].url_for (
482+ conversation_id = conversation_id
483+ )
484+ message_body = {"content" : "Hello from database test" , "type" : "MESSAGE" }
485+ resp = await client .post (f"{ create_message_url } " , json = message_body )
486+ message_data , _ = await assert_status (resp , status .HTTP_201_CREATED )
487+
488+ # Verify the message was created
489+ assert message_data ["messageId" ] is not None
490+ assert message_data ["content" ] == "Hello from database test"
491+ assert message_data ["type" ] == "MESSAGE"
492+ assert message_data ["conversationId" ] == conversation_id
493+
494+ # Verify email was sent for first message
495+ assert mock_send_email .call_count == 1
496+
497+ # Create a second message
498+ second_message_body = {"content" : "Second message" , "type" : "MESSAGE" }
499+ resp = await client .post (f"{ create_message_url } " , json = second_message_body )
500+ second_message_data , _ = await assert_status (resp , status .HTTP_201_CREATED )
501+
502+ # Verify the second message was created
503+ assert second_message_data ["messageId" ] is not None
504+ assert second_message_data ["content" ] == "Second message"
505+ assert second_message_data ["type" ] == "MESSAGE"
506+ assert second_message_data ["conversationId" ] == conversation_id
507+
508+ # Verify email was NOT sent again for second message (still only 1 call)
509+ assert mock_send_email .call_count == 1
0 commit comments