2017-07-23 15:50:37 +00:00
|
|
|
import 'package:angel_framework/angel_framework.dart';
|
|
|
|
import 'package:angel_html/angel_html.dart';
|
|
|
|
import 'package:angel_test/angel_test.dart';
|
|
|
|
import 'package:html_builder/elements.dart';
|
|
|
|
import 'package:html_builder/html_builder.dart';
|
|
|
|
import 'package:test/test.dart';
|
|
|
|
|
2021-06-20 12:37:20 +00:00
|
|
|
void main() {
|
2017-07-23 15:50:37 +00:00
|
|
|
Angel app;
|
2021-06-20 12:37:20 +00:00
|
|
|
late TestClient client;
|
2017-07-23 15:50:37 +00:00
|
|
|
|
|
|
|
setUp(() async {
|
2021-06-20 12:37:20 +00:00
|
|
|
app = Angel();
|
2017-07-23 15:50:37 +00:00
|
|
|
|
2019-01-06 18:11:11 +00:00
|
|
|
app.fallback(renderHtml());
|
2017-07-23 15:50:37 +00:00
|
|
|
|
2019-01-06 18:11:11 +00:00
|
|
|
app.get('/html', (req, res) {
|
2017-07-23 15:50:37 +00:00
|
|
|
return html(c: [
|
|
|
|
head(c: [
|
|
|
|
title(c: [text('ok')])
|
|
|
|
])
|
|
|
|
]);
|
|
|
|
});
|
|
|
|
|
2019-01-06 18:11:11 +00:00
|
|
|
app.get(
|
|
|
|
'/strict',
|
|
|
|
chain([
|
|
|
|
renderHtml(
|
|
|
|
enforceAcceptHeader: true,
|
2021-06-20 12:37:20 +00:00
|
|
|
renderer: StringRenderer(
|
|
|
|
//doctype: null,
|
2019-01-06 18:11:11 +00:00
|
|
|
pretty: false,
|
|
|
|
),
|
|
|
|
),
|
|
|
|
(req, res) {
|
|
|
|
return div(c: [text('strict')]);
|
|
|
|
},
|
|
|
|
]),
|
|
|
|
);
|
2017-07-23 15:50:37 +00:00
|
|
|
client = await connectTo(app);
|
|
|
|
});
|
|
|
|
|
|
|
|
tearDown(() => client.close());
|
|
|
|
|
|
|
|
test('sets content type and body', () async {
|
2021-06-20 12:37:20 +00:00
|
|
|
var response = await client.get(Uri.parse('/html'));
|
2017-07-23 15:50:37 +00:00
|
|
|
print('Response: ${response.body}');
|
|
|
|
|
|
|
|
expect(
|
|
|
|
response,
|
2019-01-06 18:11:11 +00:00
|
|
|
allOf(
|
|
|
|
hasContentType('text/html'),
|
|
|
|
hasBody(
|
|
|
|
'<!DOCTYPE html><html><head><title>ok</title></head></html>')));
|
2017-07-23 15:50:37 +00:00
|
|
|
});
|
|
|
|
|
|
|
|
group('enforce accept header', () {
|
|
|
|
test('sends if correct accept or wildcard', () async {
|
2021-06-20 12:37:20 +00:00
|
|
|
var response =
|
|
|
|
await client.get(Uri.parse('/strict'), headers: {'accept': '*/*'});
|
2017-07-23 15:50:37 +00:00
|
|
|
print('Response: ${response.body}');
|
|
|
|
expect(response,
|
|
|
|
allOf(hasContentType('text/html'), hasBody('<div>strict</div>')));
|
|
|
|
|
2021-06-20 12:37:20 +00:00
|
|
|
response = await client.get(Uri.parse('/strict'),
|
2017-07-23 15:50:37 +00:00
|
|
|
headers: {'accept': 'text/html,application/json,text/xml'});
|
|
|
|
print('Response: ${response.body}');
|
|
|
|
expect(response,
|
|
|
|
allOf(hasContentType('text/html'), hasBody('<div>strict</div>')));
|
|
|
|
});
|
|
|
|
|
|
|
|
test('throws if incorrect or no accept', () async {
|
2021-06-20 12:37:20 +00:00
|
|
|
var response = await client.get(Uri.parse('/strict'));
|
|
|
|
print('Response: ${response.statusCode} ${response.body}');
|
2019-01-06 18:11:11 +00:00
|
|
|
expect(response, hasStatus(406));
|
2017-07-23 15:50:37 +00:00
|
|
|
|
2021-06-20 12:37:20 +00:00
|
|
|
response = await client.get(Uri.parse('/strict'),
|
|
|
|
headers: {'accept': 'application/json,text/xml'});
|
2017-07-23 15:50:37 +00:00
|
|
|
print('Response: ${response.body}');
|
|
|
|
expect(response,
|
|
|
|
isAngelHttpException(statusCode: 406, message: '406 Not Acceptable'));
|
|
|
|
});
|
|
|
|
});
|
|
|
|
}
|