game/test/battle_provider_test.dart

99 lines
3.1 KiB
Dart

import 'package:flutter_test/flutter_test.dart';
import 'package:shared_preferences/shared_preferences.dart'; // Import SharedPreferences
import 'package:game_test/providers/battle_provider.dart';
import 'package:game_test/providers/shop_provider.dart';
import 'package:game_test/game/models.dart';
import 'package:game_test/game/enums.dart';
import 'package:game_test/game/data/item_table.dart';
void main() {
group('BattleProvider Armor Reset Test', () {
late BattleProvider battleProvider;
late ShopProvider shopProvider;
setUp(() {
// Fix Binding has not yet been initialized error
TestWidgetsFlutterBinding.ensureInitialized();
// Mock SharedPreferences
SharedPreferences.setMockInitialValues({});
// Mock ItemTable data to prevent RangeError in initializeBattle
// initializeBattle accesses indices up to 5 for weapons and 3 for shields
ItemTable.weapons = List.generate(
10,
(index) => ItemTemplate(
id: "weapon_$index",
name: "Weapon $index",
description: "Test Weapon",
atkBonus: 10,
hpBonus: 0,
armorBonus: 0,
slot: EquipmentSlot.weapon,
effects: [],
price: 10,
),
);
ItemTable.shields = List.generate(
10,
(index) => ItemTemplate(
id: "shield_$index",
name: "Shield $index",
description: "Test Shield",
atkBonus: 0,
hpBonus: 0,
armorBonus: 10,
slot: EquipmentSlot.shield,
effects: [],
price: 10,
),
);
// Initialize other lists to empty to avoid null pointer if accessed loosely
ItemTable.armors = [];
ItemTable.accessories = [];
shopProvider = ShopProvider();
battleProvider = BattleProvider(shopProvider: shopProvider);
battleProvider.initializeBattle(); // Initialize player and stage 1
});
test('Armor should be reset to 0 when proceeding to next stage', () {
// 1. Setup initial state
battleProvider.player.armor = 50;
expect(
battleProvider.player.armor,
50,
reason: "Player armor should be set to 50 initially.",
);
// 2. Simulate proceeding to next stage
// Using proceedToNextStage which calls _prepareNextStage internally
battleProvider.proceedToNextStage();
// 3. Verify armor is reset
expect(battleProvider.stage, 2, reason: "Stage should advance to 2.");
expect(
battleProvider.player.armor,
0,
reason: "Player armor should be reset to 0 in the new stage.",
);
});
test('Armor should be reset to 0 when re-initializing battle', () {
// 1. Setup initial state
battleProvider.player.armor = 20;
expect(battleProvider.player.armor, 20);
// 2. Re-initialize
battleProvider.initializeBattle();
// 3. Verify armor is reset
expect(battleProvider.stage, 1);
expect(
battleProvider.player.armor,
0,
reason: "Player armor should be reset to 0 on initialization.",
);
});
});
}