126 lines
4.1 KiB
Dart
126 lines
4.1 KiB
Dart
import 'package:cpd/database/db_interface.dart';
|
|
import 'package:cpd/widgets/edithabit_dialog.dart';
|
|
import 'package:cpd/widgets/listview.dart';
|
|
import 'package:flutter/material.dart';
|
|
import 'package:flutter_test/flutter_test.dart';
|
|
import 'package:mockito/annotations.dart';
|
|
import 'package:mockito/mockito.dart';
|
|
import 'package:cpd/database/habit.dart';
|
|
import 'package:cpd/database/todo_interface.dart';
|
|
import 'package:sqflite_common_ffi/sqflite_ffi.dart';
|
|
|
|
import '../unit_testing/habitcounter_test.mocks.dart';
|
|
|
|
@GenerateMocks([ToDoInterface, HabitDbInterface])
|
|
void main() {
|
|
setUpAll(() {
|
|
// Initialisierung von sqflite_ffi
|
|
sqfliteFfiInit();
|
|
databaseFactory = databaseFactoryFfi;
|
|
});
|
|
|
|
group('MyListView Tests', () {
|
|
final mockToDoInterface = MockToDoInterface();
|
|
|
|
testWidgets('Deletes a habit when swiped to the left', (WidgetTester tester) async {
|
|
// Arrange
|
|
final habits = [
|
|
Habit(id: 1, title: 'Test Habit 1', isComplete: true, subtitle: 'Subtitle 1', icon: Icons.check),
|
|
Habit(id: 2, title: 'Test Habit 2', isComplete: false, subtitle: 'Subtitle 2', icon: Icons.check),
|
|
];
|
|
|
|
when(mockToDoInterface.fetchAll()).thenAnswer((_) async => habits);
|
|
when(mockToDoInterface.delete(any)).thenAnswer((_) async {});
|
|
|
|
await tester.pumpWidget(MaterialApp(
|
|
home: Scaffold(
|
|
body: MyListView(
|
|
habits: habits,
|
|
todoDB: mockToDoInterface,
|
|
fetchTodos: () {},
|
|
updateCounter: (int count) {},
|
|
),
|
|
),
|
|
));
|
|
|
|
await tester.pumpAndSettle(); // Warte, bis das FutureBuilder abgeschlossen ist
|
|
|
|
// Act
|
|
final habit = find.byType(ListTile).at(0);
|
|
expect(habit, findsOneWidget);
|
|
|
|
await tester.drag(habit, const Offset(-500.0, 0.0)); // Swipe left
|
|
await tester.pumpAndSettle();
|
|
|
|
// Assert
|
|
verify(mockToDoInterface.delete(1)).called(1);
|
|
});
|
|
|
|
testWidgets('Edits a habit when swiped to the right', (WidgetTester tester) async {
|
|
// Arrange
|
|
final habits = [
|
|
Habit(id: 1, title: 'Test Habit 1', isComplete: true, subtitle: 'Subtitle 1', icon: Icons.check),
|
|
Habit(id: 2, title: 'Test Habit 2', isComplete: false, subtitle: 'Subtitle 2', icon: Icons.check),
|
|
];
|
|
|
|
when(mockToDoInterface.fetchAll()).thenAnswer((_) async => habits);
|
|
when(mockToDoInterface.update(id: 1, title: 'Test Habit 1', subtitle: 'Subtitle changed', icon: Icons.add)).thenAnswer((_) async => 1);
|
|
|
|
await tester.pumpWidget(MaterialApp(
|
|
home: Scaffold(
|
|
body: MyListView(
|
|
habits: habits,
|
|
todoDB: mockToDoInterface,
|
|
fetchTodos: () {},
|
|
updateCounter: (int count) {},
|
|
),
|
|
),
|
|
));
|
|
|
|
await tester.pumpAndSettle(); // Warte, bis das FutureBuilder abgeschlossen ist
|
|
|
|
// Act
|
|
final habit = find.byType(ListTile).at(0);
|
|
expect(habit, findsOneWidget);
|
|
|
|
await tester.drag(habit, const Offset(500.0, 0.0));
|
|
await tester.pumpAndSettle();
|
|
|
|
// Assert
|
|
expect(find.byType(EditHabitDialog), findsOneWidget);
|
|
});
|
|
|
|
testWidgets('Checkbox toggles completion status', (WidgetTester tester) async {
|
|
// Arrange
|
|
final habits = [
|
|
Habit(id: 1, title: 'Test Habit 1', isComplete: false, subtitle: 'Subtitle 1', icon: Icons.check),
|
|
];
|
|
|
|
when(mockToDoInterface.fetchAll()).thenAnswer((_) async => habits);
|
|
when(mockToDoInterface.updateCompletionStatus(1, true)).thenAnswer((_) async => null);
|
|
|
|
await tester.pumpWidget(MaterialApp(
|
|
home: Scaffold(
|
|
body: MyListView(
|
|
habits: habits,
|
|
todoDB: mockToDoInterface,
|
|
fetchTodos: () {},
|
|
updateCounter: (int count) {},
|
|
),
|
|
),
|
|
));
|
|
|
|
await tester.pumpAndSettle(); // Warte, bis das FutureBuilder abgeschlossen ist
|
|
|
|
// Act
|
|
final checkboxFinder = find.byType(Checkbox).at(0);
|
|
expect(checkboxFinder, findsOneWidget);
|
|
|
|
await tester.tap(checkboxFinder);
|
|
await tester.pumpAndSettle();
|
|
|
|
// Assert
|
|
verify(mockToDoInterface.updateCompletionStatus(1, true)).called(1);
|
|
});
|
|
});
|
|
} |