repoServiceTestHttpUtil<T extends RepoServiceBase, DataType> function

Future<void> repoServiceTestHttpUtil<T extends RepoServiceBase, DataType>(
  1. T repoService(), {
  2. void setUp(
    1. HttpClientMock clientMock
    )?,
  3. required Future<Either<Failure, DataType>> act(
    1. T
    ),
  4. required dynamic verify(
    1. HttpClientMock clientMock,
    2. Either<Failure, DataType> response
    ),
  5. required String responseStubValue,
  6. int? statusCodeStubValue,
  7. Map<String, String> headersStubValue = const {HttpHeaders.contentTypeHeader : 'application/json; charset=utf-8'},
})

Creates a new RepoServiceBase-specific test case with the given repoService.

Implementation

Future<void> repoServiceTestHttpUtil<T extends RepoServiceBase, DataType>(
  T Function() repoService, {
  void Function(HttpClientMock clientMock)? setUp,
  required Future<Either<Failure, DataType>> Function(T) act,
  required Function(HttpClientMock clientMock, Either<Failure, DataType> response) verify,
  required String responseStubValue,
  int? statusCodeStubValue,
  Map<String, String> headersStubValue = const {
    HttpHeaders.contentTypeHeader: 'application/json; charset=utf-8',
  },
}) async {
  /// register http client mock, if not done already
  if (!GetIt.instance.isRegistered<IHttpClient>()) {
    GetIt.instance.registerSingleton<IHttpClient>(HttpClientMock());
  }

  T repoServiceBase = repoService();

  if (repoServiceBase.client is! HttpClientMock) {
    throw InvalidHttpClientMock();
  }

  HttpClientMock mockClient = repoServiceBase.client as HttpClientMock;

  _cleanAndResetClientMock(mockClient);

  _setStubbingOnHttpClient(
    mockClient,
    responseStubValue: responseStubValue,
    headersStubValue: headersStubValue,
    statusCodeStubValue: statusCodeStubValue,
  );
  setUp?.call(mockClient);

  final response = await act(repoServiceBase);

  verify(mockClient, response);

  // _cleanAndResetClientMock(mockClient);
}