Skip to content

Commit

Permalink
Merge pull request #123 from fga-eps-mds/feat#66
Browse files Browse the repository at this point in the history
  • Loading branch information
GabrielCostaDeOliveira authored Feb 10, 2025
2 parents 7f3ee7d + fa5b7ac commit 0f812ac
Show file tree
Hide file tree
Showing 2 changed files with 123 additions and 0 deletions.
70 changes: 70 additions & 0 deletions test/ui/subjects/viewmodel/subjects_viewmodel_test.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
import 'package:aranduapp/ui/subjects/model/subject_model.dart';
import 'package:aranduapp/ui/subjects/service/subjects_service.dart';
import 'package:aranduapp/ui/subjects/viewmodel/subjects_viewmodel.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:get_it/get_it.dart';
import 'package:mockito/annotations.dart';
import 'package:mockito/mockito.dart';

import 'subjects_viewmodel_test.mocks.dart';

@GenerateNiceMocks([MockSpec<SubjectService>()])
void main() {
TestWidgetsFlutterBinding.ensureInitialized();

late SubjectsViewmodel viewModel;
late MockSubjectService mockSubjectService;

setUp(() async {
viewModel = SubjectsViewmodel();
mockSubjectService = MockSubjectService();

await GetIt.instance.reset();
GetIt.I.registerLazySingleton<SubjectService>(() => mockSubjectService);
});

test('Initial state should be correct', () {
expect(viewModel.subjectCommand.isOk, false);
expect(viewModel.subjectCommand.result, null);
});

test('Should load subjects successfully', () async {
final mockSubjects = [
SubjectModel(
id: '1',
name: 'Mathematics',
shortName: 'MAT',
description: 'Basic Mathematics',
)
];
const knowledgeId = 'knowledge_123';

when(mockSubjectService.getSubjects(any))
.thenAnswer((_) async => mockSubjects);

await viewModel.subjectCommand.execute(knowledgeId);

expect(viewModel.subjectCommand.isOk, true);
expect(viewModel.subjectCommand.result!.asValue!.value, mockSubjects);
});

test('Should handle error when loading subjects fails', () async {
const knowledgeId = 'knowledge_123';
when(mockSubjectService.getSubjects(any))
.thenThrow(Exception('Network error'));

await viewModel.subjectCommand.execute(knowledgeId);

expect(viewModel.subjectCommand.isError, true);
expect(viewModel.subjectCommand.result!.asError!.error, isA<Exception>());
});

test('Should handle empty subject list', () async {
const knowledgeId = 'knowledge_123';
when(mockSubjectService.getSubjects(any)).thenAnswer((_) async => []);

await viewModel.subjectCommand.execute(knowledgeId);

expect(viewModel.subjectCommand.result!.asValue!.value, isEmpty);
});
}
53 changes: 53 additions & 0 deletions test/ui/subjects/viewmodel/subjects_viewmodel_test.mocks.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
// Mocks generated by Mockito 5.4.4 from annotations
// in aranduapp/test/ui/subjects/viewmodel/subjects_viewmodel_test.dart.
// Do not manually edit this file.

// ignore_for_file: no_leading_underscores_for_library_prefixes
import 'dart:async' as _i3;

import 'package:aranduapp/ui/subjects/model/subject_model.dart' as _i4;
import 'package:aranduapp/ui/subjects/model/subject_request.dart' as _i5;
import 'package:aranduapp/ui/subjects/service/subjects_service.dart' as _i2;
import 'package:mockito/mockito.dart' as _i1;

// ignore_for_file: type=lint
// ignore_for_file: avoid_redundant_argument_values
// ignore_for_file: avoid_setters_without_getters
// ignore_for_file: comment_references
// ignore_for_file: deprecated_member_use
// ignore_for_file: deprecated_member_use_from_same_package
// ignore_for_file: implementation_imports
// ignore_for_file: invalid_use_of_visible_for_testing_member
// ignore_for_file: prefer_const_constructors
// ignore_for_file: unnecessary_parenthesis
// ignore_for_file: camel_case_types
// ignore_for_file: subtype_of_sealed_class

/// A class which mocks [SubjectService].
///
/// See the documentation for Mockito's code generation for more information.
class MockSubjectService extends _i1.Mock implements _i2.SubjectService {
@override
_i3.Future<List<_i4.SubjectModel>> getSubjects(
_i5.SubjectRequest? SubjectRequest) =>
(super.noSuchMethod(
Invocation.method(
#getSubjects,
[SubjectRequest],
),
returnValue:
_i3.Future<List<_i4.SubjectModel>>.value(<_i4.SubjectModel>[]),
returnValueForMissingStub:
_i3.Future<List<_i4.SubjectModel>>.value(<_i4.SubjectModel>[]),
) as _i3.Future<List<_i4.SubjectModel>>);

@override
_i3.Future<bool> isUsersubscribe(String? subjectId) => (super.noSuchMethod(
Invocation.method(
#isUsersubscribe,
[subjectId],
),
returnValue: _i3.Future<bool>.value(false),
returnValueForMissingStub: _i3.Future<bool>.value(false),
) as _i3.Future<bool>);
}

0 comments on commit 0f812ac

Please sign in to comment.