81 lines
2.7 KiB
Dart
81 lines
2.7 KiB
Dart
import 'package:drift/native.dart';
|
|
import 'package:flutter_test/flutter_test.dart';
|
|
import 'package:focus_seed/src/application/focus_seed_controller.dart';
|
|
import 'package:focus_seed/src/core/date_keys.dart';
|
|
import 'package:focus_seed/src/data/focus_seed_store.dart';
|
|
import 'package:focus_seed/src/data/local/focus_seed_database.dart';
|
|
import 'package:focus_seed/src/models/app_state.dart';
|
|
import 'package:focus_seed/src/models/focus_session.dart';
|
|
import 'package:focus_seed/src/models/habit.dart';
|
|
import 'package:focus_seed/src/models/mood.dart';
|
|
import 'package:focus_seed/src/models/reflection_entry.dart';
|
|
import 'package:shared_preferences/shared_preferences.dart';
|
|
|
|
void main() {
|
|
setUp(() {
|
|
SharedPreferences.setMockInitialValues({});
|
|
});
|
|
|
|
test('clearToday removes only current-day progress', () async {
|
|
final database = FocusSeedDatabase(NativeDatabase.memory());
|
|
addTearDown(database.close);
|
|
final store = FocusSeedStore(database: database);
|
|
final today = todayKey();
|
|
final yesterday = dateKey(DateTime.now().subtract(const Duration(days: 1)));
|
|
final habit = Habit(
|
|
id: 'habit-1',
|
|
title: 'Keep scope clear',
|
|
createdAt: DateTime.now().subtract(const Duration(days: 2)),
|
|
completedDates: {today, yesterday},
|
|
);
|
|
await store.save(
|
|
AppState(
|
|
anchor: 'Finish the cleanup',
|
|
anchorDateKey: today,
|
|
habits: [habit],
|
|
sessions: [
|
|
FocusSession(
|
|
id: 'session-today',
|
|
minutes: 25,
|
|
completedAt: DateTime.now(),
|
|
),
|
|
FocusSession(
|
|
id: 'session-yesterday',
|
|
minutes: 15,
|
|
completedAt: DateTime.now().subtract(const Duration(days: 1)),
|
|
),
|
|
],
|
|
reflections: [
|
|
ReflectionEntry(
|
|
id: 'reflection-today',
|
|
dateKey: today,
|
|
note: 'Today note',
|
|
mood: Mood.clear,
|
|
createdAt: DateTime.now(),
|
|
),
|
|
ReflectionEntry(
|
|
id: 'reflection-yesterday',
|
|
dateKey: yesterday,
|
|
note: 'Yesterday note',
|
|
mood: Mood.calm,
|
|
createdAt: DateTime.now().subtract(const Duration(days: 1)),
|
|
),
|
|
],
|
|
),
|
|
);
|
|
final controller = FocusSeedController(store: store);
|
|
await controller.load();
|
|
|
|
final cleared = await controller.clearToday();
|
|
final state = controller.state!;
|
|
|
|
expect(cleared, isTrue);
|
|
expect(state.activeAnchor(today), isEmpty);
|
|
expect(state.habits.single.completedDates, {yesterday});
|
|
expect(state.sessions.map((session) => session.id), ['session-yesterday']);
|
|
expect(state.reflections.map((reflection) => reflection.id), [
|
|
'reflection-yesterday',
|
|
]);
|
|
});
|
|
}
|