Files
valuecards/test/widget_test.dart
T
2026-09-18 00:16:49 +02:00

80 lines
2.5 KiB
Dart

import 'package:flutter_test/flutter_test.dart';
import 'package:google_fonts/google_fonts.dart';
import 'package:shared_preferences/shared_preferences.dart';
import 'package:valuecards/main.dart';
import 'package:valuecards/models/value_card.dart';
import 'package:valuecards/models/value_pile.dart';
import 'package:valuecards/providers/values_sort_provider.dart';
import 'package:valuecards/services/storage_service.dart';
import 'package:valuecards/utils/constants.dart';
void main() {
TestWidgetsFlutterBinding.ensureInitialized();
GoogleFonts.config.allowRuntimeFetching = false;
testWidgets('splash shows Values Compass then opens welcome', (tester) async {
SharedPreferences.setMockInitialValues({});
final storage = StorageService();
await storage.init();
await tester.pumpWidget(MyApp(storage: storage));
expect(find.text(kAppName), findsWidgets);
await tester.pump(kSplashDuration);
await tester.pump(const Duration(milliseconds: 500));
await tester.pump(const Duration(milliseconds: 200));
expect(find.text('Begin Reflection'), findsOneWidget);
expect(find.textContaining('Discover what matters'), findsOneWidget);
});
test('ValueCard and ValuePile helpers', () {
final card = ValueCard.fromJson({
'id': 'v1',
'title': 'Courage',
'description': 'Acting despite fear.',
'domain': 'Agency',
});
expect(card.title, 'Courage');
expect(ValuePile.mostImportant.rank, 5);
expect(ValuePile.notImportant.shortLabel, 'Not');
});
testWidgets('sort progress persists across controller reloads', (tester) async {
SharedPreferences.setMockInitialValues({});
final storage = StorageService();
await storage.init();
const seed = [
ValueCard(
id: 'v001',
title: 'Acceptance',
description: 'To be accepted as I am',
),
ValueCard(
id: 'v002',
title: 'Accuracy',
description: 'To be accurate in my opinions and beliefs',
),
];
final first = ValuesSortController(storage: storage);
await first.load(seedDeck: seed);
first.beginPractice();
final cardId = first.currentCard!.id;
first.assignCurrent(ValuePile.mostImportant);
await tester.pump();
expect(storage.sortSessionJson, isNotNull);
first.dispose();
final second = ValuesSortController(storage: storage);
await second.load(seedDeck: seed);
expect(second.stage, SortStage.sorting);
expect(second.assignments[cardId], ValuePile.mostImportant);
expect(second.sortedCount, 1);
second.dispose();
});
}