Skip to content

Commit 66c7bbf

Browse files
committed
🧪 add more tests
1 parent 2364df3 commit 66c7bbf

9 files changed

+1295
-2
lines changed

test/extensions/base_reponse_test.dart

Lines changed: 64 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
1+
import 'dart:convert';
2+
3+
import 'package:http/io_client.dart';
14
import 'package:http_interceptor/http_interceptor.dart';
25
import 'package:test/test.dart';
36

@@ -8,8 +11,8 @@ main() {
811
final BaseResponse baseResponse = Response("{'foo': 'bar'}", 200);
912

1013
// Act
11-
final copiedBaseRequest = baseResponse.copyWith();
12-
final copied = copiedBaseRequest as Response;
14+
final copiedBaseResponse = baseResponse.copyWith();
15+
final copied = copiedBaseResponse as Response;
1316

1417
// Assert
1518
final response = baseResponse as Response;
@@ -22,5 +25,64 @@ main() {
2225
expect(
2326
copied.persistentConnection, equals(response.persistentConnection));
2427
});
28+
29+
test('IOStreamedResponse is copied from BaseResponse', () {
30+
// Arrange
31+
final testRequest = Request('GET', Uri.parse('https://example.com'));
32+
final testHeaders = {'Content-Type': 'application/json'};
33+
final testStream = Stream.value(utf8.encode('test data'));
34+
final testStatusCode = 200;
35+
final testContentLength = 9; // 'test data'.length
36+
final testIsRedirect = false;
37+
final testPersistentConnection = true;
38+
final testReasonPhrase = 'OK';
39+
40+
final BaseResponse baseResponse = IOStreamedResponse(
41+
testStream,
42+
testStatusCode,
43+
contentLength: testContentLength,
44+
request: testRequest,
45+
headers: testHeaders,
46+
isRedirect: testIsRedirect,
47+
persistentConnection: testPersistentConnection,
48+
reasonPhrase: testReasonPhrase,
49+
);
50+
51+
// Act
52+
final copiedBaseResponse = baseResponse.copyWith();
53+
54+
// Assert
55+
final copied = copiedBaseResponse as IOStreamedResponse;
56+
final response = baseResponse as IOStreamedResponse;
57+
expect(copied.hashCode, isNot(equals(response.hashCode)));
58+
expect(copied.statusCode, equals(response.statusCode));
59+
expect(copied.contentLength, equals(response.contentLength));
60+
expect(copied.request, equals(response.request));
61+
expect(copied.headers, equals(response.headers));
62+
expect(copied.isRedirect, equals(response.isRedirect));
63+
expect(copied.persistentConnection, equals(response.persistentConnection));
64+
expect(copied.reasonPhrase, equals(response.reasonPhrase));
65+
});
66+
67+
test('throws UnsupportedError for unsupported response type', () {
68+
// Arrange
69+
final unsupportedResponse = _UnsupportedResponse();
70+
71+
// Act & Assert
72+
expect(
73+
() => unsupportedResponse.copyWith(),
74+
throwsA(isA<UnsupportedError>().having(
75+
(e) => e.message,
76+
'message',
77+
'Cannot copy unsupported type of response _UnsupportedResponse',
78+
)),
79+
);
80+
});
2581
});
2682
}
83+
84+
85+
// Custom response type that doesn't extend any of the supported types
86+
class _UnsupportedResponse extends BaseResponse {
87+
_UnsupportedResponse() : super(200);
88+
}

