2024-10-01 21:06:54 +03:00
use mxlink ::matrix_sdk ::ruma ::OwnedUserId ;
2024-09-12 13:44:06 +03:00
use crate ::utils ::status ::create_error_message_text ;
use crate ::utils ::text_to_speech ::create_transcribed_message_text ;
use super ::* ;
#[ test ]
fn test_messages_by_the_bot_are_identified_correctly ( ) {
2024-10-01 21:06:54 +03:00
let bot_user_id =
OwnedUserId ::try_from ( " @bot:example.com " ) . expect ( " Failed to parse bot user ID " ) ;
2024-09-12 13:44:06 +03:00
let matrix_message = super ::super ::matrix ::MatrixMessage {
sender_id : bot_user_id . to_owned ( ) ,
2025-05-10 09:18:01 +03:00
content : super ::super ::matrix ::MatrixMessageContent ::Text ( " Hello! " . to_owned ( ) ) ,
2024-10-01 21:06:54 +03:00
mentioned_users : vec ! [ ] ,
2024-10-03 11:48:14 +03:00
timestamp : chrono ::Utc ::now ( ) ,
2024-09-12 13:44:06 +03:00
} ;
2024-10-01 21:06:54 +03:00
let llm_message = convert_matrix_message_to_llm_message ( & matrix_message , & bot_user_id ) . unwrap ( ) ;
2024-09-12 13:44:06 +03:00
assert_eq! ( llm_message . author , Author ::Assistant ) ;
2025-05-10 11:47:50 +03:00
assert_eq! (
llm_message . content ,
MessageContent ::Text ( " Hello! " . to_string ( ) )
) ;
2024-09-12 13:44:06 +03:00
}
#[ test ]
2025-05-10 11:47:50 +03:00
fn test_notice_messages_by_bot_with_speech_to_text_prefix_are_cleaned_up_and_considered_sent_by_user ( )
{
2024-10-01 21:06:54 +03:00
let bot_user_id =
OwnedUserId ::try_from ( " @bot:example.com " ) . expect ( " Failed to parse bot user ID " ) ;
2024-09-12 13:44:06 +03:00
let source_message_text = " Hello! " ;
let message_text = create_transcribed_message_text ( source_message_text ) ;
assert_ne! ( source_message_text , message_text ) ;
let matrix_message = super ::super ::matrix ::MatrixMessage {
sender_id : bot_user_id . to_owned ( ) ,
2025-05-10 09:18:01 +03:00
content : super ::super ::matrix ::MatrixMessageContent ::Notice ( message_text ) ,
2024-10-01 21:06:54 +03:00
mentioned_users : vec ! [ ] ,
2024-10-03 11:48:14 +03:00
timestamp : chrono ::Utc ::now ( ) ,
2024-09-12 13:44:06 +03:00
} ;
2024-10-01 21:06:54 +03:00
let llm_message = convert_matrix_message_to_llm_message ( & matrix_message , & bot_user_id ) . unwrap ( ) ;
2024-09-12 13:44:06 +03:00
assert_eq! ( llm_message . author , Author ::User ) ;
2025-05-10 11:47:50 +03:00
assert_eq! (
llm_message . content ,
MessageContent ::Text ( source_message_text . to_string ( ) )
) ;
2024-09-12 13:44:06 +03:00
}
#[ test ]
fn test_notice_error_messages_by_bot_are_ignored ( ) {
2024-10-01 21:06:54 +03:00
let bot_user_id =
OwnedUserId ::try_from ( " @bot:example.com " ) . expect ( " Failed to parse bot user ID " ) ;
2024-09-12 13:44:06 +03:00
let source_message_text = " Some error happened " ;
let message_text = create_error_message_text ( source_message_text ) ;
assert_ne! ( source_message_text , message_text ) ;
let matrix_message = super ::super ::matrix ::MatrixMessage {
sender_id : bot_user_id . to_owned ( ) ,
2025-05-10 09:18:01 +03:00
content : super ::super ::matrix ::MatrixMessageContent ::Notice ( message_text ) ,
2024-10-01 21:06:54 +03:00
mentioned_users : vec ! [ ] ,
2024-10-03 11:48:14 +03:00
timestamp : chrono ::Utc ::now ( ) ,
2024-09-12 13:44:06 +03:00
} ;
2024-10-01 21:06:54 +03:00
let llm_message = convert_matrix_message_to_llm_message ( & matrix_message , & bot_user_id ) ;
2024-09-12 13:44:06 +03:00
assert! ( llm_message . is_none ( ) ) ;
}
#[ test ]
fn test_other_notice_messages_by_the_bot_are_ignored ( ) {
// Also see `test_notice_error_messages_by_bot_are_ignored()`.
// That one passes accidentally, because we ignore all messages by the bot that are notices
// (except for speech-to-text-created transcriptions - see `test_notice_messages_by_bot_with_speech_to_text_prefix_are_cleaned_up_and_considered_sent_by_user()`).
// This test is to make sure that we don't accidentally start accepting other notice messages.
2024-10-01 21:06:54 +03:00
let bot_user_id =
OwnedUserId ::try_from ( " @bot:example.com " ) . expect ( " Failed to parse bot user ID " ) ;
2024-09-12 13:44:06 +03:00
let message_text = " Something something " ;
let matrix_message = super ::super ::matrix ::MatrixMessage {
sender_id : bot_user_id . to_owned ( ) ,
2025-05-10 09:18:01 +03:00
content : super ::super ::matrix ::MatrixMessageContent ::Notice ( message_text . to_owned ( ) ) ,
2024-10-01 21:06:54 +03:00
mentioned_users : vec ! [ ] ,
2024-10-03 11:48:14 +03:00
timestamp : chrono ::Utc ::now ( ) ,
2024-09-12 13:44:06 +03:00
} ;
2024-10-01 21:06:54 +03:00
let llm_message = convert_matrix_message_to_llm_message ( & matrix_message , & bot_user_id ) ;
2024-09-12 13:44:06 +03:00
assert! ( llm_message . is_none ( ) ) ;
}