using PkmnLib.Dynamic.Models; using PkmnLib.Dynamic.ScriptHandling.Registry; using PkmnLib.Plugin.Gen7.Scripts.Moves; using PsychicTerrainScript = PkmnLib.Plugin.Gen7.Scripts.Terrain.PsychicTerrain; namespace PkmnLib.Plugin.Gen7.Tests.Scripts.Moves; /// /// Tests for the move script. /// Gen VII Bulbapedia behavior: "Genesis Supernova deals damage and causes the battlefield to become /// Psychic Terrain for five turns." /// public class GenesisSupernovaTests { private static (GenesisSupernova script, IExecutingMove move, IBattle battle) CreateTestSetup() { var script = new GenesisSupernova(); var move = Substitute.For(); var battle = Substitute.For(); var battleData = Substitute.For(); battleData.Battle.Returns(battle); var user = Substitute.For(); user.BattleData.Returns(battleData); move.User.Returns(user); return (script, move, battle); } /// /// Bulbapedia: Genesis Supernova "causes the battlefield to become Psychic Terrain" — the move sets /// the battle's terrain to the terrain script. /// [Test] public void OnSecondaryEffect_SetsPsychicTerrainOnBattle() { // Arrange var (script, move, battle) = CreateTestSetup(); // Act script.OnSecondaryEffect(move, Substitute.For(), 0); // Assert battle.Received(1).SetTerrain(ScriptUtils.ResolveName()); } /// /// Technical test: without battle data on the user (outside of battle) the effect does nothing and /// does not throw. /// [Test] public void OnSecondaryEffect_UserHasNoBattleData_DoesNotSetTerrain() { // Arrange var (script, move, battle) = CreateTestSetup(); move.User.BattleData.Returns((IPokemonBattleData?)null); // Act script.OnSecondaryEffect(move, Substitute.For(), 0); // Assert battle.DidNotReceiveWithAnyArgs().SetTerrain(default); } }