autogpt / frontend /test /task_viewmodel_test.dart
kakumusic's picture
Upload folder using huggingface_hub
b225a21 verified
raw
history blame
No virus
2.22 kB
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>()));
});
});
}