import 'dart:convert'; import 'dart:typed_data'; import 'package:dio/dio.dart'; /// Sequential fake adapter for deterministic Dio unit tests. typedef AdapterHandler = Future Function( RequestOptions options, Stream? requestStream, Future? cancelFuture, ); class QueueHttpClientAdapter implements HttpClientAdapter { QueueHttpClientAdapter(List handlers) : _handlers = List.from(handlers); final List _handlers; int fetchCount = 0; @override void close({bool force = false}) {} @override Future fetch( RequestOptions options, Stream? requestStream, Future? cancelFuture, ) async { if (fetchCount >= _handlers.length) { throw StateError( 'No queued response for ${options.method} ${options.path} at call $fetchCount', ); } final AdapterHandler handler = _handlers[fetchCount]; fetchCount += 1; return handler(options, requestStream, cancelFuture); } } ResponseBody jsonResponse( int statusCode, Map body, { Map> headers = const >{}, }) { return ResponseBody.fromString( jsonEncode(body), statusCode, headers: >{ Headers.contentTypeHeader: [Headers.jsonContentType], ...headers, }, ); }