refactors claims unit tests
This commit is contained in:
@@ -15,6 +15,12 @@ pub mod models;
|
|||||||
//mod updates;
|
//mod updates;
|
||||||
mod schema;
|
mod schema;
|
||||||
|
|
||||||
|
pub use models::{
|
||||||
|
item::{Item, LootManager},
|
||||||
|
claim::{Claim, Claims},
|
||||||
|
player::{Player, Players},
|
||||||
|
};
|
||||||
|
|
||||||
/// The connection used
|
/// The connection used
|
||||||
pub type DbConnection = SqliteConnection;
|
pub type DbConnection = SqliteConnection;
|
||||||
/// A pool of connections
|
/// A pool of connections
|
||||||
@@ -226,13 +232,9 @@ impl<'q> AsAdmin<'q> {
|
|||||||
///
|
///
|
||||||
/// Takes the player name and starting wealth (in gold value).
|
/// Takes the player name and starting wealth (in gold value).
|
||||||
pub fn add_player(self, name: &str, start_wealth: f32) -> ActionResult<()> {
|
pub fn add_player(self, name: &str, start_wealth: f32) -> ActionResult<()> {
|
||||||
diesel::insert_into(schema::players::table)
|
models::player::Players(self.0)
|
||||||
.values(&models::player::NewPlayer::create(name, start_wealth))
|
.add(name, start_wealth)?;
|
||||||
.execute(self.0)
|
Ok(())
|
||||||
.map(|rows_updated| match rows_updated {
|
|
||||||
1 => (),
|
|
||||||
_ => panic!("RuntimeError: AddPlayer did not make expected changes"),
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Adds a list of items to the group loot
|
/// Adds a list of items to the group loot
|
||||||
@@ -280,8 +282,8 @@ pub fn create_pool() -> Pool {
|
|||||||
.expect("Failed to create pool.")
|
.expect("Failed to create pool.")
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(none)]
|
||||||
mod tests {
|
mod tests_old {
|
||||||
use super::*;
|
use super::*;
|
||||||
type TestConnection = DbConnection;
|
type TestConnection = DbConnection;
|
||||||
|
|
||||||
|
|||||||
@@ -37,6 +37,11 @@ pub struct Claims<'q>(pub &'q DbConnection);
|
|||||||
|
|
||||||
impl<'q> Claims<'q> {
|
impl<'q> Claims<'q> {
|
||||||
|
|
||||||
|
pub fn all(&self) -> QueryResult<Vec<Claim>> {
|
||||||
|
claims::table
|
||||||
|
.load(self.0)
|
||||||
|
}
|
||||||
|
|
||||||
/// Finds a single claim by association of player and loot ids.
|
/// Finds a single claim by association of player and loot ids.
|
||||||
pub fn find(&self, player_id: i32, loot_id: i32) -> QueryResult<Claim> {
|
pub fn find(&self, player_id: i32, loot_id: i32) -> QueryResult<Claim> {
|
||||||
claims::table
|
claims::table
|
||||||
@@ -50,6 +55,11 @@ impl<'q> Claims<'q> {
|
|||||||
// We need to validate that the claimed item exists
|
// We need to validate that the claimed item exists
|
||||||
// AND is actually owned by group (id 0)
|
// AND is actually owned by group (id 0)
|
||||||
let _item = models::item::LootManager(self.0, 0).find(loot_id)?;
|
let _item = models::item::LootManager(self.0, 0).find(loot_id)?;
|
||||||
|
// We also check if claims does not already exists
|
||||||
|
if let Ok(_) = self.find(player_id, loot_id) {
|
||||||
|
return Err(diesel::result::Error::RollbackTransaction);
|
||||||
|
}
|
||||||
|
|
||||||
let claim = NewClaim::new(player_id, loot_id);
|
let claim = NewClaim::new(player_id, loot_id);
|
||||||
diesel::insert_into(claims::table)
|
diesel::insert_into(claims::table)
|
||||||
.values(&claim)
|
.values(&claim)
|
||||||
@@ -99,3 +109,61 @@ impl NewClaim {
|
|||||||
Self { player_id, loot_id }
|
Self { player_id, loot_id }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[cfg(test)]
|
||||||
|
mod tests {
|
||||||
|
use super::*;
|
||||||
|
|
||||||
|
type TestResult = Result<(), diesel::result::Error>;
|
||||||
|
|
||||||
|
fn test_connection() -> Result<DbConnection, diesel::result::Error> {
|
||||||
|
let conn = DbConnection::establish(":memory:")
|
||||||
|
.map_err(|_| diesel::result::Error::NotFound)?;
|
||||||
|
diesel_migrations::run_pending_migrations(&conn)
|
||||||
|
.map_err(|_| diesel::result::Error::NotFound)?;
|
||||||
|
let manager = models::player::Players(&conn);
|
||||||
|
manager.add("Player1", 0.0)?;
|
||||||
|
manager.add("Player2", 0.0)?;
|
||||||
|
crate::LootManager(&conn, 0)
|
||||||
|
.add_from(&crate::Item{ id: 0, name: "Epee".to_string(), base_price: 30 })?;
|
||||||
|
crate::LootManager(&conn, 1)
|
||||||
|
.add_from(&crate::Item{ id: 0, name: "Arc".to_string(), base_price: 20 })?;
|
||||||
|
Ok(conn)
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn add_claim() -> TestResult {
|
||||||
|
let conn = test_connection()?;
|
||||||
|
Claims(&conn).add(1, 1)?;
|
||||||
|
assert_eq!(Claims(&conn).all()?.len(), 1);
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn cannot_duplicate_by_adding() -> TestResult {
|
||||||
|
let conn = test_connection()?;
|
||||||
|
Claims(&conn).add(1, 1)?;
|
||||||
|
let res = Claims(&conn).add(1, 1);
|
||||||
|
assert_eq!(res.is_err(), true);
|
||||||
|
assert_eq!(Claims(&conn).all()?.len(), 1);
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn remove_claim() -> TestResult {
|
||||||
|
let conn = test_connection()?;
|
||||||
|
let claim = Claims(&conn).add(1, 1)?;
|
||||||
|
claim.remove(&conn);
|
||||||
|
assert_eq!(Claims(&conn).all()?.len(), 0);
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn cannot_only_claim_from_group() -> TestResult {
|
||||||
|
let conn = test_connection()?;
|
||||||
|
let claim = Claims(&conn).add(1, 2);
|
||||||
|
assert_eq!(claim.is_err(), true);
|
||||||
|
assert_eq!(Claims(&conn).all()?.len(), 0);
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -22,6 +22,25 @@ pub struct Player {
|
|||||||
pub pp: i32,
|
pub pp: i32,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub struct Players<'q>(pub &'q DbConnection);
|
||||||
|
|
||||||
|
impl<'q> Players<'q> {
|
||||||
|
|
||||||
|
pub fn all(&self) -> QueryResult<Vec<Player>> {
|
||||||
|
players::table
|
||||||
|
.load(self.0)
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn add(&self, name: &str, wealth: f32) -> QueryResult<Player> {
|
||||||
|
diesel::insert_into(players::table)
|
||||||
|
.values(&NewPlayer::create(name, wealth))
|
||||||
|
.execute(self.0)?;
|
||||||
|
players::table
|
||||||
|
.order(players::dsl::id.desc())
|
||||||
|
.first(self.0)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
pub struct AsPlayer<'q>(pub &'q DbConnection, pub i32);
|
pub struct AsPlayer<'q>(pub &'q DbConnection, pub i32);
|
||||||
|
|
||||||
impl<'q> AsPlayer<'q> {
|
impl<'q> AsPlayer<'q> {
|
||||||
|
|||||||
Reference in New Issue
Block a user