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 = []; /// When set, storing a review fails with it. Exception? failWrites; @override Future> reviewsOf(Set cardIds) async => [ for (final row in rows) if (cardIds.contains(row.cardId)) row, ]; @override Future> allReviews() async => [...rows]; @override Future> insert(Iterable reviews) async { if (failWrites case final error?) { throw error; } final stored = [ for (final review in reviews) ( id: 'review-${(_nextId++).toString().padLeft(4, '0')}', cardId: review.cardId, rating: review.rating, reviewedAt: review.reviewedAt, durationMs: review.durationMs, mode: review.mode, ), ]; rows.addAll(stored); return stored; } @override Future deleteReviews( Set cardIds, DateTime at, String mode, ) async => rows.removeWhere( (row) => cardIds.contains(row.cardId) && row.mode == mode && row.reviewedAt == at, ); @override Stream get remoteChanges => const Stream.empty(); }