diff --git a/README.md b/README.md index 7bd3c9cc..63728e38 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,5 @@ # angel_test +[![version 1.0.1](https://img.shields.io/badge/pub-1.0.1-brightgreen.svg)](https://pub.dartlang.org/packages/angel_test) [![build status](https://travis-ci.org/angel-dart/test.svg?branch=master)](https://travis-ci.org/angel-dart/test) Testing utility library for the Angel framework. diff --git a/lib/src/client.dart b/lib/src/client.dart index 0a64a090..f229412f 100644 --- a/lib/src/client.dart +++ b/lib/src/client.dart @@ -44,11 +44,33 @@ Future connectTo(Angel app, } Future mock(Angel app, String method, Uri uri, - {Iterable cookies: const [], + {body, + Iterable cookies: const [], Map headers: const {}}) async { var rq = new MockHttpRequest(method, uri); rq.cookies.addAll(cookies ?? []); headers.forEach(rq.headers.add); + + if (body is! Map) { + rq.write(body); + } else if (rq.headers.contentType == null || + rq.headers.contentType.mimeType == ContentType.JSON.mimeType) { + rq + ..headers.contentType = ContentType.JSON + ..write(JSON.encode(body)); + } else if (rq.headers.contentType.mimeType == + 'application/x-www-form-urlencoded') { + rq + ..headers.contentType = + new ContentType('application', 'x-www-form-urlencoded') + ..write(body.keys.fold>( + [], + (out, k) => + out..add('$k=' + Uri.encodeComponent(body[k]))).join('&')); + } else + throw new UnsupportedError( + 'mock() only supports sending JSON or URL-encoded bodies.'); + await rq.close(); await app.handleRequest(rq); return rq.response; diff --git a/pubspec.yaml b/pubspec.yaml index c7f542d3..6a1633ac 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -2,7 +2,7 @@ author: "Tobe O " description: "Testing utility library for the Angel framework." homepage: "https://github.com/angel-dart/test.git" name: "angel_test" -version: "1.0.0" +version: "1.0.1" dependencies: angel_client: "^1.0.0-dev+16" angel_framework: "^1.0.0-dev" diff --git a/test/simple_test.dart b/test/simple_test.dart index e26f6591..d378ddc5 100644 --- a/test/simple_test.dart +++ b/test/simple_test.dart @@ -1,3 +1,4 @@ +import 'dart:convert'; import 'package:angel_framework/angel_framework.dart' as server; import 'package:angel_test/angel_test.dart'; import 'package:test/test.dart'; @@ -21,6 +22,11 @@ main() { app = null; }); + test('mock()', () async { + var response = await mock(app, 'GET', Uri.parse('/hello')); + expect(await response.transform(UTF8.decoder).join(), equals('"Hello"')); + }); + group('isJson+hasStatus', () { test('get', () async { final response = await testClient.get('/hello');