Created
September 29, 2014 15:41
-
-
Save ThomasLocke/0dcfb5769dde6c9bea76 to your computer and use it in GitHub Desktop.
shelftest.handler_test.dart
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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