use crate::error::Result; use crate::query::QueryBuilder; use geoffrey_models::models::player::{Player, UserID}; impl QueryBuilder { pub fn with_name_regex(self, exp: &str) -> Result { let filter = regex::Regex::new(exp)?; Ok( self.add_query_clause(Box::new(move |_: u64, player: &Player| { filter.is_match(&player.name) })), ) } pub fn with_name(self, name: &str) -> Self { let name = name.to_lowercase(); self.add_query_clause(Box::new(move |_: u64, player: &Player| { player.name.to_lowercase() == name })) } pub fn with_user_id(self, user_id: UserID) -> Self { self.add_query_clause(Box::new(move |_: u64, player: &Player| { player.has_user_id(&user_id) })) } } #[cfg(test)] mod test { use crate::query::QueryBuilder; use crate::test::{cleanup, DB, LOCK}; use geoffrey_models::models::player::{Player, UserID}; fn setup_db() -> (Player, Player, Player) { let player1 = DB .insert(Player::new( "ZeroHD", UserID::DiscordUUID { discord_uuid: 0 }, )) .unwrap(); let player2 = DB .insert(Player::new( "Vakbezel", UserID::MinecraftUUID { mc_uuid: "0000".to_string(), }, )) .unwrap(); let player3 = DB .insert(Player::new( "Etzelia", UserID::DiscordUUID { discord_uuid: 5 }, )) .unwrap(); (player1, player2, player3) } #[test] fn test_with_name() { let _lock = LOCK.lock().unwrap(); cleanup(); let (player1, player2, player3) = setup_db(); let query: QueryBuilder = QueryBuilder::new(); let query = query.with_name("ZeroHD"); assert_eq!(DB.run_query(query).unwrap()[0].name, player1.name); let query: QueryBuilder = QueryBuilder::new(); let query = query.with_name("Vakbezel"); assert_eq!(DB.run_query(query).unwrap()[0].name, player2.name); let query: QueryBuilder = QueryBuilder::new(); let query = query.with_name("Etzelia"); assert_eq!(DB.run_query(query).unwrap()[0].name, player3.name); } #[test] fn test_with_user_id() { let _lock = LOCK.lock().unwrap(); cleanup(); let (player1, player2, player3) = setup_db(); let query: QueryBuilder = QueryBuilder::new(); let query = query.with_user_id(UserID::DiscordUUID { discord_uuid: 0 }); assert_eq!(DB.run_query(query).unwrap()[0].name, player1.name); let query: QueryBuilder = QueryBuilder::new(); let query = query.with_user_id(UserID::MinecraftUUID { mc_uuid: "0000".to_string(), }); let query = query.with_name("Vakbezel"); assert_eq!(DB.run_query(query).unwrap()[0].name, player2.name); let query: QueryBuilder = QueryBuilder::new(); let query = query.with_user_id(UserID::DiscordUUID { discord_uuid: 5 }); assert_eq!(DB.run_query(query).unwrap()[0].name, player3.name); } }