102 lines
3.2 KiB
Rust
102 lines
3.2 KiB
Rust
use crate::error::Result;
|
|
use crate::query::QueryBuilder;
|
|
use geoffrey_models::models::player::{Player, UserID};
|
|
|
|
impl QueryBuilder<Player> {
|
|
pub fn with_name_regex(self, exp: &str) -> Result<Self> {
|
|
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<Player> = QueryBuilder::new();
|
|
let query = query.with_name("ZeroHD");
|
|
assert_eq!(DB.run_query(query).unwrap()[0].name, player1.name);
|
|
|
|
let query: QueryBuilder<Player> = QueryBuilder::new();
|
|
let query = query.with_name("Vakbezel");
|
|
assert_eq!(DB.run_query(query).unwrap()[0].name, player2.name);
|
|
|
|
let query: QueryBuilder<Player> = 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<Player> = 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<Player> = 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<Player> = QueryBuilder::new();
|
|
let query = query.with_user_id(UserID::DiscordUUID { discord_uuid: 5 });
|
|
assert_eq!(DB.run_query(query).unwrap()[0].name, player3.name);
|
|
}
|
|
}
|