diff --git a/src/test/abilities/serene_grace.test.ts b/src/test/abilities/serene_grace.test.ts index 25ffc2ed2c6..3e8ff0bbea0 100644 --- a/src/test/abilities/serene_grace.test.ts +++ b/src/test/abilities/serene_grace.test.ts @@ -11,6 +11,8 @@ import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; +import { changeTurnOrder } from "../utils/testUtils"; +import { BattlerIndex } from "#app/battle.js"; describe("Abilities - Serene Grace", () => { @@ -45,7 +47,6 @@ describe("Abilities - Serene Grace", () => { game.scene.getEnemyParty()[0].stats[Stat.SPDEF] = 10000; - game.scene.getEnemyParty()[0].stats[Stat.SPD] = 1; expect(game.scene.getParty()[0].formIndex).toBe(0); game.onNextPrompt("CommandPhase", Mode.COMMAND, () => { @@ -56,6 +57,7 @@ describe("Abilities - Serene Grace", () => { (game.scene.getCurrentPhase() as CommandPhase).handleCommand(Command.FIGHT, movePosition, false); }); + await changeTurnOrder(game, [BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.phaseInterceptor.to(MoveEffectPhase, false); // Check chance of Air Slash without Serene Grace @@ -78,7 +80,6 @@ describe("Abilities - Serene Grace", () => { ]); game.scene.getEnemyParty()[0].stats[Stat.SPDEF] = 10000; - game.scene.getEnemyParty()[0].stats[Stat.SPD] = 1; expect(game.scene.getParty()[0].formIndex).toBe(0); game.onNextPrompt("CommandPhase", Mode.COMMAND, () => { @@ -89,6 +90,7 @@ describe("Abilities - Serene Grace", () => { (game.scene.getCurrentPhase() as CommandPhase).handleCommand(Command.FIGHT, movePosition, false); }); + await changeTurnOrder(game, [BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.phaseInterceptor.to(MoveEffectPhase, false); // Check chance of Air Slash with Serene Grace diff --git a/src/test/abilities/sheer_force.test.ts b/src/test/abilities/sheer_force.test.ts index 8d315e3caad..d3e1ae904cc 100644 --- a/src/test/abilities/sheer_force.test.ts +++ b/src/test/abilities/sheer_force.test.ts @@ -11,6 +11,8 @@ import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; +import { changeTurnOrder } from "../utils/testUtils"; +import { BattlerIndex } from "#app/battle.js"; describe("Abilities - Sheer Force", () => { @@ -46,7 +48,6 @@ describe("Abilities - Sheer Force", () => { game.scene.getEnemyParty()[0].stats[Stat.SPDEF] = 10000; - game.scene.getEnemyParty()[0].stats[Stat.SPD] = 1; expect(game.scene.getParty()[0].formIndex).toBe(0); game.onNextPrompt("CommandPhase", Mode.COMMAND, () => { @@ -57,6 +58,7 @@ describe("Abilities - Sheer Force", () => { (game.scene.getCurrentPhase() as CommandPhase).handleCommand(Command.FIGHT, movePosition, false); }); + await changeTurnOrder(game, [BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.phaseInterceptor.to(MoveEffectPhase, false); const phase = game.scene.getCurrentPhase() as MoveEffectPhase; @@ -85,7 +87,6 @@ describe("Abilities - Sheer Force", () => { game.scene.getEnemyParty()[0].stats[Stat.DEF] = 10000; - game.scene.getEnemyParty()[0].stats[Stat.SPD] = 1; expect(game.scene.getParty()[0].formIndex).toBe(0); game.onNextPrompt("CommandPhase", Mode.COMMAND, () => { @@ -96,6 +97,7 @@ describe("Abilities - Sheer Force", () => { (game.scene.getCurrentPhase() as CommandPhase).handleCommand(Command.FIGHT, movePosition, false); }); + await changeTurnOrder(game, [BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.phaseInterceptor.to(MoveEffectPhase, false); const phase = game.scene.getCurrentPhase() as MoveEffectPhase; @@ -124,7 +126,6 @@ describe("Abilities - Sheer Force", () => { game.scene.getEnemyParty()[0].stats[Stat.DEF] = 10000; - game.scene.getEnemyParty()[0].stats[Stat.SPD] = 1; expect(game.scene.getParty()[0].formIndex).toBe(0); game.onNextPrompt("CommandPhase", Mode.COMMAND, () => { @@ -135,6 +136,7 @@ describe("Abilities - Sheer Force", () => { (game.scene.getCurrentPhase() as CommandPhase).handleCommand(Command.FIGHT, movePosition, false); }); + await changeTurnOrder(game, [BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.phaseInterceptor.to(MoveEffectPhase, false); const phase = game.scene.getCurrentPhase() as MoveEffectPhase; @@ -165,7 +167,6 @@ describe("Abilities - Sheer Force", () => { game.scene.getEnemyParty()[0].stats[Stat.DEF] = 10000; - game.scene.getEnemyParty()[0].stats[Stat.SPD] = 1; expect(game.scene.getParty()[0].formIndex).toBe(0); game.onNextPrompt("CommandPhase", Mode.COMMAND, () => { @@ -176,6 +177,7 @@ describe("Abilities - Sheer Force", () => { (game.scene.getCurrentPhase() as CommandPhase).handleCommand(Command.FIGHT, movePosition, false); }); + await changeTurnOrder(game, [BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.phaseInterceptor.to(MoveEffectPhase, false); const phase = game.scene.getCurrentPhase() as MoveEffectPhase; diff --git a/src/test/abilities/shield_dust.test.ts b/src/test/abilities/shield_dust.test.ts index 6050e6d4c9a..f6906cb7b85 100644 --- a/src/test/abilities/shield_dust.test.ts +++ b/src/test/abilities/shield_dust.test.ts @@ -11,6 +11,8 @@ import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; +import { BattlerIndex } from "#app/battle.js"; +import { changeTurnOrder } from "../utils/testUtils"; describe("Abilities - Shield Dust", () => { @@ -46,7 +48,6 @@ describe("Abilities - Shield Dust", () => { game.scene.getEnemyParty()[0].stats[Stat.SPDEF] = 10000; - game.scene.getEnemyParty()[0].stats[Stat.SPD] = 1; expect(game.scene.getParty()[0].formIndex).toBe(0); game.onNextPrompt("CommandPhase", Mode.COMMAND, () => { @@ -57,6 +58,7 @@ describe("Abilities - Shield Dust", () => { (game.scene.getCurrentPhase() as CommandPhase).handleCommand(Command.FIGHT, movePosition, false); }); + await changeTurnOrder(game, [BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.phaseInterceptor.to(MoveEffectPhase, false); // Shield Dust negates secondary effect diff --git a/src/test/abilities/zen_mode.test.ts b/src/test/abilities/zen_mode.test.ts index f11694b061c..01d3724825c 100644 --- a/src/test/abilities/zen_mode.test.ts +++ b/src/test/abilities/zen_mode.test.ts @@ -11,6 +11,8 @@ import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, test } from "vitest"; +import { BattlerIndex } from "#app/battle.js"; +import { changeTurnOrder } from "../utils/testUtils"; const TIMEOUT = 20 * 1000; @@ -45,7 +47,6 @@ describe("Abilities - ZEN MODE", () => { async () => { const moveToUse = Moves.SPLASH; await game.startBattle([Species.DARMANITAN]); - game.scene.getParty()[0].stats[Stat.SPD] = 1; game.scene.getParty()[0].stats[Stat.HP] = 100; game.scene.getParty()[0].hp = 100; expect(game.scene.getParty()[0].formIndex).toBe(0); @@ -57,7 +58,8 @@ describe("Abilities - ZEN MODE", () => { const movePosition = getMovePosition(game.scene, 0, moveToUse); (game.scene.getCurrentPhase() as CommandPhase).handleCommand(Command.FIGHT, movePosition, false); }); - await game.phaseInterceptor.runFrom(EnemyCommandPhase).to(DamagePhase, false); + await changeTurnOrder(game, [BattlerIndex.ENEMY, BattlerIndex.PLAYER]); + await game.phaseInterceptor.to(DamagePhase, false); // await game.phaseInterceptor.runFrom(DamagePhase).to(DamagePhase, false); const damagePhase = game.scene.getCurrentPhase() as DamagePhase; damagePhase.updateAmount(40); @@ -73,7 +75,6 @@ describe("Abilities - ZEN MODE", () => { async () => { const moveToUse = Moves.SPLASH; await game.startBattle([Species.DARMANITAN]); - game.scene.getParty()[0].stats[Stat.SPD] = 1; game.scene.getParty()[0].stats[Stat.HP] = 1000; game.scene.getParty()[0].hp = 100; expect(game.scene.getParty()[0].formIndex).toBe(0); @@ -85,7 +86,8 @@ describe("Abilities - ZEN MODE", () => { const movePosition = getMovePosition(game.scene, 0, moveToUse); (game.scene.getCurrentPhase() as CommandPhase).handleCommand(Command.FIGHT, movePosition, false); }); - await game.phaseInterceptor.runFrom(EnemyCommandPhase).to(QuietFormChangePhase); + await changeTurnOrder(game, [BattlerIndex.ENEMY, BattlerIndex.PLAYER]); + await game.phaseInterceptor.to(QuietFormChangePhase); await game.phaseInterceptor.to(TurnInitPhase, false); expect(game.scene.getParty()[0].hp).not.toBe(100); expect(game.scene.getParty()[0].formIndex).not.toBe(0); @@ -98,7 +100,6 @@ describe("Abilities - ZEN MODE", () => { async () => { const moveToUse = Moves.SPLASH; await game.startBattle([Species.DARMANITAN, Species.CHARIZARD]); - game.scene.getParty()[0].stats[Stat.SPD] = 1; game.scene.getParty()[0].stats[Stat.HP] = 1000; game.scene.getParty()[0].hp = 100; expect(game.scene.getParty()[0].formIndex).toBe(0); @@ -110,7 +111,8 @@ describe("Abilities - ZEN MODE", () => { const movePosition = getMovePosition(game.scene, 0, moveToUse); (game.scene.getCurrentPhase() as CommandPhase).handleCommand(Command.FIGHT, movePosition, false); }); - await game.phaseInterceptor.runFrom(EnemyCommandPhase).to(DamagePhase, false); + await changeTurnOrder(game, [BattlerIndex.ENEMY, BattlerIndex.PLAYER]); + await game.phaseInterceptor.to(DamagePhase, false); // await game.phaseInterceptor.runFrom(DamagePhase).to(DamagePhase, false); const damagePhase = game.scene.getCurrentPhase() as DamagePhase; damagePhase.updateAmount(80); diff --git a/src/test/items/leek.test.ts b/src/test/items/leek.test.ts index 7a2dd369e4e..8532f0df8d9 100644 --- a/src/test/items/leek.test.ts +++ b/src/test/items/leek.test.ts @@ -1,13 +1,14 @@ import { BattlerIndex } from "#app/battle"; import { CritBoosterModifier } from "#app/modifier/modifier"; import { modifierTypes } from "#app/modifier/modifier-type"; -import { MoveEffectPhase, TurnStartPhase } from "#app/phases"; +import { MoveEffectPhase } from "#app/phases"; import GameManager from "#test/utils/gameManager"; import * as Utils from "#app/utils"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; import Phase from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; +import { changeTurnOrder } from "#test/utils/testUtils"; describe("Items - Leek", () => { let phaserGame: Phaser.Game; @@ -43,9 +44,7 @@ describe("Items - Leek", () => { game.doAttack(0); - await game.phaseInterceptor.to(TurnStartPhase, false); - - vi.spyOn(game.scene.getCurrentPhase() as TurnStartPhase, "getOrder").mockReturnValue([ BattlerIndex.PLAYER, BattlerIndex.ENEMY ]); + await changeTurnOrder(game, [BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.phaseInterceptor.to(MoveEffectPhase); diff --git a/src/test/items/scope_lens.test.ts b/src/test/items/scope_lens.test.ts index 59702ee51ac..72dc838548e 100644 --- a/src/test/items/scope_lens.test.ts +++ b/src/test/items/scope_lens.test.ts @@ -1,13 +1,14 @@ import { BattlerIndex } from "#app/battle"; import { CritBoosterModifier } from "#app/modifier/modifier"; import { modifierTypes } from "#app/modifier/modifier-type"; -import { MoveEffectPhase, TurnStartPhase } from "#app/phases"; +import { MoveEffectPhase } from "#app/phases"; import GameManager from "#test/utils/gameManager"; import * as Utils from "#app/utils"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; import Phase from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; +import { changeTurnOrder } from "#test/utils/testUtils"; describe("Items - Scope Lens", () => { let phaserGame: Phaser.Game; @@ -42,10 +43,7 @@ describe("Items - Scope Lens", () => { ]); game.doAttack(0); - - await game.phaseInterceptor.to(TurnStartPhase, false); - - vi.spyOn(game.scene.getCurrentPhase() as TurnStartPhase, "getOrder").mockReturnValue([ BattlerIndex.PLAYER, BattlerIndex.ENEMY ]); + await changeTurnOrder(game, [ BattlerIndex.PLAYER, BattlerIndex.ENEMY ]); await game.phaseInterceptor.to(MoveEffectPhase); diff --git a/src/test/moves/fusion_flare_bolt.test.ts b/src/test/moves/fusion_flare_bolt.test.ts index e04d766f848..b0c374c1cd3 100644 --- a/src/test/moves/fusion_flare_bolt.test.ts +++ b/src/test/moves/fusion_flare_bolt.test.ts @@ -1,13 +1,14 @@ import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; import Phaser from "phaser"; import GameManager from "#test/utils/gameManager"; -import { MoveEffectPhase, MovePhase, MoveEndPhase, TurnStartPhase, DamagePhase } from "#app/phases"; +import { MoveEffectPhase, MovePhase, MoveEndPhase, DamagePhase } from "#app/phases"; import { getMovePosition } from "#test/utils/gameManagerUtils"; import { Stat } from "#app/data/pokemon-stat"; import { allMoves } from "#app/data/move"; import { BattlerIndex } from "#app/battle"; import { Species } from "#enums/species"; import { Moves } from "#enums/moves"; +import { changeTurnOrder } from "#test/utils/testUtils"; describe("Moves - Fusion Flare and Fusion Bolt", () => { let phaserGame: Phaser.Game; @@ -54,10 +55,8 @@ describe("Moves - Fusion Flare and Fusion Bolt", () => { game.doAttack(getMovePosition(game.scene, 0, fusionBolt.id)); game.doSelectTarget(BattlerIndex.ENEMY); - await game.phaseInterceptor.to(TurnStartPhase, false); - // Force user party to act before enemy party - vi.spyOn(game.scene.getCurrentPhase() as TurnStartPhase, "getOrder").mockReturnValue([ BattlerIndex.PLAYER, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY, BattlerIndex.ENEMY_2 ]); + await changeTurnOrder(game, [ BattlerIndex.PLAYER, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY, BattlerIndex.ENEMY_2 ]); await game.phaseInterceptor.to(MoveEffectPhase, false); expect((game.scene.getCurrentPhase() as MoveEffectPhase).move.moveId).toBe(fusionFlare.id); @@ -82,10 +81,8 @@ describe("Moves - Fusion Flare and Fusion Bolt", () => { game.doAttack(getMovePosition(game.scene, 0, fusionFlare.id)); game.doSelectTarget(BattlerIndex.ENEMY); - await game.phaseInterceptor.to(TurnStartPhase, false); - // Force user party to act before enemy party - vi.spyOn(game.scene.getCurrentPhase() as TurnStartPhase, "getOrder").mockReturnValue([ BattlerIndex.PLAYER, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY, BattlerIndex.ENEMY_2 ]); + await changeTurnOrder(game, [ BattlerIndex.PLAYER, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY, BattlerIndex.ENEMY_2 ]); await game.phaseInterceptor.to(MoveEffectPhase, false); expect((game.scene.getCurrentPhase() as MoveEffectPhase).move.moveId).toBe(fusionBolt.id); @@ -110,10 +107,8 @@ describe("Moves - Fusion Flare and Fusion Bolt", () => { game.doAttack(getMovePosition(game.scene, 0, fusionBolt.id)); game.doSelectTarget(0); - await game.phaseInterceptor.to(TurnStartPhase, false); - // Force first enemy to act (and fail) in between party - vi.spyOn(game.scene.getCurrentPhase() as TurnStartPhase, "getOrder").mockReturnValue([ BattlerIndex.PLAYER, BattlerIndex.ENEMY_2, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY ]); + await changeTurnOrder(game, [ BattlerIndex.PLAYER, BattlerIndex.ENEMY_2, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY ]); await game.phaseInterceptor.to(MoveEffectPhase, false); expect((game.scene.getCurrentPhase() as MoveEffectPhase).move.moveId).toBe(fusionFlare.id); @@ -144,10 +139,8 @@ describe("Moves - Fusion Flare and Fusion Bolt", () => { game.doAttack(getMovePosition(game.scene, 0, fusionBolt.id)); game.doSelectTarget(BattlerIndex.ENEMY); - await game.phaseInterceptor.to(TurnStartPhase, false); - // Force first enemy to act in between party - vi.spyOn(game.scene.getCurrentPhase() as TurnStartPhase, "getOrder").mockReturnValue([ BattlerIndex.PLAYER, BattlerIndex.ENEMY_2, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY ]); + await changeTurnOrder(game, [ BattlerIndex.PLAYER, BattlerIndex.ENEMY_2, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY ]); await game.phaseInterceptor.to(MoveEffectPhase, false); expect((game.scene.getCurrentPhase() as MoveEffectPhase).move.moveId).toBe(fusionFlare.id); @@ -176,10 +169,8 @@ describe("Moves - Fusion Flare and Fusion Bolt", () => { game.doAttack(getMovePosition(game.scene, 0, fusionFlare.id)); game.doSelectTarget(BattlerIndex.PLAYER); - await game.phaseInterceptor.to(TurnStartPhase, false); - // Force user party to act before enemy party - vi.spyOn(game.scene.getCurrentPhase() as TurnStartPhase, "getOrder").mockReturnValue([ BattlerIndex.PLAYER, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY, BattlerIndex.ENEMY_2 ]); + await changeTurnOrder(game, [ BattlerIndex.PLAYER, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY, BattlerIndex.ENEMY_2 ]); await game.phaseInterceptor.to(MoveEffectPhase, false); expect((game.scene.getCurrentPhase() as MoveEffectPhase).move.moveId).toBe(fusionBolt.id); @@ -230,10 +221,8 @@ describe("Moves - Fusion Flare and Fusion Bolt", () => { game.doAttack(getMovePosition(game.scene, 0, fusionBolt.id)); game.doSelectTarget(BattlerIndex.ENEMY); - await game.phaseInterceptor.to(TurnStartPhase, false); - // Force first enemy to act in between party - vi.spyOn(game.scene.getCurrentPhase() as TurnStartPhase, "getOrder").mockReturnValue([ BattlerIndex.PLAYER, BattlerIndex.ENEMY_2, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY ]); + await changeTurnOrder(game, [ BattlerIndex.PLAYER, BattlerIndex.ENEMY_2, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY ]); await game.phaseInterceptor.to(MoveEffectPhase, false); expect((game.scene.getCurrentPhase() as MoveEffectPhase).move.moveId).toBe(fusionBolt.id); @@ -294,10 +283,8 @@ describe("Moves - Fusion Flare and Fusion Bolt", () => { game.doAttack(getMovePosition(game.scene, 0, fusionBolt.id)); game.doSelectTarget(BattlerIndex.PLAYER); - await game.phaseInterceptor.to(TurnStartPhase, false); - // Force first enemy to act in between party - vi.spyOn(game.scene.getCurrentPhase() as TurnStartPhase, "getOrder").mockReturnValue([ BattlerIndex.PLAYER, BattlerIndex.ENEMY_2, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY ]); + await changeTurnOrder(game, [ BattlerIndex.PLAYER, BattlerIndex.ENEMY_2, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY ]); await game.phaseInterceptor.to(MoveEffectPhase, false); expect((game.scene.getCurrentPhase() as MoveEffectPhase).move.moveId).toBe(fusionBolt.id); diff --git a/src/test/moves/gastro_acid.test.ts b/src/test/moves/gastro_acid.test.ts index cd1f0e4ab12..c6692d3442c 100644 --- a/src/test/moves/gastro_acid.test.ts +++ b/src/test/moves/gastro_acid.test.ts @@ -1,5 +1,4 @@ import { BattlerIndex } from "#app/battle.js"; -import { Stat } from "#app/data/pokemon-stat.js"; import { Abilities } from "#app/enums/abilities.js"; import { Moves } from "#app/enums/moves.js"; import { Species } from "#app/enums/species.js"; @@ -7,7 +6,7 @@ import { MoveResult } from "#app/field/pokemon.js"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; import GameManager from "#test/utils/gameManager"; import { getMovePosition } from "#test/utils/gameManagerUtils"; -import { SPLASH_ONLY } from "#test/utils/testUtils"; +import { changeTurnOrder, SPLASH_ONLY } from "#test/utils/testUtils"; const TIMEOUT = 20 * 1000; @@ -74,11 +73,9 @@ describe("Moves - Gastro Acid", () => { await game.startBattle(); - // Force player to be slower to enable Core Enforcer to proc its suppression effect - game.scene.getPlayerPokemon().stats[Stat.SPD] = 1; - game.scene.getEnemyPokemon().stats[Stat.SPD] = 2; - game.doAttack(getMovePosition(game.scene, 0, Moves.CORE_ENFORCER)); + // Force player to be slower to enable Core Enforcer to proc its suppression effect + await changeTurnOrder(game, [BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.phaseInterceptor.to("TurnInitPhase"); diff --git a/src/test/utils/gameManager.ts b/src/test/utils/gameManager.ts index 5540295d341..842c6086058 100644 --- a/src/test/utils/gameManager.ts +++ b/src/test/utils/gameManager.ts @@ -133,7 +133,7 @@ export default class GameManager { await this.phaseInterceptor.run(EncounterPhase); if (overrides.OPP_HELD_ITEMS_OVERRIDE.length === 0) { - removeEnemyHeldItems(this.scene); + removeEnemyHeldItems(this); } } diff --git a/src/test/utils/testUtils.ts b/src/test/utils/testUtils.ts index 476775fd268..6ba46e6fc16 100644 --- a/src/test/utils/testUtils.ts +++ b/src/test/utils/testUtils.ts @@ -1,7 +1,9 @@ -import BattleScene from "#app/battle-scene.js"; import { Moves } from "#app/enums/moves.js"; import i18next, { type ParseKeys } from "i18next"; import { vi } from "vitest"; +import GameManager from "./gameManager"; +import { BattlerIndex } from "#app/battle.js"; +import { TurnStartPhase } from "#app/phases.js"; /** Ready to use array of Moves.SPLASH x4 */ export const SPLASH_ONLY = [Moves.SPLASH, Moves.SPLASH, Moves.SPLASH, Moves.SPLASH]; @@ -29,10 +31,25 @@ export function arrayOfRange(start: integer, end: integer) { /** * Removes all held items from enemy pokemon - * @param scene `game.scene` + * @param game The {@link GameManager} instance */ -export function removeEnemyHeldItems(scene: BattleScene) { - scene.clearEnemyHeldItemModifiers(); - scene.clearEnemyModifiers(); +export function removeEnemyHeldItems(game: GameManager): void { + game.scene.clearEnemyHeldItemModifiers(); + game.scene.clearEnemyModifiers(); console.log("Enemy held items removed"); } + +/** + * Used to modify the turn order. Will advance the turn to {@link TurnStartPhase} + * @param game The {@link GameManager} instance + * @param order The turn order to set + * @example + * ```ts + * await changeTurnOrder(game, [BattlerIndex.PLAYER, BattlerIndex.ENEMY, BattlerIndex.ENEMY_2, BattlerIndex.PLAYER_2]); + * ``` + */ +export async function changeTurnOrder(game: GameManager, order: BattlerIndex[]): Promise { + await game.phaseInterceptor.to(TurnStartPhase, false); + + vi.spyOn(game.scene.getCurrentPhase() as TurnStartPhase, "getOrder").mockReturnValue(order); +}