todo_app/test/widget/todo_detail_screen_test.dart

83 lines
2.3 KiB
Dart
Raw Normal View History

import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:mocktail/mocktail.dart';
import 'package:todo_app/features/todo/domain/entities/todo.dart';
import 'package:todo_app/features/todo/domain/repositories/todo_repository.dart';
import 'package:todo_app/features/todo/presentation/providers/todo_providers.dart';
import 'package:todo_app/features/todo/presentation/screens/todo_detail_screen.dart';
class MockTodoRepository extends Mock implements TodoRepository {}
void main() {
late MockTodoRepository repository;
final testTodo = Todo(
id: '1',
title: 'Existing Todo',
description: 'A description',
priority: 'high',
sortOrder: 0,
createdAt: DateTime(2026, 1, 1),
updatedAt: DateTime(2026, 1, 1),
);
Widget createCreateWidget() {
return ProviderScope(
overrides: [
todoRepositoryProvider.overrideWithValue(repository),
],
child: const MaterialApp(
home: TodoDetailScreen(),
),
);
}
Widget createEditWidget() {
return ProviderScope(
overrides: [
todoRepositoryProvider.overrideWithValue(repository),
],
child: const MaterialApp(
home: TodoDetailScreen(todoId: '1'),
),
);
}
setUp(() {
repository = MockTodoRepository();
});
group('Create mode', () {
testWidgets('shows create form', (tester) async {
await tester.pumpWidget(createCreateWidget());
await tester.pumpAndSettle();
expect(find.text('New Todo'), findsOneWidget);
expect(find.text('Create Todo'), findsOneWidget);
});
testWidgets('validates title is required', (tester) async {
await tester.pumpWidget(createCreateWidget());
await tester.pumpAndSettle();
await tester.tap(find.text('Create Todo'));
await tester.pumpAndSettle();
expect(find.text('Title is required'), findsOneWidget);
});
});
group('Edit mode', () {
testWidgets('loads existing todo data', (tester) async {
when(() => repository.getTodo('1')).thenAnswer((_) async => testTodo);
await tester.pumpWidget(createEditWidget());
await tester.pump();
await tester.pump();
expect(find.text('Edit Todo'), findsOneWidget);
});
});
}