import 'package:bonpoint/data/database/app_database.dart'; import 'package:drift/native.dart'; import 'package:flutter_test/flutter_test.dart'; void main() { late AppDatabase db; setUp(() async { db = AppDatabase.forTesting(NativeDatabase.memory()); await db.importDefaultPack(); }); tearDown(() async { await db.close(); }); test('annulerMouvement inverse le delta avec plancher à 0', () async { final childId = await db.insertChild( prenom: 'Léa', couleur: '#6C63FF', ); final rules = await db.listActiveRules(); final positiveRule = rules.firstWhere((r) => r.points == 1); final negativeRule = rules.firstWhere((r) => r.points == -2); await db.applyRule(childId, positiveRule.id); await db.applyRule(childId, negativeRule.id); final movements = await db.select(db.mouvements).get(); expect(movements.length, 2); final childBefore = await (db.select(db.enfants) ..where((e) => e.id.equals(childId))) .getSingle(); expect(childBefore.score, 0); // Annuler le mouvement négatif (delta réel -1) → score remonte à 1 final negativeMovement = movements.firstWhere((m) => m.delta < 0); await db.cancelMovement(negativeMovement.id); final childAfter = await (db.select(db.enfants) ..where((e) => e.id.equals(childId))) .getSingle(); expect(childAfter.score, 1); final remaining = await db.listRecentMovements(); expect(remaining.length, 1); }); }