aboutsummaryrefslogtreecommitdiff
path: root/frontend/test/task_viewmodel_test.dart
diff options
context:
space:
mode:
Diffstat (limited to 'frontend/test/task_viewmodel_test.dart')
-rw-r--r--frontend/test/task_viewmodel_test.dart76
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>()));
+ });
+ });
+}