send method

  1. @override
Future<StreamedResponse> send(
  1. BaseRequest request
)
override

Sends an HTTP request and asynchronously returns the response.

Implementers should call BaseRequest.finalize to get the body of the request as a ByteStream. They shouldn't make any assumptions about the state of the stream; it could have data written to it asynchronously at a later point, or it could already be closed when it's returned. Any internal HTTP errors should be wrapped as ClientExceptions.

Implementation

@override
Future<StreamedResponse> send(BaseRequest request) async {
  final intercept = interceptor.interceptUrl(
    request.method,
    request.url,
    headers: request.headers,
  );

  if (intercept != null) {
    return StreamedResponse(
      Stream.value(intercept.bodyBytes),
      intercept.statusCode,
      headers: {
        'Content-Type':
            'application/text; charset=${intercept.encoding.name}',
        ...intercept.headers,
      },
    );
  }

  final urlPath = request.url.pathSegments.join('_');
  final filename = '${request.method}-$urlPath ${request.url.query}';
  final fullFilename = '${filename.trim()}.json';

  final file = File('test_recordings/_all/$fullFilename');

  if (isUpdatingRecordings) {
    final streamedResponse = await sourceClient.send(request);
    await _writeResponse(await Response.fromStream(streamedResponse), file);
  }

  if (!(await file.exists())) {
    throw RecordingNotFoundException(request, file.path);
  }

  return await _readResponse(file);
}