game/test/consumable_test.dart

89 lines
2.5 KiB
Dart

import 'package:flutter_test/flutter_test.dart';
import 'package:game_test/game/enums.dart';
import 'package:game_test/game/models.dart';
import 'package:game_test/providers/battle_provider.dart';
import 'package:game_test/providers/shop_provider.dart';
void main() {
late BattleProvider battleProvider;
setUp(() {
battleProvider = BattleProvider(shopProvider: ShopProvider());
battleProvider.player = Character(
name: 'Warrior',
hp: 50,
maxHp: 100,
armor: 0,
atk: 10,
baseDefense: 5,
);
});
test('healing potion restores HP and is consumed', () async {
final potion = Item(
id: 'potion_heal_small',
name: 'Healing Potion',
description: 'Restores HP.',
atkBonus: 0,
hpBonus: 20,
slot: EquipmentSlot.consumable,
);
final healEvents = <HealEvent>[];
final subscription = battleProvider.healStream.listen(healEvents.add);
battleProvider.player.addToInventory(potion);
battleProvider.useConsumable(potion);
await Future<void>.delayed(Duration.zero);
expect(battleProvider.player.hp, 70);
expect(battleProvider.player.inventory, isNot(contains(potion)));
expect(healEvents.single.amount, 20);
await subscription.cancel();
});
test('armor potion grants armor and is consumed', () {
final potion = Item(
id: 'potion_armor_small',
name: 'Iron Skin Potion',
description: 'Grants armor.',
atkBonus: 0,
hpBonus: 0,
armorBonus: 10,
slot: EquipmentSlot.consumable,
);
battleProvider.player.addToInventory(potion);
battleProvider.useConsumable(potion);
expect(battleProvider.player.armor, 10);
expect(battleProvider.player.inventory, isNot(contains(potion)));
});
test('strength potion applies attack buff and is consumed', () {
final potion = Item(
id: 'potion_strength_small',
name: 'Strength Potion',
description: 'Increases attack.',
atkBonus: 0,
hpBonus: 0,
slot: EquipmentSlot.consumable,
effects: [
ItemEffect(
type: StatusEffectType.attackUp,
probability: 100,
duration: 1,
value: 5,
),
],
);
battleProvider.player.addToInventory(potion);
battleProvider.useConsumable(potion);
expect(battleProvider.player.hasStatus(StatusEffectType.attackUp), isTrue);
expect(battleProvider.player.totalAtk, 15);
expect(battleProvider.player.inventory, isNot(contains(potion)));
});
}