mirror of
https://github.com/kuhyx/diet-guard.git
synced 2026-11-11 20:13:54 +01:00
Both platforms gain a calendar tab/screen (green/yellow/red/not-logged day coloring, logging/adherence streaks, year-to-date tally), and tapping a day drills into that day's logged entries. This requires the daily budget to become a normal, freely-editable value synced between devices like the food log — replaces the previous chattr +i seal (deliberately, per user decision) with plain last-edit-wins sync via a new budget.json alongside food_log.json. The budget field defaults to 2200 kcal, starts read-only, and unlocks via an Edit/Save toggle on both the PC gate's History tab and the phone app's Calendar screen. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016dHac1iYQKTMZEtL7xDJvA
65 lines
1.8 KiB
Dart
65 lines
1.8 KiB
Dart
import 'package:diet_guard_app/models/day_status.dart';
|
|
import 'package:diet_guard_app/widgets/streak_summary_row.dart';
|
|
import 'package:flutter/material.dart';
|
|
import 'package:flutter_test/flutter_test.dart';
|
|
|
|
Widget _wrap(Widget child) => MaterialApp(home: Scaffold(body: child));
|
|
|
|
void main() {
|
|
group('StreakSummaryRow', () {
|
|
testWidgets('renders plural streak counts', (tester) async {
|
|
await tester.pumpWidget(
|
|
_wrap(
|
|
const StreakSummaryRow(
|
|
loggingStreak: 3,
|
|
adherenceStreak: 2,
|
|
tally: YtdTally(loggedDays: 10, elapsedDays: 14, adherentDays: 8),
|
|
),
|
|
),
|
|
);
|
|
expect(
|
|
find.text(
|
|
'Logging streak: 3 days · Adherence streak: 2 days',
|
|
),
|
|
findsOneWidget,
|
|
);
|
|
expect(
|
|
find.text('This year: logged 10/14 days · 8 within budget'),
|
|
findsOneWidget,
|
|
);
|
|
});
|
|
|
|
testWidgets('renders singular streak counts', (tester) async {
|
|
await tester.pumpWidget(
|
|
_wrap(
|
|
const StreakSummaryRow(
|
|
loggingStreak: 1,
|
|
adherenceStreak: 1,
|
|
tally: YtdTally(loggedDays: 1, elapsedDays: 1, adherentDays: 1),
|
|
),
|
|
),
|
|
);
|
|
expect(
|
|
find.text('Logging streak: 1 day · Adherence streak: 1 day'),
|
|
findsOneWidget,
|
|
);
|
|
});
|
|
|
|
testWidgets('renders zero streaks', (tester) async {
|
|
await tester.pumpWidget(
|
|
_wrap(
|
|
const StreakSummaryRow(
|
|
loggingStreak: 0,
|
|
adherenceStreak: 0,
|
|
tally: YtdTally(loggedDays: 0, elapsedDays: 5, adherentDays: 0),
|
|
),
|
|
),
|
|
);
|
|
expect(
|
|
find.text('Logging streak: 0 days · Adherence streak: 0 days'),
|
|
findsOneWidget,
|
|
);
|
|
});
|
|
});
|
|
}
|