From 1a82c0bda7f10f8c261a2ee29a0d3090afba0100 Mon Sep 17 00:00:00 2001 From: Utsav Ghimire Date: Tue, 13 Sep 2022 23:30:16 +0545 Subject: [PATCH] updated tests using request methods without mocking dio --- .../login_remote_data_source_test.dart | 67 +++++++++++-------- 1 file changed, 38 insertions(+), 29 deletions(-) diff --git a/test/features/authentication/data/data_source/login_remote_data_source_test.dart b/test/features/authentication/data/data_source/login_remote_data_source_test.dart index b4a8a86..c330dc1 100644 --- a/test/features/authentication/data/data_source/login_remote_data_source_test.dart +++ b/test/features/authentication/data/data_source/login_remote_data_source_test.dart @@ -3,20 +3,22 @@ import 'dart:convert'; import 'package:dartz/dartz.dart'; import 'package:dio/dio.dart'; import 'package:flutter_project/core/failure.dart'; +import 'package:flutter_project/core/request.dart'; import 'package:flutter_project/core/service_locator.dart'; import 'package:flutter_project/features/auth/data/datasource/login_remote_datasource.dart'; import 'package:flutter_project/features/auth/data/models/user_model.dart'; import 'package:flutter_test/flutter_test.dart'; +import 'package:mocktail/mocktail.dart'; import '../../../../fixtures/fixture.dart'; void main() { - late FakeDio fakeDio; + late MockRequest mockRequest; late LoginRemoteDataSourceImpl loginRemoteDataSource; setUpAll( () { - fakeDio = FakeDio(); - serviceLocator.registerFactory(() => fakeDio); + mockRequest = MockRequest(); + serviceLocator.registerFactory(() => mockRequest); loginRemoteDataSource = LoginRemoteDataSourceImpl(); }, ); @@ -27,52 +29,59 @@ void main() { test( 'should return user model on successful login', () async { - fakeDio.response = Response( - requestOptions: RequestOptions(path: ''), - statusCode: 200, - data: user.toJson(), + when( + () => mockRequest.post( + any(), + data: any(named: 'data'), + ), + ).thenAnswer( + (_) async => Response( + statusCode: 200, + data: user.toJson(), + requestOptions: RequestOptions( + baseUrl: '', + path: '', + ), + ), ); final response = await loginRemoteDataSource.loginUser(user: User.fromJson({})); + expect(response, Right(user)); }, ); test( 'should return connection failure on login failed', () async { - fakeDio.response = Response( - requestOptions: RequestOptions(path: ''), - statusCode: 404, - data: {'message': 'Failure'}, + const String message = 'Unable to connect'; + when( + () => mockRequest.post( + any(), + data: any(named: 'data'), + ), + ).thenAnswer( + (_) async => Response( + statusCode: 400, + data: {'message': message}, + requestOptions: RequestOptions( + baseUrl: '', + path: '', + ), + ), ); final response = await loginRemoteDataSource.loginUser(user: User.fromJson({})); + expect( response, const Left( - ConnectionFailure('Failure'), + ConnectionFailure(message), ), ); }, ); } -class FakeDio extends Fake implements Dio { - late Response _reponse; - set response(Response res) { - _reponse = res; - } - - @override - Future> post(String path, - {data, - Map? queryParameters, - Options? options, - CancelToken? cancelToken, - ProgressCallback? onSendProgress, - ProgressCallback? onReceiveProgress}) async { - return _reponse as Response; - } -} +class MockRequest extends Mock implements Request {}