|
16 | 16 | @TestOn('vm')
|
17 | 17 | library;
|
18 | 18 |
|
| 19 | +import 'dart:collection'; |
19 | 20 | import 'dart:convert';
|
20 | 21 | import 'dart:io';
|
21 | 22 |
|
@@ -291,10 +292,90 @@ void main() {
|
291 | 292 | expect(response.body, equals('hello'));
|
292 | 293 | });
|
293 | 294 |
|
| 295 | + test('request exposes captured params (empty)', () async { |
| 296 | + final context = _MockRequestContext(); |
| 297 | + final app = Router() |
| 298 | + ..get('/hello', (RequestContext context) { |
| 299 | + expect( |
| 300 | + context.request.params, |
| 301 | + equals(UnmodifiableMapView<String, String>(const {})), |
| 302 | + ); |
| 303 | + return Response(body: 'hello world'); |
| 304 | + }); |
| 305 | + |
| 306 | + server.mount((request) async { |
| 307 | + when(() => context.request).thenReturn( |
| 308 | + Request(request.method, request.requestedUri), |
| 309 | + ); |
| 310 | + final response = await app(context); |
| 311 | + final body = await response.body(); |
| 312 | + return shelf.Response(response.statusCode, body: body); |
| 313 | + }); |
| 314 | + |
| 315 | + final response = await http.get(Uri.parse('${server.url}/hello')); |
| 316 | + expect(response.statusCode, equals(HttpStatus.ok)); |
| 317 | + expect(response.body, equals('hello world')); |
| 318 | + }); |
| 319 | + |
| 320 | + test('request exposes captured params (single)', () async { |
| 321 | + final context = _MockRequestContext(); |
| 322 | + final app = Router() |
| 323 | + ..get('/users/<id>/greet', (RequestContext context, String id) { |
| 324 | + expect( |
| 325 | + context.request.params, |
| 326 | + equals(UnmodifiableMapView<String, String>({'id': id})), |
| 327 | + ); |
| 328 | + return Response(body: 'hello $id'); |
| 329 | + }); |
| 330 | + |
| 331 | + server.mount((request) async { |
| 332 | + when(() => context.request).thenReturn( |
| 333 | + Request(request.method, request.requestedUri), |
| 334 | + ); |
| 335 | + final response = await app(context); |
| 336 | + final body = await response.body(); |
| 337 | + return shelf.Response(response.statusCode, body: body); |
| 338 | + }); |
| 339 | + |
| 340 | + final response = await http.get(Uri.parse('${server.url}/users/42/greet')); |
| 341 | + expect(response.statusCode, equals(HttpStatus.ok)); |
| 342 | + expect(response.body, equals('hello 42')); |
| 343 | + }); |
| 344 | + |
| 345 | + test('request exposes captured params (multiple)', () async { |
| 346 | + final context = _MockRequestContext(); |
| 347 | + final app = Router() |
| 348 | + ..get('/users/<id>/greet/<name>', ( |
| 349 | + RequestContext context, |
| 350 | + String id, |
| 351 | + String name, |
| 352 | + ) { |
| 353 | + expect( |
| 354 | + context.request.params, |
| 355 | + equals(UnmodifiableMapView<String, String>({'id': id, 'name': name})), |
| 356 | + ); |
| 357 | + return Response(body: 'hello $name ($id)'); |
| 358 | + }); |
| 359 | + |
| 360 | + server.mount((request) async { |
| 361 | + when(() => context.request).thenReturn( |
| 362 | + Request(request.method, request.requestedUri), |
| 363 | + ); |
| 364 | + final response = await app(context); |
| 365 | + final body = await response.body(); |
| 366 | + return shelf.Response(response.statusCode, body: body); |
| 367 | + }); |
| 368 | + |
| 369 | + final response = |
| 370 | + await http.get(Uri.parse('${server.url}/users/42/greet/felangel')); |
| 371 | + expect(response.statusCode, equals(HttpStatus.ok)); |
| 372 | + expect(response.body, equals('hello felangel (42)')); |
| 373 | + }); |
| 374 | + |
294 | 375 | test('mount(Router)', () async {
|
295 | 376 | final context = _MockRequestContext();
|
296 | 377 | final api = Router()
|
297 |
| - ..all('/user/<user>/info', (RequestContext request, String user) { |
| 378 | + ..all('/user/<user>/info', (RequestContext context, String user) { |
298 | 379 | return Response(body: 'Hello $user');
|
299 | 380 | });
|
300 | 381 |
|
|
0 commit comments