test/extensions/base_request_test.dart

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,5 +27,56 @@ main() {
2727
expect(copied.maxRedirects, equals(request.maxRedirects));
2828
expect(copied.persistentConnection, equals(request.persistentConnection));
2929
});
30+
31+
test('MultipartRequest is copied from BaseRequest', () {
32+
// Arrange
33+
final testUrl = Uri.parse('https://example.com');
34+
final testHeaders = {'Content-Type': 'multipart/form-data'};
35+
final testFields = {'field1': 'value1', 'field2': 'value2'};
36+
37+
final MultipartRequest multipartRequest = MultipartRequest('POST', testUrl)
38+
..headers.addAll(testHeaders)
39+
..fields.addAll(testFields);
40+
41+
// Add a test file to the request
42+
final testFileBytes = utf8.encode('test file content');
43+
final testFile = MultipartFile.fromBytes(
44+
'file',
45+
testFileBytes,
46+
filename: 'test.txt',
47+
);
48+
multipartRequest.files.add(testFile);
49+
50+
// Act
51+
final copied = multipartRequest.copyWith();
52+
53+
// Assert
54+
expect(copied.hashCode, isNot(equals(multipartRequest.hashCode)));
55+
expect(copied.url, equals(multipartRequest.url));
56+
expect(copied.method, equals(multipartRequest.method));
57+
expect(copied.headers, equals(multipartRequest.headers));
58+
expect(copied.fields, equals(multipartRequest.fields));
59+
expect(copied.files.length, equals(multipartRequest.files.length));
60+
});
61+
62+
test('throws UnsupportedError for unsupported request type', () {
63+
// Arrange
64+
final unsupportedRequest = _UnsupportedRequest();
65+
66+
// Act & Assert
67+
expect(
68+
() => unsupportedRequest.copyWith(),
69+
throwsA(isA<UnsupportedError>().having(
70+
(e) => e.message,
71+
'message',
72+
'Cannot copy unsupported type of request _UnsupportedRequest',
73+
)),
74+
);
75+
});
3076
});
3177
}
78+
79+
// Custom request type that doesn't extend any of the supported types
80+
class _UnsupportedRequest extends BaseRequest {
81+
_UnsupportedRequest() : super('GET', Uri.parse('https://example.com'));
82+
}
Lines changed: 160 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,160 @@
1+
import 'dart:convert';
2+
3+
import 'package:http/io_client.dart';
4+
import 'package:http_interceptor/http_interceptor.dart';
5+
import 'package:test/test.dart';
6+
7+
void main() {
8+
group('IOStreamedResponse.copyWith', () {
9+
late IOStreamedResponse response;
10+
final testRequest = Request('GET', Uri.parse('https://example.com'));
11+
final testHeaders = {'Content-Type': 'application/json'};
12+
final testStream = Stream.value(utf8.encode('test data'));
13+
final testStatusCode = 200;
14+
final testContentLength = 9; // 'test data'.length
15+
final testIsRedirect = false;
16+
final testPersistentConnection = true;
17+
final testReasonPhrase = 'OK';
18+
19+
setUp(() {
20+
response = IOStreamedResponse(
21+
testStream,
22+
testStatusCode,
23+
contentLength: testContentLength,
24+
request: testRequest,
25+
headers: testHeaders,
26+
isRedirect: testIsRedirect,
27+
persistentConnection: testPersistentConnection,
28+
reasonPhrase: testReasonPhrase,
29+
);
30+
});
31+
32+
test('creates a copy with the same properties when no parameters are provided',
33+
() {
34+
// Act
35+
final copy = response.copyWith();
36+
37+
// Assert
38+
expect(copy.statusCode, equals(testStatusCode));
39+
expect(copy.contentLength, equals(testContentLength));
40+
expect(copy.request, equals(testRequest));
41+
expect(copy.headers, equals(testHeaders));
42+
expect(copy.isRedirect, equals(testIsRedirect));
43+
expect(copy.persistentConnection, equals(testPersistentConnection));
44+
expect(copy.reasonPhrase, equals(testReasonPhrase));
45+
});
46+
47+
test('overrides statusCode when provided', () {
48+
// Arrange
49+
final newStatusCode = 201;
50+
51+
// Act
52+
final copy = response.copyWith(statusCode: newStatusCode);
53+
54+
// Assert
55+
expect(copy.statusCode, equals(newStatusCode));
56+
expect(copy.contentLength, equals(testContentLength)); // Other properties remain the same
57+
});
58+
59+
test('overrides contentLength when provided', () {
60+
// Arrange
61+
final newContentLength = 100;
62+
63+
// Act
64+
final copy = response.copyWith(contentLength: newContentLength);
65+
66+
// Assert
67+
expect(copy.contentLength, equals(newContentLength));
68+
expect(copy.statusCode, equals(testStatusCode)); // Other properties remain the same
69+
});
70+
71+
test('overrides request when provided', () {
72+
// Arrange
73+
final newRequest = Request('POST', Uri.parse('https://example.org'));
74+
75+
// Act
76+
final copy = response.copyWith(request: newRequest);
77+
78+
// Assert
79+
expect(copy.request, equals(newRequest));
80+
expect(copy.statusCode, equals(testStatusCode)); // Other properties remain the same
81+
});
82+
83+
test('overrides headers when provided', () {
84+
// Arrange
85+
final newHeaders = {'Authorization': 'Bearer token'};
86+
87+
// Act
88+
final copy = response.copyWith(headers: newHeaders);
89+
90+
// Assert
91+
expect(copy.headers, equals(newHeaders));
92+
expect(copy.statusCode, equals(testStatusCode)); // Other properties remain the same
93+
});
94+
95+
test('overrides isRedirect when provided', () {
96+
// Act
97+
final copy = response.copyWith(isRedirect: !testIsRedirect);
98+
99+
// Assert
100+
expect(copy.isRedirect, equals(!testIsRedirect));
101+
expect(copy.statusCode, equals(testStatusCode)); // Other properties remain the same
102+
});
103+
104+
test('overrides persistentConnection when provided', () {
105+
// Act
106+
final copy = response.copyWith(persistentConnection: !testPersistentConnection);
107+
108+
// Assert
109+
expect(copy.persistentConnection, equals(!testPersistentConnection));
110+
expect(copy.statusCode, equals(testStatusCode)); // Other properties remain the same
111+
});
112+
113+
test('overrides reasonPhrase when provided', () {
114+
// Arrange
115+
final newReasonPhrase = 'Created';
116+
117+
// Act
118+
final copy = response.copyWith(reasonPhrase: newReasonPhrase);
119+
120+
// Assert
121+
expect(copy.reasonPhrase, equals(newReasonPhrase));
122+
expect(copy.statusCode, equals(testStatusCode)); // Other properties remain the same
123+
});
124+
125+
test('overrides stream when provided', () async {
126+
// Arrange
127+
final newData = utf8.encode('new data');
128+
final newStream = Stream.value(newData);
129+
130+
// Act
131+
final copy = response.copyWith(stream: newStream);
132+
133+
// Assert
134+
final copyData = await copy.stream.toList();
135+
final flattenedCopyData = copyData.expand((x) => x).toList();
136+
expect(flattenedCopyData, equals(newData));
137+
expect(copy.statusCode, equals(testStatusCode)); // Other properties remain the same
138+
});
139+
140+
test('can override multiple properties at once', () {
141+
// Arrange
142+
final newStatusCode = 201;
143+
final newHeaders = {'Authorization': 'Bearer token'};
144+
final newReasonPhrase = 'Created';
145+
146+
// Act
147+
final copy = response.copyWith(
148+
statusCode: newStatusCode,
149+
headers: newHeaders,
150+
reasonPhrase: newReasonPhrase,
151+
);
152+
153+
// Assert
154+
expect(copy.statusCode, equals(newStatusCode));
155+
expect(copy.headers, equals(newHeaders));
156+
expect(copy.reasonPhrase, equals(newReasonPhrase));
157+
expect(copy.contentLength, equals(testContentLength)); // Unchanged properties remain the same
158+
});
159+
});
160+
}

0 commit comments

Comments
 (0)