diet-guard/app/test/widgets/streak_summary_row_test.dart
Krzysztof kuhy Rudnicki 957769ff0e
Some checks are pending
pre-commit / pre-commit (push) Waiting to run
Tests / test (3.10) (push) Waiting to run
Tests / test (3.11) (push) Waiting to run
Tests / test (3.12) (push) Waiting to run
Add budget-adherence calendar, streaks, and freely-editable synced budget
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
2026-07-13 21:31:45 +02:00

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,
);
});
});
}