tane/apps/app_seeds/test/data/draft_capture_test.dart

61 lines
1.8 KiB
Dart

import 'dart:typed_data';
import 'package:flutter_test/flutter_test.dart';
import 'package:tane/data/variety_repository.dart';
import 'package:tane/db/database.dart';
import '../support/test_support.dart';
void main() {
late AppDatabase db;
late VarietyRepository repo;
setUp(() {
db = newTestDatabase();
repo = newTestRepository(db);
});
tearDown(() => db.close());
Uint8List photo(int seed) => Uint8List.fromList([seed, seed, seed]);
test(
'a captured draft is hidden from the list but shown in the tray',
() async {
final id = await repo.addDraftVariety(photo(1));
// Not in the main inventory…
expect(await repo.watchInventory().first, isEmpty);
// …but in the "to catalogue" tray, with its photo and no name yet.
final drafts = await repo.watchDrafts().first;
expect(drafts, hasLength(1));
expect(drafts.single.id, id);
expect(drafts.single.isDraft, isTrue);
expect(drafts.single.label, '');
expect(drafts.single.photo, isNotNull);
},
);
test(
'naming a draft promotes it into the list and out of the tray',
() async {
final id = await repo.addDraftVariety(photo(2));
await repo.nameDraft(id, 'Grandma tomato');
expect(await repo.watchDrafts().first, isEmpty);
final list = await repo.watchInventory().first;
expect(list.single.id, id);
expect(list.single.label, 'Grandma tomato');
expect(list.single.isDraft, isFalse);
// The captured photo survived the promotion.
expect(list.single.photo, isNotNull);
},
);
test('the tray is ordered newest-capture first', () async {
final first = await repo.addDraftVariety(photo(1));
final second = await repo.addDraftVariety(photo(2));
final drafts = await repo.watchDrafts().first;
expect(drafts.map((d) => d.id).toList(), [second, first]);
});
}