use crate::config::types::{TelegramConfig, TelegramGroupConfig};
use std::collections::HashMap;
fn cfg(allowed: &[&str], owner: &[&str], groups: &[&str]) -> TelegramConfig {
let mut g = HashMap::new();
for id in groups {
g.insert((*id).to_string(), TelegramGroupConfig::default());
}
TelegramConfig {
allowed_users: allowed.iter().map(|s| s.to_string()).collect(),
bot_owner: owner.iter().map(|s| s.to_string()).collect(),
groups: g,
..Default::default()
}
}
#[test]
fn a_configured_group_retains_history() {
let c = cfg(&["111"], &["111"], &["-100known"]);
assert!(c.retains_history("-100known", "999"));
}
#[test]
fn an_unknown_chat_retains_nothing() {
let c = cfg(&["111"], &["111"], &["-100known"]);
assert!(!c.retains_history("-100stranger", "999"));
}
#[test]
fn an_allowlisted_sender_is_kept_even_in_an_unknown_chat() {
let c = cfg(&["111", "222"], &["111"], &[]);
assert!(c.retains_history("-100stranger", "222"));
}
#[test]
fn the_owner_is_kept_even_in_an_unknown_chat() {
let c = cfg(&["111"], &["111"], &[]);
assert!(c.retains_history("-100stranger", "111"));
}
#[test]
fn a_stranger_in_an_unknown_chat_is_not_kept() {
let c = cfg(&["111"], &["111"], &[]);
assert!(!c.retains_history("-100stranger", "6784322243"));
}
#[test]
fn a_group_entry_covers_every_sender_in_it() {
let c = cfg(&["111"], &["111"], &["-100known"]);
for sender in ["222", "333", "444"] {
assert!(
c.retains_history("-100known", sender),
"{sender} is in an authorised chat"
);
}
}
#[test]
fn an_unconfigured_channel_retains_nothing() {
let c = cfg(&[], &[], &[]);
assert!(!c.retains_history("-100anything", "999"));
}
#[test]
fn a_plus_prefixed_allowlist_entry_still_matches() {
let c = cfg(&["+222"], &["111"], &[]);
assert!(c.retains_history("-100stranger", "222"));
}