Files
CookIT/test/views/sharing_test.dart
T

95 lines
4.4 KiB
Dart
Raw Normal View History

import 'package:cookit/src/planning/day.dart';
import 'package:cookit/src/planning/plan_share_service.dart';
import 'package:cookit/src/planning/views/shared_week_view.dart';
import 'package:cookit/src/recipes/views/widgets/recipe_card.dart';
import 'package:cookit/src/sharing/recipe_code.dart';
import 'package:cookit/src/sharing/views/shared_recipe_view.dart';
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:qr_flutter/qr_flutter.dart';
import '../support/fixtures.dart';
import '../support/test_app.dart';
void main() {
testWidgets('"Rezept teilen" shows the Recipe Code and can leave the notes out', (tester) async {
final app = await TestApp.create(tester);
await tester.runAsync(() => app.recipes.saveRecipe(recipe()));
await tester.pumpWidget(app.build());
await app.settle(tester);
expect(find.byTooltip('Rezept scannen'), findsOneWidget);
await tester.tap(find.descendant(of: find.byType(RecipeCard), matching: find.text('Focaccia')));
await app.settle(tester);
await tester.tap(find.byTooltip('Rezept teilen'));
await app.settle(tester);
expect(find.byType(QrImageView), findsOneWidget);
expect(find.text('Als Datei teilen'), findsOneWidget);
await tester.tap(find.text('Notizen mitschicken'));
await app.settle(tester);
expect(tester.widget<SwitchListTile>(find.byType(SwitchListTile)).value, isFalse);
expect(find.byType(QrImageView), findsOneWidget);
await app.dispose(tester);
});
testWidgets('a received Recipe is previewed, flagged as a double and saved as a copy', (tester) async {
final app = await TestApp.create(tester);
await tester.runAsync(() => app.recipes.saveRecipe(recipe()));
final shared = RecipeCode.decode(RecipeCode.encode(recipe(), courseName: 'Brot'), now: DateTime(2026));
await tester.pumpWidget(app.build());
await app.settle(tester);
tester.state<NavigatorState>(find.byType(Navigator)).pushNamed(SharedRecipeView.routeName, arguments: shared);
await app.settle(tester);
expect(find.text('Rezept empfangen'), findsOneWidget);
expect(find.text('Brot · 4 Portionen · 50 Min.'), findsOneWidget);
expect(find.text('Mehl'), findsOneWidget);
expect(find.text('1. Kneten.'), findsOneWidget);
expect(find.textContaining('Du hast schon ein Rezept „Focaccia“'), findsOneWidget);
await tester.tap(find.text('Speichern'));
await app.settle(tester);
expect(find.text('„Focaccia“ gespeichert'), findsOneWidget);
expect(find.text('Kochmodus starten'), findsOneWidget);
final all = (await tester.runAsync(app.recipes.allRecipes))!;
expect(all, hasLength(2));
final courses = (await tester.runAsync(app.courses.allCourses))!;
expect(courses.map((c) => c.name), contains('Brot'));
await app.dispose(tester);
});
testWidgets('a received week is previewed and adopted next to what is planned', (tester) async {
final app = await TestApp.create(tester);
final monday = DateTime.utc(2026, 10, 19);
final week = (await tester.runAsync(() async {
await app.recipes.saveRecipe(recipe());
final meals = await app.plan.allMeals();
final abend = meals.firstWhere((m) => m.name == 'Abend');
await app.plan.addEntry(monday, abend.id, recipeId: 'r1');
await app.plan.addEntry(addDays(monday, 2), abend.id, note: 'Essen gehen');
final shares = PlanShareService(app.recipes, app.courses, app.units, app.photos, app.plan, app.bundles);
return SharedWeek(await app.bundles.read(await shares.weekFile(monday)));
}))!;
await tester.pumpWidget(app.build());
await app.settle(tester);
tester.state<NavigatorState>(find.byType(Navigator)).pushNamed(SharedWeekView.routeName, arguments: week);
await app.settle(tester);
expect(find.text('Wochenplan empfangen'), findsOneWidget);
expect(find.text('2 Einträge · keine neuen Rezepte'), findsOneWidget);
expect(find.textContaining('schon 2 Einträge'), findsOneWidget);
expect(find.text('Focaccia'), findsOneWidget);
expect(find.text('Essen gehen'), findsOneWidget);
await tester.tap(find.text('Übernehmen'));
await app.settle(tester);
expect(find.text('Wochenplan 19.–25. Okt. übernommen'), findsOneWidget);
expect(await tester.runAsync(app.plan.allEntries), hasLength(4));
expect(await tester.runAsync(app.recipes.allRecipes), hasLength(1));
await app.dispose(tester);
});
}