From 37c97c02ef8d42fc3bfb34cc8211780874d98cb0 Mon Sep 17 00:00:00 2001 From: Christopher Schmidt Date: Mon, 26 Aug 2024 11:51:44 -0400 Subject: [PATCH] Adjusts unit tests, adds one more for doubles --- src/test/moves/freezy_frost.test.ts | 115 +++++++++++++++++----------- 1 file changed, 71 insertions(+), 44 deletions(-) diff --git a/src/test/moves/freezy_frost.test.ts b/src/test/moves/freezy_frost.test.ts index 00d7104d373..81c751c3170 100644 --- a/src/test/moves/freezy_frost.test.ts +++ b/src/test/moves/freezy_frost.test.ts @@ -1,12 +1,10 @@ import { BattleStat } from "#app/data/battle-stat"; import { allMoves } from "#app/data/move"; -import { MoveEndPhase } from "#app/phases/move-end-phase"; -import { TurnInitPhase } from "#app/phases/turn-init-phase"; +import { CommandPhase } from "#app/phases/command-phase"; import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; import GameManager from "#test/utils/gameManager"; -import { SPLASH_ONLY } from "#test/utils/testUtils"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; @@ -26,57 +24,86 @@ describe("Moves - Freezy Frost", () => { beforeEach(() => { game = new GameManager(phaserGame); - game.override.battleType("single"); + game.override + .battleType("single") + .enemySpecies(Species.RATTATA) + .enemyLevel(100) + .enemyMoveset([Moves.HOWL, Moves.HOWL, Moves.HOWL, Moves.HOWL]) + .enemyAbility(Abilities.BALL_FETCH) + .startingLevel(100) + .moveset([Moves.FREEZY_FROST, Moves.HOWL, Moves.SPLASH]) + .ability(Abilities.BALL_FETCH); - game.override.enemySpecies(Species.RATTATA); - game.override.enemyLevel(100); - game.override.enemyMoveset(SPLASH_ONLY); - game.override.enemyAbility(Abilities.NONE); - - game.override.startingLevel(100); - game.override.moveset([Moves.FREEZY_FROST, Moves.SWORDS_DANCE, Moves.CHARM, Moves.SPLASH]); vi.spyOn(allMoves[Moves.FREEZY_FROST], "accuracy", "get").mockReturnValue(100); - game.override.ability(Abilities.NONE); }); - it("Uses Swords Dance to raise own ATK by 2, Charm to lower enemy ATK by 2, player uses Freezy Frost to clear all stat changes", { timeout: 10000 }, async () => { - await game.startBattle([Species.RATTATA]); - const user = game.scene.getPlayerPokemon()!; - const enemy = game.scene.getEnemyPokemon()!; - expect(user.summonData.battleStats[BattleStat.ATK]).toBe(0); - expect(enemy.summonData.battleStats[BattleStat.ATK]).toBe(0); + it( + "should clear stat changes of user and opponent", + async () => { + await game.startBattle([Species.SHUCKLE]); + const user = game.scene.getPlayerPokemon()!; + const enemy = game.scene.getEnemyPokemon()!; - game.move.select(Moves.SWORDS_DANCE); - await game.phaseInterceptor.to(TurnInitPhase); + game.move.select(Moves.HOWL); + await game.toNextTurn(); - game.move.select(Moves.CHARM); - await game.phaseInterceptor.to(TurnInitPhase); - const userAtkBefore = user.summonData.battleStats[BattleStat.ATK]; - const enemyAtkBefore = enemy.summonData.battleStats[BattleStat.ATK]; - expect(userAtkBefore).toBe(2); - expect(enemyAtkBefore).toBe(-2); + const userAtkBefore = user.summonData.battleStats[BattleStat.ATK]; + const enemyAtkBefore = enemy.summonData.battleStats[BattleStat.ATK]; + expect(userAtkBefore).toBe(1); + expect(enemyAtkBefore).toBe(1); - game.move.select(Moves.FREEZY_FROST); - await game.phaseInterceptor.to(TurnInitPhase); - expect(user.summonData.battleStats[BattleStat.ATK]).toBe(0); - expect(enemy.summonData.battleStats[BattleStat.ATK]).toBe(0); - }); + game.move.select(Moves.FREEZY_FROST); + await game.toNextTurn(); - it("Uses Swords Dance to raise own ATK by 2, Charm to lower enemy ATK by 2, enemy uses Freezy Frost to clear all stat changes", { timeout: 10000 }, async () => { - game.override.enemyMoveset([Moves.FREEZY_FROST, Moves.FREEZY_FROST, Moves.FREEZY_FROST, Moves.FREEZY_FROST]); - await game.startBattle([Species.SHUCKLE]); // Shuckle for slower Swords Dance on first turn so Freezy Frost doesn't affect it. - const user = game.scene.getPlayerPokemon()!; - expect(user.summonData.battleStats[BattleStat.ATK]).toBe(0); + expect(user.summonData.battleStats[BattleStat.ATK]).toBe(0); + expect(enemy.summonData.battleStats[BattleStat.ATK]).toBe(0); + }); - game.move.select(Moves.SWORDS_DANCE); - await game.phaseInterceptor.to(TurnInitPhase); + it( + "should clear all stat changes even when enemy uses the move", + async () => { + game.override.enemyMoveset([Moves.FREEZY_FROST, Moves.FREEZY_FROST, Moves.FREEZY_FROST, Moves.FREEZY_FROST]); + await game.startBattle([Species.SHUCKLE]); // Shuckle for slower Howl on first turn so Freezy Frost doesn't affect it. + const user = game.scene.getPlayerPokemon()!; - const userAtkBefore = user.summonData.battleStats[BattleStat.ATK]; - expect(userAtkBefore).toBe(2); + game.move.select(Moves.HOWL); + await game.toNextTurn(); - game.move.select(Moves.SPLASH); - await game.phaseInterceptor.to(MoveEndPhase); - expect(user.summonData.battleStats[BattleStat.ATK]).toBe(0); - }); + const userAtkBefore = user.summonData.battleStats[BattleStat.ATK]; + expect(userAtkBefore).toBe(1); + + game.move.select(Moves.SPLASH); + await game.toNextTurn(); + expect(user.summonData.battleStats[BattleStat.ATK]).toBe(0); + }); + + it( + "should clear all stat changes in double battle", + async () => { + game.override.battleType("double"); + await game.startBattle([Species.SHUCKLE, Species.RATTATA]); + const [leftPlayer, rightPlayer] = game.scene.getPlayerField(); + const [leftOpp, rightOpp] = game.scene.getEnemyField(); + + game.move.select(Moves.HOWL, 0); + await game.phaseInterceptor.to(CommandPhase); + game.move.select(Moves.SPLASH, 1); + await game.toNextTurn(); + + expect(leftPlayer.summonData.battleStats[BattleStat.ATK]).toBe(1); + expect(rightPlayer.summonData.battleStats[BattleStat.ATK]).toBe(1); + expect(leftOpp.summonData.battleStats[BattleStat.ATK]).toBe(2); // Both enemies use Howl + expect(rightOpp.summonData.battleStats[BattleStat.ATK]).toBe(2); + + game.move.select(Moves.FREEZY_FROST, 0, leftOpp.getBattlerIndex()); + await game.phaseInterceptor.to(CommandPhase); + game.move.select(Moves.SPLASH, 1); + await game.toNextTurn(); + + expect(leftPlayer.summonData.battleStats[BattleStat.ATK]).toBe(0); + expect(rightPlayer.summonData.battleStats[BattleStat.ATK]).toBe(0); + expect(leftOpp.summonData.battleStats[BattleStat.ATK]).toBe(0); + expect(rightOpp.summonData.battleStats[BattleStat.ATK]).toBe(0); + }); }); });