Skip to content

Commit

Permalink
fix(dynamite_runtime): also send base headers like specified useragen…
Browse files Browse the repository at this point in the history
…t in raw requests

Signed-off-by: Nikolas Rimikis <leptopoda@users.noreply.github.com>
  • Loading branch information
Leptopoda committed Jan 25, 2024
1 parent ce65dc5 commit 6ffd802
Show file tree
Hide file tree
Showing 2 changed files with 105 additions and 45 deletions.
18 changes: 11 additions & 7 deletions packages/dynamite/dynamite_runtime/lib/src/dynamite_client.dart
Original file line number Diff line number Diff line change
Expand Up @@ -420,7 +420,7 @@ class DynamiteClient {
Future<http.StreamedResponse> executeRequest(
String method,
String path,
Map<String, String> headers,
Map<String, String>? headers,
Uint8List? body,
Set<int>? validStatuses,
) {
Expand All @@ -429,10 +429,7 @@ class DynamiteClient {
return executeRawRequest(
method,
uri,
{
...?baseHeaders,
...headers,
},
headers,
body,
validStatuses,
);
Expand All @@ -442,12 +439,19 @@ class DynamiteClient {
Future<http.StreamedResponse> executeRawRequest(
String method,
Uri uri,
Map<String, String> headers,
Map<String, String>? headers,
Uint8List? body,
Set<int>? validStatuses,
) async {
final request = http.Request(method, uri);
request.headers.addAll(headers);

if (baseHeaders != null) {
request.headers.addAll(baseHeaders!);
}

if (headers != null) {
request.headers.addAll(headers);
}

if (body != null) {
request.bodyBytes = body;
Expand Down
132 changes: 94 additions & 38 deletions packages/dynamite/dynamite_runtime/test/client_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -5,54 +5,110 @@ import 'package:test/test.dart';

void main() {
final uri = Uri.parse('http://example.com');
late CookieJar cookieJar;

setUp(() {
cookieJar = CookieJar();
});
group('Cookies', () {
late CookieJar cookieJar;
setUp(() {
cookieJar = CookieJar();
});

test('Cookies', () async {
final mockedClient = MockClient((request) async {
expect(request.headers['cookie'], equals(Cookie('a', 'b').toString()));
test('Cookies', () async {
final mockedClient = MockClient((request) async {
expect(request.headers['cookie'], equals(Cookie('a', 'b').toString()));

return Response(
'',
200,
headers: {
'set-cookie': Cookie('c', 'd').toString(),
},
return Response(
'',
200,
headers: {
'set-cookie': Cookie('c', 'd').toString(),
},
);
});

final client = DynamiteClient(
uri,
httpClient: mockedClient,
cookieJar: cookieJar,
);

await cookieJar.saveFromResponse(uri, [Cookie('a', 'b')]);
await client.executeRequest('GET', '', {}, null, null);

final cookies = await cookieJar.loadForRequest(uri);
expect(cookies, hasLength(2));
expect(cookies[0].name, 'a');
expect(cookies[0].value, 'b');
expect(cookies[1].name, 'c');
expect(cookies[1].value, 'd');
});

final client = DynamiteClient(
uri,
httpClient: mockedClient,
cookieJar: cookieJar,
);

await cookieJar.saveFromResponse(uri, [Cookie('a', 'b')]);
await client.executeRequest('GET', '', {}, null, null);

final cookies = await cookieJar.loadForRequest(uri);
expect(cookies, hasLength(2));
expect(cookies[0].name, 'a');
expect(cookies[0].value, 'b');
expect(cookies[1].name, 'c');
expect(cookies[1].value, 'd');
test('No cookies', () async {
final mockedClient = MockClient((request) async {
expect(request.headers['cookie'], isNull);
return Response('', 200);
});

final client = DynamiteClient(
uri,
httpClient: mockedClient,
cookieJar: cookieJar,
);

await client.executeRequest('GET', '', {}, null, null);
});
});

test('No cookies', () async {
final mockedClient = MockClient((request) async {
expect(request.headers['cookie'], isNull);
return Response('', 200);
group('headers', () {
test('raw request base headers', () async {
final mockedClient = MockClient((request) async {
expect(
request.headers,
equals({
'some-key': 'some-value',
}),
);

return Response(
'',
200,
);
});

final client = DynamiteClient(
uri,
httpClient: mockedClient,
baseHeaders: {
'some-key': 'some-value',
},
);

await client.executeRawRequest('GET', uri, null, null, null);
});

final client = DynamiteClient(
uri,
httpClient: mockedClient,
cookieJar: cookieJar,
);
test('request overwrites base headers', () async {
final mockedClient = MockClient((request) async {
expect(
request.headers,
equals({
'some-key': 'some-other-value',
}),
);

await client.executeRequest('GET', '', {}, null, null);
return Response(
'',
200,
);
});

final client = DynamiteClient(
uri,
httpClient: mockedClient,
baseHeaders: {
'some-key': 'some-value',
},
);

await client.executeRawRequest('GET', uri, {'some-key': 'some-other-value'}, null, null);
});
});
}

0 comments on commit 6ffd802

Please sign in to comment.