Skip to content

Commit

Permalink
updated tests using request methods without mocking dio
Browse files Browse the repository at this point in the history
  • Loading branch information
Uuttssaavv committed Sep 13, 2022
1 parent 49f5161 commit 1a82c0b
Showing 1 changed file with 38 additions and 29 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -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<Dio>(() => fakeDio);
mockRequest = MockRequest();
serviceLocator.registerFactory<Request>(() => mockRequest);
loginRemoteDataSource = LoginRemoteDataSourceImpl();
},
);
Expand All @@ -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<Response<T>> post<T>(String path,
{data,
Map<String, dynamic>? queryParameters,
Options? options,
CancelToken? cancelToken,
ProgressCallback? onSendProgress,
ProgressCallback? onReceiveProgress}) async {
return _reponse as Response<T>;
}
}
class MockRequest extends Mock implements Request {}

0 comments on commit 1a82c0b

Please sign in to comment.