Skip to content

Commit

Permalink
feat(#64): adiciona testes journey/viewmodel
Browse files Browse the repository at this point in the history
  • Loading branch information
Yasm1nNasc1mento committed Feb 9, 2025
1 parent 6802f99 commit d6c53f0
Show file tree
Hide file tree
Showing 2 changed files with 143 additions and 0 deletions.
100 changes: 100 additions & 0 deletions test/ui/journey/viewmodel/journey_viewmodel_test.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,100 @@
import 'package:aranduapp/core/state/command.dart';
import 'package:aranduapp/ui/journey/model/journey_model.dart';
import 'package:aranduapp/ui/journey/model/journey_request.dart';
import 'package:aranduapp/ui/journey/service/journey_service.dart';
import 'package:aranduapp/ui/journey/viewmodel/journey_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 'journey_viewmodel_test.mocks.dart';

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

late JourneyViewModel viewModel;
late MockJourneyService mockJourneyService;

setUp(() async {
viewModel = JourneyViewModel();
mockJourneyService = MockJourneyService();

await GetIt.instance.reset();
GetIt.I.registerLazySingleton<JourneyService>(() => mockJourneyService);

viewModel.getJourneyCommand =
Command1<List<JourneyModel>, String>(viewModel.getJourney);
});

test('Should have correct initial state', () {
expect(viewModel.getJourneyCommand.isOk, false);
expect(viewModel.getJourneyCommand.isError, false);
expect(viewModel.getJourneyCommand.result, null);
});

test('Should load journeys successfully', () async {
final mockJourneys = [
JourneyModel(id: '1', title: 'Journey 1', description: 'Description 1'),
JourneyModel(id: '2', title: 'Journey 2', description: 'Description 2'),
];
const subjectId = '123';
when(mockJourneyService.getJourneys(any))
.thenAnswer((_) async => mockJourneys);

await viewModel.getJourneyCommand.execute(subjectId);

expect(viewModel.getJourneyCommand.isOk, true);
expect(viewModel.getJourneyCommand.result!.asValue!.value, mockJourneys);

verify(mockJourneyService.getJourneys(argThat(isA<JourneyRequest>())))
.called(1);
});

test('Should handle error when loading journeys fails', () async {
const subjectId = '123';
when(mockJourneyService.getJourneys(any))
.thenThrow(Exception('Failed to load journeys'));

await viewModel.getJourneyCommand.execute(subjectId);

expect(viewModel.getJourneyCommand.isError, true);
expect(viewModel.getJourneyCommand.result!.asError!.error, isA<Exception>());
verify(mockJourneyService.getJourneys(argThat(isA<JourneyRequest>()))).called(1);
});

test('Should call getJourneys with the correct subjectId', () async {
// Arrange
final mockJourneys = [
JourneyModel(id: '1', title: 'Journey 1', description: 'Description 1'),
];
const subjectId = '123';
when(mockJourneyService.getJourneys(any))
.thenAnswer((_) async => mockJourneys);

// Act
await viewModel.getJourneyCommand.execute(subjectId);

// Assert
verify(mockJourneyService.getJourneys(argThat(
predicate<JourneyRequest>((req) => req.subjectId == subjectId))))
.called(1);
});

test('Should handle empty journey list', () async {
// Arrange
const subjectId = '123';
when(mockJourneyService.getJourneys(any)).thenAnswer((_) async => []);

// Act
await viewModel.getJourneyCommand.execute(subjectId);

// Assert
expect(viewModel.getJourneyCommand.isOk, true);
expect(viewModel.getJourneyCommand.result!.asValue!.value, isEmpty);
});

}


43 changes: 43 additions & 0 deletions test/ui/journey/viewmodel/journey_viewmodel_test.mocks.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
// Mocks generated by Mockito 5.4.4 from annotations
// in aranduapp/test/ui/journey/viewmodel/journey_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/journey/model/journey_model.dart' as _i4;
import 'package:aranduapp/ui/journey/model/journey_request.dart' as _i5;
import 'package:aranduapp/ui/journey/service/journey_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 [JourneyService].
///
/// See the documentation for Mockito's code generation for more information.
class MockJourneyService extends _i1.Mock implements _i2.JourneyService {
@override
_i3.Future<List<_i4.JourneyModel>> getJourneys(
_i5.JourneyRequest? journeyRequest) =>
(super.noSuchMethod(
Invocation.method(
#getJourneys,
[journeyRequest],
),
returnValue:
_i3.Future<List<_i4.JourneyModel>>.value(<_i4.JourneyModel>[]),
returnValueForMissingStub:
_i3.Future<List<_i4.JourneyModel>>.value(<_i4.JourneyModel>[]),
) as _i3.Future<List<_i4.JourneyModel>>);
}

0 comments on commit d6c53f0

Please sign in to comment.