Skip to content

Instantly share code, notes, and snippets.

@ThomasLocke
Created September 29, 2014 15:41
Show Gist options
  • Save ThomasLocke/0dcfb5769dde6c9bea76 to your computer and use it in GitHub Desktop.
Save ThomasLocke/0dcfb5769dde6c9bea76 to your computer and use it in GitHub Desktop.
shelftest.handler_test.dart
import 'dart:async';
import 'dart:convert';
import 'dart:io' show HttpStatus;
import '../lib/routes.dart';
import 'package:junitconfiguration/junitconfiguration.dart';
import 'package:shelf/shelf.dart' as shelf;
import 'package:shelf_exception_response/exception.dart';
import 'package:shelf_path/shelf_path.dart';
import 'package:unittest/unittest.dart';
const String GET = 'GET';
const String POST = 'POST';
const String PUT = 'PUT';
/**
* Create a dummy Shelf.Request object.
*/
shelf.Request createRequest(String method, String path, {String body: ''}) {
return new shelf.Request(method,
Uri.parse('http://localhost${path}'),
body: new Stream.fromFuture(new Future.value(UTF8.encode(body))));
}
main() {
JUnitConfiguration.install();
group('Testing unknown route', () {
test('GET /unknown -> return 404 Not Found', () {
shelf.Request request = createRequest(GET, '/unknown');
shelf.Response response = routes.handler(request);
expect(response.statusCode, equals(HttpStatus.NOT_FOUND));
});
test('PUT /user/1 -> return 404 Not Found', () {
shelf.Request request = createRequest(PUT, '/user/1');
request = addPathParameters(request, {'userid':'1'});
shelf.Response response = routes.handler(request);
expect(response.statusCode, equals(HttpStatus.NOT_FOUND));
});
test('POST /user/1/name -> return 404 Not Found', () {
shelf.Request request = createRequest(POST, '/user/1/name', body: '{"name":"New Thomas Løcke"}');
request = addPathParameters(request, {'userid':'1'});
shelf.Response response = routes.handler(request);
expect(response.statusCode, equals(HttpStatus.NOT_FOUND));
});
});
group('Testing route', () {
test('GET /user/42 -> return 404 Not Found', () {
shelf.Request request = createRequest(GET, '/user/42');
request = addPathParameters(request, {'userid':'42'});
expect(() => routes.handler(request), throwsA(new isInstanceOf<NotFoundException>()));
});
test('GET /user/ZZZ -> return 400 Bad Request', () {
shelf.Request request = createRequest(GET, '/user/ZZZ');
request = addPathParameters(request, {'userid':'ZZZ'});
expect(() => routes.handler(request), throwsA(new isInstanceOf<BadRequestException>()));
});
test('GET /user/1 -> return 200 OK and output {"id":1,"name":"Thomas Løcke"}', () {
shelf.Request request = createRequest(GET, '/user/1');
request = addPathParameters(request, {'userid':'1'});
shelf.Response response = routes.handler(request);
expect(response.statusCode, equals(HttpStatus.OK));
expect(response.readAsString(), completion(equals('{"id":1,"name":"Thomas Løcke"}')));
});
test('PUT /user/42/name -> return 404 Not Found', () {
shelf.Request request = createRequest(PUT, '/user/42/name', body: '{"name":"42"}');
request = addPathParameters(request, {'userid':'42'});
routes.handler(request)
.then((_) => fail('did not raise a NotFoundException as expected'))
.catchError((error) {
expect(error, equals(new isInstanceOf<NotFoundException>()));
});
});
test('PUT /user/ZZZ/name -> return 400 Bad Request', () {
shelf.Request request = createRequest(PUT, '/user/ZZZ/name', body: '{"name":"ZZZ"}');
request = addPathParameters(request, {'userid':'ZZZ'});
routes.handler(request)
.then((_) => fail('did not raise a BadRequestException as expected'))
.catchError((error) {
expect(error, equals(new isInstanceOf<BadRequestException>()));
});
});
test('PUT /user/1/name with missing name key -> return 400 Bad Request', () {
shelf.Request request = createRequest(PUT, '/user/1/name', body: '{"":"missing name key"}');
request = addPathParameters(request, {'userid':'1'});
routes.handler(request)
.then((_) => fail('did not raise a BadRequestException as expected'))
.catchError((error) {
expect(error, equals(new isInstanceOf<BadRequestException>()));
});
});
test('PUT /user/1/name with empty name value -> return 400 Bad Request', () {
shelf.Request request = createRequest(PUT, '/user/1/name', body: '{"name":""}');
request = addPathParameters(request, {'userid':'1'});
routes.handler(request)
.then((_) => fail('did not raise a BadRequestException as expected'))
.catchError((error) {
expect(error, equals(new isInstanceOf<BadRequestException>()));
});
});
test('PUT /user/1/name with malformed body -> return 400 Bad Request', () {
shelf.Request request = createRequest(PUT, '/user/1/name', body: 'malformed!');
request = addPathParameters(request, {'userid':'1'});
routes.handler(request)
.then((_) => fail('did not raise a BadRequestException as expected'))
.catchError((error) {
expect(error, equals(new isInstanceOf<BadRequestException>()));
});
});
test('PUT /user/1/name -> return 200 OK and output {"id":1,"name":"New Thomas Løcke"}', () {
shelf.Request request = createRequest(PUT, '/user/1/name', body: '{"name":"New Thomas Løcke"}');
request = addPathParameters(request, {'userid':'1'});
routes.handler(request).then((shelf.Response response) {
expect(response.statusCode, equals(HttpStatus.OK));
expect(response.readAsString(), completion(equals('{"id":1,"name":"New Thomas Løcke"}')));
});
});
});
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment