use uuid::Uuid;
use crate::channels::telegram::state::TelegramState;
const CHAT: i64 = -1004428873948;
const TOPIC: i32 = 249;
#[tokio::test]
async fn a_topic_reaction_finds_its_own_session() {
let state = TelegramState::new();
let topic_session = Uuid::new_v4();
state
.register_session_chat(topic_session, CHAT, Some(TOPIC))
.await;
assert_eq!(
state.chat_session(CHAT, Some(TOPIC)).await,
Some(topic_session)
);
}
#[tokio::test]
async fn the_old_none_lookup_could_never_match_a_topic() {
let state = TelegramState::new();
state
.register_session_chat(Uuid::new_v4(), CHAT, Some(TOPIC))
.await;
assert_eq!(
state.chat_session(CHAT, None).await,
None,
"a topic's session is not reachable under the chat's bare key"
);
}
#[tokio::test]
async fn one_topic_never_answers_for_another() {
let state = TelegramState::new();
let a = Uuid::new_v4();
let b = Uuid::new_v4();
state.register_session_chat(a, CHAT, Some(TOPIC)).await;
state.register_session_chat(b, CHAT, Some(TOPIC + 1)).await;
assert_eq!(state.chat_session(CHAT, Some(TOPIC)).await, Some(a));
assert_eq!(state.chat_session(CHAT, Some(TOPIC + 1)).await, Some(b));
}
#[tokio::test]
async fn a_direct_chat_still_resolves_under_no_topic() {
let state = TelegramState::new();
let dm = Uuid::new_v4();
state.register_session_chat(dm, CHAT, None).await;
assert_eq!(state.chat_session(CHAT, None).await, Some(dm));
}
#[tokio::test]
async fn an_unmapped_chat_resolves_to_nothing() {
let state = TelegramState::new();
assert_eq!(state.chat_session(CHAT, Some(TOPIC)).await, None);
}
#[tokio::test]
async fn the_shared_session_is_usable_for_its_own_chat() {
let state = TelegramState::new();
let shared = Uuid::new_v4();
state.register_session_chat(shared, CHAT, None).await;
assert_eq!(state.session_chat(shared).await, Some(CHAT));
}
#[tokio::test]
async fn the_shared_session_cannot_answer_for_another_chat() {
let state = TelegramState::new();
let shared = Uuid::new_v4();
state.register_session_chat(shared, CHAT, None).await;
assert_ne!(
state.session_chat(shared).await,
Some(-100999999999),
"a session bound to one chat must not vouch for a press in another"
);
}