halkyon/halkyon_learn_flutter/test/support/fake_review_gateway.dart
Tizian 「ティツィアーン」 f922fceb47
feat(app): reset a studyset's progress, with an undo
The studyset's options offer Reset progress: after asking, every card
in it and in the studysets inside it starts afresh as new (a 'reset'
entry each), its history kept; an undo for a few seconds deletes those
entries again.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
2026-10-01 21:10:07 +02:00

41 lines
1.1 KiB
Dart

import 'package:halkyon_learn_flutter/src/feature/study/data/review_gateway.dart';
/// A [ReviewGateway] in memory; ids sort by creation, as UUID v7 ids do.
class FakeReviewGateway() implements ReviewGateway {
var _nextId = 1;
/// Every review stored, in order.
final rows = <ReviewRow>[];
@override
Future<List<ReviewRow>> reviewsOf(Set<String> cardIds) async => [
for (final row in rows)
if (cardIds.contains(row.cardId)) row,
];
@override
Future<void> insert(Iterable<ReviewRow> reviews) async {
for (final review in reviews) {
rows.add((
id: 'review-${(_nextId++).toString().padLeft(4, '0')}',
cardId: review.cardId,
rating: review.rating,
reviewedAt: review.reviewedAt,
durationMs: review.durationMs,
mode: review.mode,
));
}
}
@override
Future<void> deleteResets(Set<String> cardIds, DateTime at) async =>
rows.removeWhere(
(row) =>
cardIds.contains(row.cardId) &&
row.mode == 'reset' &&
row.reviewedAt == at,
);
@override
Stream<void> get remoteChanges => const Stream.empty();
}