Skip to content

Commit

Permalink
Move some header tests
Browse files Browse the repository at this point in the history
  • Loading branch information
kuhnroyal committed Mar 27, 2024
1 parent 6abd338 commit 5a8c486
Show file tree
Hide file tree
Showing 2 changed files with 137 additions and 140 deletions.
140 changes: 0 additions & 140 deletions dio/test/options_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -13,39 +13,6 @@ import 'mock/http_mock.mocks.dart';
import 'utils.dart';

void main() {
setUp(startServer);
tearDown(stopServer);

test('headers are kept after redirects', () async {
final dio = Dio(
BaseOptions(
baseUrl: serverUrl.toString(),
headers: {'x-test-base': 'test-base'},
),
);
final response = await dio.get(
'/redirect',
options: Options(headers: {'x-test-header': 'test-value'}),
);
expect(response.isRedirect, isTrue);
expect(
response.data['headers']['x-test-base'].single,
equals('test-base'),
);
expect(
response.data['headers']['x-test-header'].single,
equals('test-value'),
);
expect(
response.requestOptions.headers['x-test-base'],
equals('test-base'),
);
expect(
response.requestOptions.headers['x-test-header'],
equals('test-value'),
);
});

test('options', () {
final map = {'a': '5'};
final mapOverride = {'b': '6'};
Expand Down Expand Up @@ -256,113 +223,6 @@ void main() {
ro3.copyWith();
});

test('default content-type', () async {
final dio = Dio();
dio.options.baseUrl = EchoAdapter.mockBase;
dio.httpClientAdapter = EchoAdapter();

final r1 = await dio.get('');
expect(
r1.requestOptions.headers[Headers.contentTypeHeader],
null,
);

final r2 = await dio.get(
'',
options: Options(contentType: Headers.jsonContentType),
);
expect(
r2.requestOptions.headers[Headers.contentTypeHeader],
Headers.jsonContentType,
);

final r3 = await dio.get(
'',
options: Options(
headers: {Headers.contentTypeHeader: Headers.jsonContentType},
),
);
expect(
r3.requestOptions.headers[Headers.contentTypeHeader],
Headers.jsonContentType,
);

final r4 = await dio.post('', data: '');
expect(
r4.requestOptions.headers[Headers.contentTypeHeader],
Headers.jsonContentType,
);

final r5 = await dio.get(
'',
options: Options(
// Final result should respect this.
contentType: Headers.textPlainContentType,
// Rather than this.
headers: {Headers.contentTypeHeader: Headers.formUrlEncodedContentType},
),
);
expect(
r5.requestOptions.headers[Headers.contentTypeHeader],
Headers.textPlainContentType,
);

final r6 = await dio.get(
'',
data: '',
options: Options(
contentType: Headers.formUrlEncodedContentType,
headers: {Headers.contentTypeHeader: Headers.jsonContentType},
),
);
expect(
r6.requestOptions.headers[Headers.contentTypeHeader],
Headers.formUrlEncodedContentType,
);

// Update the base option.
dio.options.contentType = Headers.textPlainContentType;
final r7 = await dio.get('');
expect(
r7.requestOptions.headers[Headers.contentTypeHeader],
Headers.textPlainContentType,
);

final r8 = await dio.get(
'',
options: Options(contentType: Headers.jsonContentType),
);
expect(
r8.requestOptions.headers[Headers.contentTypeHeader],
Headers.jsonContentType,
);

final r9 = await dio.get(
'',
options: Options(
headers: {Headers.contentTypeHeader: Headers.jsonContentType},
),
);
expect(
r9.requestOptions.headers[Headers.contentTypeHeader],
Headers.jsonContentType,
);

final r10 = await dio.post('', data: FormData());
expect(
r10.requestOptions.contentType,
startsWith(Headers.multipartFormDataContentType),
);

// Regression: https://github.com/cfug/dio/issues/1834
final r11 = await dio.get('');
expect(r11.data, '');
final r12 = await dio.get<Map>('');
expect(r12.data, null);
final r13 = await dio.get<Map<String, Object>>('');
expect(r13.data, null);
});

test('default content-type 2', () async {
final dio = Dio();
dio.options.baseUrl = 'https://www.example.com';
Expand Down
137 changes: 137 additions & 0 deletions dio_test/lib/src/test/headers_tests.dart
Original file line number Diff line number Diff line change
Expand Up @@ -49,5 +49,142 @@ void headerTests(
expect(content, contains('Numkey: 2'));
expect(content, contains('Booleankey: false'));
});

test(
'headers are kept after redirects',
() async {
dio.options.headers.putIfAbsent('x-test-base', () => 'test-base');

final response = await dio.get(
'/redirect/3',
options: Options(headers: {'x-test-header': 'test-value'}),
);
expect(response.isRedirect, isTrue);
// The returned headers are uppercased by the server.
expect(
response.data['headers']['X-Test-Base'],
equals('test-base'),
);
expect(
response.data['headers']['X-Test-Header'],
equals('test-value'),
);
// The sent headers are still lowercase.
expect(
response.requestOptions.headers['x-test-base'],
equals('test-base'),
);
expect(
response.requestOptions.headers['x-test-header'],
equals('test-value'),
);
},
testOn: 'vm',
);

test('default content-type', () async {
final r1 = await dio.get('/get');
expect(
r1.requestOptions.headers[Headers.contentTypeHeader],
null,
);

final r2 = await dio.get(
'/get',
options: Options(contentType: Headers.jsonContentType),
);
expect(
r2.requestOptions.headers[Headers.contentTypeHeader],
Headers.jsonContentType,
);

final r3 = await dio.get(
'/get',
options: Options(
headers: {Headers.contentTypeHeader: Headers.jsonContentType},
),
);
expect(
r3.requestOptions.headers[Headers.contentTypeHeader],
Headers.jsonContentType,
);

final r4 = await dio.post('/post', data: '');
expect(
r4.requestOptions.headers[Headers.contentTypeHeader],
Headers.jsonContentType,
);

final r5 = await dio.get(
'/get',
options: Options(
// Final result should respect this.
contentType: Headers.textPlainContentType,
// Rather than this.
headers: {
Headers.contentTypeHeader: Headers.formUrlEncodedContentType
},
),
);
expect(
r5.requestOptions.headers[Headers.contentTypeHeader],
Headers.textPlainContentType,
);

final r6 = await dio.get(
'/get',
data: '',
options: Options(
contentType: Headers.formUrlEncodedContentType,
headers: {Headers.contentTypeHeader: Headers.jsonContentType},
),
);
expect(
r6.requestOptions.headers[Headers.contentTypeHeader],
Headers.formUrlEncodedContentType,
);

// Update the base option.
dio.options.contentType = Headers.textPlainContentType;
final r7 = await dio.get('/get');
expect(
r7.requestOptions.headers[Headers.contentTypeHeader],
Headers.textPlainContentType,
);

final r8 = await dio.get(
'/get',
options: Options(contentType: Headers.jsonContentType),
);
expect(
r8.requestOptions.headers[Headers.contentTypeHeader],
Headers.jsonContentType,
);

final r9 = await dio.get(
'/get',
options: Options(
headers: {Headers.contentTypeHeader: Headers.jsonContentType},
),
);
expect(
r9.requestOptions.headers[Headers.contentTypeHeader],
Headers.jsonContentType,
);

final r10 = await dio.post('/post', data: FormData());
expect(
r10.requestOptions.contentType,
startsWith(Headers.multipartFormDataContentType),
);

// Regression: https://github.com/cfug/dio/issues/1834
final r11 = await dio.get('/payload');
expect(r11.data, '');
final r12 = await dio.get<Map>('/payload');
expect(r12.data, null);
final r13 = await dio.get<Map<String, Object>>('/payload');
expect(r13.data, null);
});
});
}

0 comments on commit 5a8c486

Please sign in to comment.