Skip to content

Commit 83672f8

Browse files
committed
Added browser clients tests including test fixes
1 parent 410d227 commit 83672f8

File tree

5 files changed

+82
-79
lines changed

5 files changed

+82
-79
lines changed

pkgs/http/CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
## 1.5.0
2+
3+
* Added caching options for `BrowserClient` with fixing tests.
4+
15
## 1.4.0-wip
26

37
* Fixed default encoding for application/json without a charset

pkgs/http/test/html/cache_test.dart

Lines changed: 40 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -9,94 +9,76 @@ import 'dart:async';
99

1010
import 'package:http/browser_client.dart';
1111
import 'package:http/http.dart' as http;
12-
import 'package:http/src/exception.dart';
12+
import 'package:http/http.dart';
1313
import 'package:test/test.dart';
1414

1515
import 'utils.dart';
1616

1717
void main() {
18-
late int port;
18+
late Uri url;
1919
setUp(() async {
20-
final channel = spawnHybridUri(Uri(path: '/test/stub_server.dart'),
21-
stayAlive: true);
22-
port = await channel.stream.first as int;
20+
final channel = spawnHybridUri(Uri(path: '/test/stub_server.dart'));
21+
var port = await channel.stream.first as int;
22+
url = echoUrl.replace(port: port);
2323
});
2424

25-
test('#send a POST Request with default type', () async {
26-
var client = BrowserClient();
27-
28-
var request = http.StreamedRequest('POST', echoUrl.replace(port: port));
29-
var responseFuture = client.send(request);
30-
request.sink.add('{"hello": "world"}'.codeUnits);
31-
unawaited(request.sink.close());
32-
33-
var response = await responseFuture;
34-
35-
client.close();
36-
37-
expect(response.statusCode, 200);
38-
expect('response', response.contentLength);
39-
client.close();
40-
41-
});
42-
43-
test('#send a StreamedRequest with default type', () async {
25+
test('#send a GET with default type', () async {
4426
var client = BrowserClient(cacheMode: CacheMode.defaultType);
45-
var request = http.StreamedRequest('POST', echoUrl);
46-
var responseFuture = client.send(request);
47-
request.sink.add('{"hello": "world"}'.codeUnits);
48-
unawaited(request.sink.close());
49-
50-
var response = await responseFuture;
51-
27+
await client.get(url);
28+
var response = await client.get(url);
5229
client.close();
5330

5431
expect(response.statusCode, 200);
5532
expect(response.reasonPhrase, 'OK');
56-
}, skip: 'Need to fix server tests for browser');
33+
expect(response.body, parse(allOf(containsPair('numOfRequests', 2))));
34+
});
5735

58-
test('#send a POST Request with reload type', () async {
36+
test('#send a GET Request with reload type', () async {
5937
var client = BrowserClient(cacheMode: CacheMode.reload);
38+
await client.get(url);
39+
var response = await client.get(url);
40+
expect(response.body, parse(allOf(containsPair('numOfRequests', 2))));
41+
client.close();
42+
});
6043

61-
var responseFuture = client.post(echoUrl.replace(port: port));
44+
test('#send a POST with no-cache type', () async {
45+
var client = BrowserClient(cacheMode: CacheMode.noCache);
6246

47+
await client.post(url);
48+
var response = await client.post(url);
6349
client.close();
50+
expect(
51+
response.body,
52+
parse(anyOf(containsPair('numOfRequests', 2),
53+
containsPair('cache-control', ['max-age=0']))));
54+
});
6455

65-
}, skip: 'Need to fix server tests for browser');
56+
test('#send a POST with no-store type', () async {
57+
var client = BrowserClient(cacheMode: CacheMode.noStore);
6658

67-
test('#send a StreamedRequest with no-cache type', () async {
68-
var client = BrowserClient(cacheMode: CacheMode.noCache);
69-
var request = http.StreamedRequest('POST', echoUrl);
59+
await client.post(url);
60+
var response = await client.post(url);
61+
client.close();
62+
expect(response.body, parse(allOf(containsPair('numOfRequests', 2))));
63+
});
7064

71-
var responseFuture = client.send(request);
72-
request.sink.add('{"hello": "world"}'.codeUnits);
73-
unawaited(request.sink.close());
74-
var response = await responseFuture;
75-
var bytesString = await response.stream.bytesToString();
65+
test('#send a POST with force-store type', () async {
66+
var client = BrowserClient(cacheMode: CacheMode.forceCache);
7667

68+
await client.post(url);
69+
var response = await client.post(url);
7770
client.close();
78-
expect(bytesString, contains('max-age=0'));
79-
}, skip: 'Need to fix server tests for browser');
71+
expect(response.body, parse(allOf(containsPair('numOfRequests', 2))));
72+
});
8073

8174
test('#send a StreamedRequest with only-if-cached type', () {
8275
var client = BrowserClient(cacheMode: CacheMode.onlyIfCached);
83-
var request = http.StreamedRequest('POST', echoUrl);
76+
var request = http.StreamedRequest('POST', url);
8477

8578
expectLater(client.send(request), throwsA(isA<ClientException>()));
8679
request.sink.add('{"hello": "world"}'.codeUnits);
8780
unawaited(request.sink.close());
8881

8982
client.close();
90-
}, skip: 'Need to fix server tests for browser');
91-
92-
test('#send with an invalid URL', () {
93-
var client = BrowserClient(cacheMode: CacheMode.onlyIfCached);
94-
var url = Uri.http('http.invalid', '');
95-
var request = http.StreamedRequest('POST', url);
96-
97-
expect(client.send(request), throwsClientException());
98-
99-
request.sink.add('{"hello": "world"}'.codeUnits);
100-
request.sink.close();
101-
}, skip: 'Need to fix server tests for browser');
83+
});
10284
}

