- Implemented Map - Partially implemented CLI interaction with map - Added load_map test
130 lines
3.2 KiB
Rust
130 lines
3.2 KiB
Rust
use squad_quest::{SquadObject, account::Account, config::Config, map::{Map, Room}, quest::Quest};
|
|
|
|
static CONFIG_PATH: &str = "./tests/main/config.toml";
|
|
|
|
#[test]
|
|
fn load_quests() {
|
|
let config = Config::load(CONFIG_PATH.into());
|
|
let quests = config.load_quests();
|
|
|
|
assert_eq!(quests.len(), 2);
|
|
}
|
|
|
|
#[test]
|
|
fn empty_quest_is_default() {
|
|
// First loaded quest should be 0.toml, which is empty
|
|
let config = Config::load(CONFIG_PATH.into());
|
|
let mut quests = config.load_quests();
|
|
quests.sort_by(|a,b| a.id.cmp(&b.id));
|
|
let quest = quests.first().unwrap();
|
|
|
|
let default = Quest::default();
|
|
|
|
assert_eq!(*quest, default);
|
|
}
|
|
|
|
#[test]
|
|
fn quest_one() {
|
|
let config = Config::load(CONFIG_PATH.into());
|
|
let quests = config.load_quests();
|
|
let quest = quests.iter().find(|q| q.id == 1).unwrap();
|
|
|
|
let expected = Quest {
|
|
id: 1,
|
|
difficulty: squad_quest::quest::QuestDifficulty::Easy,
|
|
reward: 100,
|
|
name: "Example easy quest".to_owned(),
|
|
description: "Answer this quest without any attachments or comments".to_owned(),
|
|
answer: "Accept the answer if it has no attachments and an empty comment".to_owned(),
|
|
public: false,
|
|
available_on: None,
|
|
deadline: None
|
|
};
|
|
|
|
assert_eq!(*quest, expected);
|
|
}
|
|
|
|
#[test]
|
|
fn load_accounts() {
|
|
let config = Config::load(CONFIG_PATH.into());
|
|
let accounts = config.load_accounts();
|
|
|
|
assert_eq!(accounts.len(), 2);
|
|
}
|
|
|
|
#[test]
|
|
fn empty_account_is_default() {
|
|
let config = Config::load(CONFIG_PATH.into());
|
|
let accounts = config.load_accounts();
|
|
|
|
let default = Account::default();
|
|
|
|
let account = accounts.iter().find(|a| a.id == default.id).unwrap();
|
|
|
|
assert_eq!(*account, default);
|
|
}
|
|
|
|
#[test]
|
|
fn account_test() {
|
|
let config = Config::load(CONFIG_PATH.into());
|
|
|
|
let expected = Account {
|
|
id: "test".to_string(),
|
|
balance: 150,
|
|
location: 0,
|
|
quests_completed: vec![0],
|
|
rooms_unlocked: Vec::new()
|
|
};
|
|
|
|
let accounts = config.load_accounts();
|
|
let account = accounts.iter().find(|a| a.id == expected.id).unwrap();
|
|
|
|
assert_eq!(*account, expected);
|
|
}
|
|
|
|
#[test]
|
|
fn load_map() {
|
|
let config = Config::load(CONFIG_PATH.into());
|
|
|
|
let room0 = Room {
|
|
id: 0,
|
|
children: vec![1, 2],
|
|
value: 0,
|
|
name: "Entrance".to_string(),
|
|
description: Some("Enter the dungeon".to_string()),
|
|
};
|
|
|
|
let room1 = Room {
|
|
id: 1,
|
|
children: vec![0, 3],
|
|
value: 100,
|
|
name: "Kitchen hall".to_string(),
|
|
description: None,
|
|
};
|
|
|
|
let room2 = Room {
|
|
id: 2,
|
|
children: vec![0],
|
|
value: 250,
|
|
name: "Room".to_string(),
|
|
description: Some("Simple room with no furniture".to_string()),
|
|
};
|
|
|
|
let room3 = Room {
|
|
id: 3,
|
|
children: vec![1],
|
|
value: 175,
|
|
name: "Kitchen".to_string(),
|
|
description: Some("Knives are stored here".to_string()),
|
|
};
|
|
|
|
let expected = Map {
|
|
room: vec![room0, room1, room2, room3],
|
|
};
|
|
|
|
let map_path = config.full_map_path();
|
|
|
|
let map = Map::load(map_path).unwrap();
|
|
|
|
assert_eq!(map.room, expected.room);
|
|
}
|