bonpoint/mobile/test/cancel_movement_test.dart
Julien Martin b8faf3b4df 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>
2026-06-12 12:24:42 +02:00

52 lines
1.5 KiB
Dart

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);
});
}