From 53f094548890da66b544f166961fc2a422ff7ffd Mon Sep 17 00:00:00 2001 From: Brian Quinlan Date: Fri, 15 Dec 2023 12:23:05 -0800 Subject: [PATCH 1/2] Add a fake image response --- pkgs/http/CHANGELOG.md | 4 ++++ pkgs/http/lib/src/mock_client.dart | 11 +++++++++++ pkgs/http/pubspec.yaml | 2 +- 3 files changed, 16 insertions(+), 1 deletion(-) diff --git a/pkgs/http/CHANGELOG.md b/pkgs/http/CHANGELOG.md index 9bbbb05a2d..7b8dec4fdd 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 bf2df40ee7..18ee193f21 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'; @@ -69,6 +71,15 @@ class MockClient extends BaseClient { var bodyStream = request.finalize(); return await _handler(request, bodyStream); } + + /// Return a response containing a PNG image. + static Response pngResponse() => Response.bytes( + base64Decode( + 'iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mP8z8BQDwAEhQ' + 'GAhKmMIQAAAABJRU5ErkJggg==', + ), + 200, + headers: const {'Content-Type': 'image/png'}); } /// A handler function that receives [StreamedRequest]s and sends diff --git a/pkgs/http/pubspec.yaml b/pkgs/http/pubspec.yaml index 118292fa13..1645f96048 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 From 27b4b1e77c7b12d8bf283242bcbc6dd700266df1 Mon Sep 17 00:00:00 2001 From: Brian Quinlan Date: Fri, 15 Dec 2023 13:00:57 -0800 Subject: [PATCH 2/2] More --- pkgs/http/lib/src/mock_client.dart | 21 ++++++++++++++------- pkgs/http/test/mock_client_test.dart | 22 ++++++++++++++++++++++ 2 files changed, 36 insertions(+), 7 deletions(-) diff --git a/pkgs/http/lib/src/mock_client.dart b/pkgs/http/lib/src/mock_client.dart index 18ee193f21..52f108a577 100644 --- a/pkgs/http/lib/src/mock_client.dart +++ b/pkgs/http/lib/src/mock_client.dart @@ -12,6 +12,11 @@ import 'response.dart'; 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. @@ -73,13 +78,15 @@ class MockClient extends BaseClient { } /// Return a response containing a PNG image. - static Response pngResponse() => Response.bytes( - base64Decode( - 'iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mP8z8BQDwAEhQ' - 'GAhKmMIQAAAABJRU5ErkJggg==', - ), - 200, - headers: const {'Content-Type': 'image/png'}); + 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/test/mock_client_test.dart b/pkgs/http/test/mock_client_test.dart index db561c51d6..625285cb33 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 @@ void main() { 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')); + }); }