Skip to content

Commit 0b23fea

Browse files
authored
test(e2e): add kitchen sink routes and tests for formData (#431)
1 parent 9947b52 commit 0b23fea

File tree

3 files changed

+116
-0
lines changed

3 files changed

+116
-0
lines changed
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
import 'dart:io';
2+
3+
import 'package:http/http.dart' as http;
4+
import 'package:test/test.dart';
5+
6+
void main() {
7+
group('E2E (/projects)', () {
8+
final contentTypeFormUrlEncodedHeader = {
9+
HttpHeaders.contentTypeHeader: ContentType(
10+
'application',
11+
'x-www-form-urlencoded',
12+
).mimeType,
13+
};
14+
15+
test('GET /projects responds 405', () async {
16+
final response = await http.get(
17+
Uri.parse('http://localhost:8080/projects'),
18+
);
19+
expect(response.statusCode, equals(HttpStatus.methodNotAllowed));
20+
});
21+
22+
test('POST /projects responds with project configuration', () async {
23+
final response = await http.post(
24+
Uri.parse('http://localhost:8080/projects'),
25+
headers: contentTypeFormUrlEncodedHeader,
26+
body: 'name=my_app&version=3.0.0',
27+
);
28+
expect(response.statusCode, equals(HttpStatus.ok));
29+
expect(
30+
response.body,
31+
equals('{"project_configuration":{"name":"my_app","version":"3.0.0"}}'),
32+
);
33+
});
34+
});
35+
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
import 'dart:io';
2+
3+
import 'package:dart_frog/dart_frog.dart';
4+
5+
Future<Response> onRequest(RequestContext context) async {
6+
final method = context.request.method;
7+
if (method != HttpMethod.post) {
8+
return Response(statusCode: HttpStatus.methodNotAllowed);
9+
}
10+
11+
final data = await context.request.formData();
12+
return Response.json(body: {'project_configuration': data});
13+
}
Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
import 'dart:io';
2+
3+
import 'package:dart_frog/dart_frog.dart';
4+
import 'package:mocktail/mocktail.dart';
5+
import 'package:test/test.dart';
6+
7+
import '../../../routes/projects/index.dart' as route;
8+
9+
class _MockRequestContext extends Mock implements RequestContext {}
10+
11+
void main() {
12+
group('GET /', () {
13+
test('responds with a 405', () async {
14+
final request = Request.get(Uri.parse('http://localhost/'));
15+
final context = _MockRequestContext();
16+
when(() => context.request).thenReturn(request);
17+
final response = await route.onRequest(context);
18+
expect(response.statusCode, equals(HttpStatus.methodNotAllowed));
19+
expect(response.body(), completion(isEmpty));
20+
});
21+
});
22+
23+
group('POST /', () {
24+
final contentTypeFormUrlEncodedHeader = {
25+
HttpHeaders.contentTypeHeader: ContentType(
26+
'application',
27+
'x-www-form-urlencoded',
28+
).mimeType,
29+
};
30+
test('responds with a 200 and an empty project configuration', () async {
31+
final request = Request.post(
32+
Uri.parse('http://localhost/'),
33+
headers: contentTypeFormUrlEncodedHeader,
34+
);
35+
final context = _MockRequestContext();
36+
when(() => context.request).thenReturn(request);
37+
final response = await route.onRequest(context);
38+
expect(response.statusCode, equals(HttpStatus.ok));
39+
expect(
40+
response.json(),
41+
completion(equals({'project_configuration': const <String, String>{}})),
42+
);
43+
});
44+
45+
test('responds with a 200 and a populated project configuration', () async {
46+
final request = Request.post(
47+
Uri.parse('http://localhost/'),
48+
headers: contentTypeFormUrlEncodedHeader,
49+
body: 'name=my_app&version=3.3.8',
50+
);
51+
final context = _MockRequestContext();
52+
when(() => context.request).thenReturn(request);
53+
final response = await route.onRequest(context);
54+
expect(response.statusCode, equals(HttpStatus.ok));
55+
expect(
56+
response.json(),
57+
completion(
58+
equals({
59+
'project_configuration': const <String, String>{
60+
'name': 'my_app',
61+
'version': '3.3.8'
62+
}
63+
}),
64+
),
65+
);
66+
});
67+
});
68+
}

0 commit comments

Comments
 (0)