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('appliquerRegle respecte le plancher à 0', () async { final childId = await db.insertChild( prenom: 'Test', couleur: '#6C63FF', ); final rules = await db.select(db.regles).get(); final positiveRule = rules.firstWhere((r) => r.points == 1); final negativeRule = rules.firstWhere((r) => r.points == -2); await db.applyRule(childId, positiveRule.id); // Score = 1, puis règle -2 → score 0, delta réel -1 await db.applyRule(childId, negativeRule.id); // Score déjà 0, règle -2 → score 0, delta réel 0 await db.applyRule(childId, negativeRule.id); final child = await (db.select(db.enfants) ..where((e) => e.id.equals(childId))) .getSingle(); expect(child.score, 0); final movements = await db.select(db.mouvements).get(); expect(movements.length, 3); expect(movements[0].delta, 1); expect(movements[1].delta, -1); expect(movements[2].delta, 0); }); test('delta enregistré est le delta réel (pas le delta théorique)', () async { final childId = await db.insertChild( prenom: 'Test', couleur: '#6C63FF', ); final rules = await db.select(db.regles).get(); final rule = rules.firstWhere((r) => r.points == -2); await db.applyRule(childId, rule.id); final movement = await db.select(db.mouvements).getSingle(); expect(movement.delta, 0); }); }