pkgs/http/test/html/client_test.dart

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,20 +14,30 @@ import 'package:test/test.dart';
1414
import 'utils.dart';
1515

1616
void main() {
17+
late int port;
18+
setUpAll(() async {
19+
final channel =
20+
spawnHybridUri(Uri(path: '/test/stub_server.dart'), stayAlive: true);
21+
port = await channel.stream.first as int;
22+
});
23+
1724
test('#send a StreamedRequest', () async {
1825
var client = BrowserClient();
19-
var request = http.StreamedRequest('POST', echoUrl);
26+
var request = http.StreamedRequest('POST', echoUrl.replace(port: port));
2027

2128
var responseFuture = client.send(request);
2229
request.sink.add('{"hello": "world"}'.codeUnits);
2330
unawaited(request.sink.close());
2431

2532
var response = await responseFuture;
33+
2634
var bytesString = await response.stream.bytesToString();
35+
2736
client.close();
2837

29-
expect(bytesString, equals('{"hello": "world"}'));
30-
}, skip: 'Need to fix server tests for browser');
38+
expect(bytesString,
39+
parse(allOf(containsPair('body', '{"hello": "world"}'.codeUnits))));
40+
});
3141

3242
test('#send with an invalid URL', () {
3343
var client = BrowserClient();

pkgs/http/test/html/streamed_request_test.dart

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -14,27 +14,35 @@ import 'package:test/test.dart';
1414
import 'utils.dart';
1515

1616
void main() {
17+
late Uri url;
18+
setUpAll(() async {
19+
final channel =
20+
spawnHybridUri(Uri(path: '/test/stub_server.dart'), stayAlive: true);
21+
var port = await channel.stream.first as int;
22+
url = echoUrl.replace(port: port);
23+
});
1724
group('contentLength', () {
1825
test("works when it's set", () async {
19-
var request = http.StreamedRequest('POST', echoUrl)
26+
var request = http.StreamedRequest('POST', url)
2027
..contentLength = 10
2128
..sink.add([1, 2, 3, 4, 5, 6, 7, 8, 9, 10]);
2229
unawaited(request.sink.close());
2330

2431
final response = await BrowserClient().send(request);
2532

26-
expect(await response.stream.toBytes(),
27-
equals([1, 2, 3, 4, 5, 6, 7, 8, 9, 10]));
33+
expect(await response.stream.bytesToString(),
34+
parse(allOf(containsPair('body', [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]))));
2835
});
2936

3037
test("works when it's not set", () async {
31-
var request = http.StreamedRequest('POST', echoUrl);
38+
var request = http.StreamedRequest('POST', url);
3239
request.sink.add([1, 2, 3, 4, 5, 6, 7, 8, 9, 10]);
3340
unawaited(request.sink.close());
3441

3542
final response = await BrowserClient().send(request);
36-
expect(await response.stream.toBytes(),
37-
equals([1, 2, 3, 4, 5, 6, 7, 8, 9, 10]));
43+
44+
expect(await response.stream.bytesToString(),
45+
parse(allOf(containsPair('body', [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]))));
3846
});
39-
}, skip: 'Need to fix server tests for browser');
47+
});
4048
}

pkgs/http/test/stub_server.dart

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import 'package:http/src/utils.dart';
1111
import 'package:stream_channel/stream_channel.dart';
1212

1313
void hybridMain(StreamChannel<dynamic> channel) async {
14+
var numOfRequests = 0;
1415
final server = await HttpServer.bind('localhost', 63618);
1516
final url = Uri.http('localhost:${server.port}', '');
1617
server.listen((request) async {
@@ -35,17 +36,6 @@ void hybridMain(StreamChannel<dynamic> channel) async {
3536
return;
3637
}
3738

38-
if (path == '/echo') {
39-
response
40-
..headers.add("Access-Control-Allow-Origin", "localhost")
41-
..headers.add("Access-Control-Allow-Methods", "POST, GET")
42-
..statusCode = 200
43-
..contentLength = 31
44-
..write('object');
45-
unawaited(response.close());
46-
return;
47-
}
48-
4939
if (path == '/redirect') {
5040
response
5141
..statusCode = 302
@@ -64,6 +54,14 @@ void hybridMain(StreamChannel<dynamic> channel) async {
6454
return;
6555
}
6656

57+
// For browser runtime testing...
58+
if (path == '/echo') {
59+
++numOfRequests;
60+
response
61+
..headers.add('Access-Control-Allow-Origin', '*')
62+
..headers.add('Access-Control-Allow-Methods', 'POST, GET');
63+
}
64+
6765
var requestBodyBytes = await ByteStream(request).toBytes();
6866
var encodingName = request.uri.queryParameters['response-encoding'];
6967
var outputEncoding =
@@ -99,6 +97,7 @@ void hybridMain(StreamChannel<dynamic> channel) async {
9997
'path': request.uri.path,
10098
if (requestBody != null) 'body': requestBody,
10199
'headers': headers,
100+
if (path == '/echo') 'numOfRequests': numOfRequests
102101
};
103102

104103
var body = json.encode(content);

0 commit comments

Comments
 (0)