invokeApi method

  1. @override
Future<HttpResponse> invokeApi(
  1. BuildContext context,
  2. YamlMap api,
  3. DataContext eContext,
  4. String apiName,
)
override

Implementation

@override
Future<HttpResponse> invokeApi(
  BuildContext context,
  YamlMap api,
  DataContext eContext,
  String apiName,
) async {
  if (simulateNetworkOffline) {
    calls.add(APICallRecord(
      name: apiName,
      apiDefinition: api,
      timestamp: DateTime.now(),
    ));
    return HttpResponse.fromBody(
      {'message': 'Network offline (test)'},
      null,
      503,
      null,
      APIState.error,
    );
  }

  final forced = _forcedExceptions[apiName];
  if (forced != null) {
    calls.add(APICallRecord(
      name: apiName,
      apiDefinition: api,
      timestamp: DateTime.now(),
    ));
    throw forced;
  }

  final captured = _captureRequest(api, eContext);
  calls.add(APICallRecord(
    name: apiName,
    apiDefinition: api,
    timestamp: DateTime.now(),
    body: captured.body,
    query: captured.query,
    headers: captured.headers,
  ));

  final mock = _mocks[apiName];
  if (mock == null) {
    return _delegate.invokeApi(context, api, eContext, apiName);
  }

  if (mock.delayMs != null && mock.delayMs! > 0) {
    await Future<void>.delayed(Duration(milliseconds: mock.delayMs!));
  }

  return HttpResponse.fromBody(
    mock.body,
    mock.headers?.map((k, v) => MapEntry(k, v.toString())),
    mock.statusCode,
    null,
    APIState.success,
  );
}