68 lines
2.3 KiB
Dart
68 lines
2.3 KiB
Dart
import 'package:bible_tracker/data/bible.dart';
|
|
import 'package:bible_tracker/models/tracker.dart';
|
|
import 'package:bible_tracker/services/progress.dart';
|
|
import 'package:flutter_test/flutter_test.dart';
|
|
|
|
Tracker _tracker({Set<String> read = const <String>{}}) => Tracker(
|
|
id: 't',
|
|
name: 'Test',
|
|
colorValue: 0xFF3F51B5,
|
|
startDate: DateTime(2024, 1, 1),
|
|
readChapters: read,
|
|
);
|
|
|
|
void main() {
|
|
group('TrackerProgress', () {
|
|
test('empty tracker has 0% overall', () {
|
|
final progress = TrackerProgress(_tracker());
|
|
expect(progress.overall, 0);
|
|
expect(progress.totalRead, 0);
|
|
expect(progress.booksCompleted(), 0);
|
|
});
|
|
|
|
test('counts chapters within a book', () {
|
|
final book = Bible.books[0];
|
|
final tracker = _tracker(
|
|
read: <String>{
|
|
Bible.chapterKey(book.index, 1),
|
|
Bible.chapterKey(book.index, 2),
|
|
Bible.chapterKey(book.index, 3),
|
|
},
|
|
);
|
|
final progress = TrackerProgress(tracker);
|
|
expect(progress.chaptersReadIn(book), 3);
|
|
expect(progress.fractionOf(book), closeTo(3 / book.chapterCount, 1e-9));
|
|
expect(progress.isBookStarted(book), true);
|
|
expect(progress.isBookComplete(book), false);
|
|
});
|
|
|
|
test('book is complete when all chapters are read', () {
|
|
final book = Bible.books.firstWhere((Book b) => b.name == 'Jude');
|
|
final tracker = _tracker(
|
|
read: <String>{
|
|
for (int c = 1; c <= book.chapterCount; c++)
|
|
Bible.chapterKey(book.index, c),
|
|
},
|
|
);
|
|
final progress = TrackerProgress(tracker);
|
|
expect(progress.isBookComplete(book), true);
|
|
expect(progress.booksCompleted(), 1);
|
|
expect(progress.booksCompleted(Testament.newT), 1);
|
|
expect(progress.booksCompleted(Testament.old), 0);
|
|
});
|
|
|
|
test('overall fraction reflects all-read state', () {
|
|
final all = <String>{
|
|
for (final Book book in Bible.books)
|
|
for (int c = 1; c <= book.chapterCount; c++)
|
|
Bible.chapterKey(book.index, c),
|
|
};
|
|
final progress = TrackerProgress(_tracker(read: all));
|
|
expect(progress.totalRead, Bible.totalChapters);
|
|
expect(progress.overall, 1.0);
|
|
expect(progress.booksCompleted(), Bible.totalBooks);
|
|
expect(progress.testamentFraction(Testament.old), 1.0);
|
|
expect(progress.testamentFraction(Testament.newT), 1.0);
|
|
});
|
|
});
|
|
}
|