diff options
Diffstat (limited to 'frontend/test/task_viewmodel_test.dart')
-rw-r--r-- | frontend/test/task_viewmodel_test.dart | 76 |
1 files changed, 76 insertions, 0 deletions
diff --git a/frontend/test/task_viewmodel_test.dart b/frontend/test/task_viewmodel_test.dart new file mode 100644 index 000000000..a89e368d1 --- /dev/null +++ b/frontend/test/task_viewmodel_test.dart @@ -0,0 +1,76 @@ +import 'package:auto_gpt_flutter_client/viewmodels/task_viewmodel.dart'; +import 'package:auto_gpt_flutter_client/viewmodels/mock_data.dart'; +import 'package:flutter_test/flutter_test.dart'; + +void main() { + group('TaskViewModel', () { + late TaskViewModel viewModel; + + setUp(() { + viewModel = TaskViewModel(); + }); + + test('Fetches tasks successfully', () { + viewModel.fetchTasks(); + expect(viewModel.tasks, isNotEmpty); + }); + + test('Selects a task successfully', () { + viewModel.fetchTasks(); + viewModel.selectTask(1); + expect(viewModel.selectedTask, isNotNull); + }); + + test( + 'Notifiers are properly telling UI to update after fetching a task or selecting a task', + () { + bool hasNotified = false; + viewModel.addListener(() { + hasNotified = true; + }); + + viewModel.fetchTasks(); + expect(hasNotified, true); + + hasNotified = false; // Reset for next test + viewModel.selectTask(1); + expect(hasNotified, true); + }); + + test('No tasks are fetched', () { + // Clear mock data for this test + mockTasks.clear(); + + viewModel.fetchTasks(); + expect(viewModel.tasks, isEmpty); + }); + + test('No task is selected', () { + expect(viewModel.selectedTask, isNull); + }); + + test('Creates a task successfully', () { + final initialCount = viewModel.tasks.length; + viewModel.createTask('New Task'); + expect(viewModel.tasks.length, initialCount + 1); + }); + + test('Deletes a task successfully', () { + viewModel.fetchTasks(); + final initialCount = viewModel.tasks.length; + viewModel.deleteTask(1); + expect(viewModel.tasks.length, initialCount - 1); + }); + + test('Deletes a task with invalid id', () { + // TODO: Update this test to expect an error once we have TaskService implemented + final initialCount = viewModel.tasks.length; + viewModel.deleteTask(9999); // Assuming no task with this id exists + expect(viewModel.tasks.length, initialCount); // Count remains same + }); + + test('Select a task that doesn\'t exist', () { + expect(() => viewModel.selectTask(9999), throwsA(isA<ArgumentError>())); + }); + }); +} |