#[allow(unused)] use pretty_assertions::{assert_eq, assert_ne, assert_str_eq}; use crate::{ game::{Game, GameSettings, GameState, SetupRole}, game_test::{ActionPromptTitleExt, ActionResultExt, GameExt, SettingsExt, gen_players}, message::{ host::ServerToHostMessage, night::{ActionPrompt, ActionPromptTitle, ActionResponse}, }, role::RoleTitle, }; #[test] fn previous_shapeshifter_undone_redone() { let players = gen_players(1..21); let shapeshifter_player_id = players[0].player_id; let wolf_player_id = players[1].player_id; let mut settings = GameSettings::empty(); settings.add_and_assign(SetupRole::Shapeshifter, shapeshifter_player_id); settings.add_and_assign(SetupRole::Werewolf, wolf_player_id); settings.fill_remaining_slots_with_villagers(20); let mut game = Game::new(&players, settings).unwrap(); game.r#continue().r#continue(); assert_eq!(game.next().title(), ActionPromptTitle::WolvesIntro); game.r#continue().sleep(); game.next_expect_day(); game.execute().title().wolf_pack_kill(); let ss_target = game.living_villager(); game.mark(ss_target.character_id()); game.r#continue().r#continue(); game.next().title().shapeshifter(); game.response(ActionResponse::Shapeshift).r#continue(); assert_eq!( game.next(), ActionPrompt::RoleChange { character_id: ss_target.identity(), new_role: RoleTitle::Werewolf } ); match game.game_state_mut() { GameState::Night { night } => night.previous_state().unwrap(), GameState::Day { .. } => unreachable!(), } assert_eq!( game.get_state(), ServerToHostMessage::ActionPrompt(ActionPrompt::Shapeshifter { character_id: game .character_by_player_id(shapeshifter_player_id) .identity() }) ); game.response(ActionResponse::Shapeshift).r#continue(); assert_eq!( game.next(), ActionPrompt::RoleChange { character_id: ss_target.identity(), new_role: RoleTitle::Werewolf } ); game.r#continue().sleep(); game.next_expect_day(); } #[test] fn previous_shapeshifter_undone_and_changed_to_no() { let players = gen_players(1..21); let shapeshifter_player_id = players[0].player_id; let wolf_player_id = players[1].player_id; let mut settings = GameSettings::empty(); settings.add_and_assign(SetupRole::Shapeshifter, shapeshifter_player_id); settings.add_and_assign(SetupRole::Werewolf, wolf_player_id); settings.fill_remaining_slots_with_villagers(20); let mut game = Game::new(&players, settings).unwrap(); game.r#continue().r#continue(); assert_eq!(game.next().title(), ActionPromptTitle::WolvesIntro); game.r#continue().sleep(); game.next_expect_day(); game.execute().title().wolf_pack_kill(); let ss_target = game.living_villager(); game.mark(ss_target.character_id()); game.r#continue().r#continue(); game.next().title().shapeshifter(); game.response(ActionResponse::Shapeshift).r#continue(); assert_eq!( game.next(), ActionPrompt::RoleChange { character_id: ss_target.identity(), new_role: RoleTitle::Werewolf } ); match game.game_state_mut() { GameState::Night { night } => night.previous_state().unwrap(), GameState::Day { .. } => unreachable!(), } assert_eq!( game.get_state(), ServerToHostMessage::ActionPrompt(ActionPrompt::Shapeshifter { character_id: game .character_by_player_id(shapeshifter_player_id) .identity() }) ); game.r#continue().sleep(); game.next_expect_day(); assert_eq!( game.character_by_player_id(ss_target.player_id()) .role_changes(), &[] ); }