Ajoute l'espace parent : PIN, grille de règles, historique et annulation.
Phase 2 du MVP Flutter : vérification PIN locale, application des règles par famille, suivi des mouvements et correction avec plancher à 0. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -0,0 +1,51 @@
|
||||
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);
|
||||
});
|
||||
}
|
||||
Reference in New Issue
Block a user