103 lines
3.8 KiB
Dart
103 lines
3.8 KiB
Dart
import 'package:flutter/material.dart';
|
|
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
|
import 'package:flutter_test/flutter_test.dart';
|
|
import 'package:relationship_saver/core/config/app_theme.dart';
|
|
import 'package:relationship_saver/features/local/local_models.dart';
|
|
import 'package:relationship_saver/features/local/local_repository.dart';
|
|
import 'package:relationship_saver/features/local/storage/local_data_store_in_memory.dart';
|
|
import 'package:relationship_saver/features/local/storage/local_data_store_provider.dart';
|
|
import 'package:relationship_saver/features/people/people_view.dart';
|
|
import 'package:relationship_saver/features/sync/storage/sync_state_store_in_memory.dart';
|
|
import 'package:relationship_saver/features/sync/storage/sync_state_store_provider.dart';
|
|
import 'package:shared_preferences/shared_preferences.dart';
|
|
|
|
void main() {
|
|
setUp(() {
|
|
SharedPreferences.setMockInitialValues(<String, Object>{});
|
|
});
|
|
|
|
testWidgets(
|
|
'people quick capture dialog can cancel and save without controller lifecycle errors',
|
|
(WidgetTester tester) async {
|
|
await tester.binding.setSurfaceSize(const Size(390, 844));
|
|
addTearDown(() => tester.binding.setSurfaceSize(null));
|
|
|
|
final ProviderContainer container = ProviderContainer(
|
|
overrides: [
|
|
localDataStoreProvider.overrideWithValue(InMemoryLocalDataStore()),
|
|
syncStateStoreProvider.overrideWithValue(InMemorySyncStateStore()),
|
|
],
|
|
);
|
|
addTearDown(container.dispose);
|
|
|
|
await container.read(localRepositoryProvider.future);
|
|
await container
|
|
.read(localRepositoryProvider.notifier)
|
|
.addPerson(
|
|
name: 'Taylor Quinn',
|
|
relationship: 'Friend',
|
|
notes: '',
|
|
tags: const <String>[],
|
|
);
|
|
final LocalDataState initial = await container.read(
|
|
localRepositoryProvider.future,
|
|
);
|
|
final int beforeMomentsCount = initial.moments.length;
|
|
|
|
await tester.pumpWidget(
|
|
UncontrolledProviderScope(
|
|
container: container,
|
|
child: MaterialApp(
|
|
theme: AppTheme.light(),
|
|
home: const Scaffold(body: PeopleView()),
|
|
),
|
|
),
|
|
);
|
|
await tester.pumpAndSettle(const Duration(milliseconds: 500));
|
|
|
|
expect(find.text('People'), findsWidgets);
|
|
|
|
await tester.tap(find.widgetWithText(FilledButton, 'Capture').first);
|
|
await tester.pumpAndSettle(const Duration(milliseconds: 250));
|
|
|
|
expect(find.text('Add Capture'), findsOneWidget);
|
|
expect(find.widgetWithText(TextButton, 'Cancel'), findsOneWidget);
|
|
|
|
await tester.tap(find.widgetWithText(TextButton, 'Cancel'));
|
|
await tester.pump();
|
|
await tester.pump(const Duration(milliseconds: 250));
|
|
await tester.pumpAndSettle(const Duration(milliseconds: 250));
|
|
|
|
expect(tester.takeException(), isNull);
|
|
|
|
await tester.tap(find.widgetWithText(FilledButton, 'Capture').first);
|
|
await tester.pumpAndSettle(const Duration(milliseconds: 250));
|
|
|
|
expect(find.text('Add Capture'), findsOneWidget);
|
|
await tester.enterText(
|
|
find.descendant(
|
|
of: find.byType(AlertDialog),
|
|
matching: find.byType(TextField),
|
|
),
|
|
'Captured from profile quick action for regression test',
|
|
);
|
|
|
|
await tester.tap(find.widgetWithText(FilledButton, 'Save'));
|
|
await tester.pump();
|
|
await tester.pump(const Duration(milliseconds: 250));
|
|
await tester.pumpAndSettle(const Duration(milliseconds: 400));
|
|
|
|
expect(tester.takeException(), isNull);
|
|
|
|
final LocalDataState after = await container.read(
|
|
localRepositoryProvider.future,
|
|
);
|
|
expect(after.moments.length, beforeMomentsCount + 1);
|
|
expect(
|
|
after.moments.first.summary,
|
|
contains('Captured from profile quick action'),
|
|
);
|
|
},
|
|
);
|
|
}
|