Add a fake response for PNG images (#1081)
diff --git a/pkgs/http/CHANGELOG.md b/pkgs/http/CHANGELOG.md
index 9bbbb05..7b8dec4 100644
--- a/pkgs/http/CHANGELOG.md
+++ b/pkgs/http/CHANGELOG.md
@@ -1,3 +1,7 @@
+## 1.1.3-wip
+
+* Add `MockClient.pngResponse`, which makes it easier to fake image responses.
+
## 1.1.2
* Allow `web: '>=0.3.0 <0.5.0'`.
diff --git a/pkgs/http/lib/src/mock_client.dart b/pkgs/http/lib/src/mock_client.dart
index bf2df40..52f108a 100644
--- a/pkgs/http/lib/src/mock_client.dart
+++ b/pkgs/http/lib/src/mock_client.dart
@@ -2,6 +2,8 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
+import 'dart:convert';
+
import 'base_client.dart';
import 'base_request.dart';
import 'byte_stream.dart';
@@ -10,6 +12,11 @@
import 'streamed_request.dart';
import 'streamed_response.dart';
+final _pngImageData = base64Decode(
+ 'iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mP8z8BQDw'
+ 'AEhQGAhKmMIQAAAABJRU5ErkJggg==',
+);
+
// TODO(nweiz): once Dart has some sort of Rack- or WSGI-like standard for
// server APIs, MockClient should conform to it.
@@ -69,6 +76,17 @@
var bodyStream = request.finalize();
return await _handler(request, bodyStream);
}
+
+ /// Return a response containing a PNG image.
+ static Response pngResponse({BaseRequest? request}) {
+ final headers = {
+ 'content-type': 'image/png',
+ 'content-length': '${_pngImageData.length}'
+ };
+
+ return Response.bytes(_pngImageData, 200,
+ request: request, headers: headers, reasonPhrase: 'OK');
+ }
}
/// A handler function that receives [StreamedRequest]s and sends
diff --git a/pkgs/http/pubspec.yaml b/pkgs/http/pubspec.yaml
index 118292f..1645f96 100644
--- a/pkgs/http/pubspec.yaml
+++ b/pkgs/http/pubspec.yaml
@@ -1,5 +1,5 @@
name: http
-version: 1.1.2
+version: 1.1.3-wip
description: A composable, multi-platform, Future-based API for HTTP requests.
repository: https://github.com/dart-lang/http/tree/master/pkgs/http
diff --git a/pkgs/http/test/mock_client_test.dart b/pkgs/http/test/mock_client_test.dart
index db561c5..625285c 100644
--- a/pkgs/http/test/mock_client_test.dart
+++ b/pkgs/http/test/mock_client_test.dart
@@ -5,6 +5,7 @@
import 'dart:convert';
import 'package:http/http.dart' as http;
+import 'package:http/src/request.dart';
import 'package:http/testing.dart';
import 'package:test/test.dart';
@@ -43,4 +44,25 @@
expect(await client.read(Uri.http('example.com', '/foo')),
equals('you did it'));
});
+
+ test('pngResponse with default options', () {
+ final response = MockClient.pngResponse();
+ expect(response.statusCode, 200);
+ expect(response.bodyBytes.take(8),
+ [137, 80, 78, 71, 13, 10, 26, 10] // PNG header
+ );
+ expect(response.request, null);
+ expect(response.headers, containsPair('content-type', 'image/png'));
+ });
+
+ test('pngResponse with request', () {
+ final request = Request('GET', Uri.https('example.com'));
+ final response = MockClient.pngResponse(request: request);
+ expect(response.statusCode, 200);
+ expect(response.bodyBytes.take(8),
+ [137, 80, 78, 71, 13, 10, 26, 10] // PNG header
+ );
+ expect(response.request, request);
+ expect(response.headers, containsPair('content-type', 'image/png'));
+ });
}