82 lines
2.3 KiB
Dart
82 lines
2.3 KiB
Dart
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);
|
|
});
|
|
});
|
|
}
|