@@ -93,35 +93,37 @@ final class IONFLTRUploadDelegateTests: XCTestCase {
93
93
waitForExpectations ( timeout: 1 )
94
94
}
95
95
96
- func testDidReceiveData_shouldCallSendSuccess( ) {
97
- class MockDataTask : URLSessionDataTask , @unchecked Sendable {
98
- private let mockResponse : URLResponse ?
99
-
100
- override var response : URLResponse ? {
101
- return mockResponse
102
- }
103
-
104
- init ( response: URLResponse ? ) {
105
- self . mockResponse = response
106
- super. init ( )
107
- }
108
- }
96
+ func testDidReceiveData_shouldAccumulateData( ) {
97
+ let data1 = " Part1 " . data ( using: . utf8) !
98
+ let data2 = " Part2 " . data ( using: . utf8) !
109
99
110
- let expectedResponseBody = " Success! "
111
- let data = expectedResponseBody. data ( using: . utf8) !
112
100
let task = URLSession . shared. dataTask ( with: URL ( string: " https://example.com " ) !)
113
101
114
- let urlResponse = HTTPURLResponse ( url: task. originalRequest!. url!, statusCode: 200 , httpVersion: nil , headerFields: [ " Content-Type " : " text/plain " ] )
115
- let dataTask = MockDataTask ( response: urlResponse)
102
+ delegate. urlSession ( URLSession . shared, dataTask: task, didReceive: data1)
103
+ delegate. urlSession ( URLSession . shared, dataTask: task, didReceive: data2)
104
+
105
+ // Simular o fim da requisição para forçar leitura do responseBody
106
+ let response = HTTPURLResponse (
107
+ url: task. originalRequest!. url!,
108
+ statusCode: 200 ,
109
+ httpVersion: nil ,
110
+ headerFields: [ " Content-Type " : " text/plain " ]
111
+ )
112
+
113
+ class MockTask : URLSessionTask , @unchecked Sendable {
114
+ let mockResponse : URLResponse ?
115
+ override var response : URLResponse ? { return mockResponse }
116
+ init ( response: URLResponse ? ) { self . mockResponse = response }
117
+ }
116
118
117
- delegate. urlSession ( URLSession . shared, dataTask: dataTask, didReceive: data)
119
+ let mockTask = MockTask ( response: response)
120
+ delegate. urlSession ( URLSession . shared, task: mockTask, didCompleteWithError: nil )
118
121
119
122
let result = mockPublisher. successCalled
120
- XCTAssertEqual ( result? . 0 , 0 ) // totalBytesSent should still be 0
121
- XCTAssertEqual ( result? . 1 , 200 )
122
- XCTAssertEqual ( result? . 2 , expectedResponseBody)
123
+ XCTAssertEqual ( result? . 2 , " Part1Part2 " )
123
124
XCTAssertEqual ( result? . 3 [ " Content-Type " ] , " text/plain " )
124
125
}
126
+
125
127
126
128
func testDidCompleteWithError_Non2xxStatusCode( ) {
127
129
class MockURLSessionTask : URLSessionTask , @unchecked Sendable {
@@ -152,9 +154,32 @@ final class IONFLTRUploadDelegateTests: XCTestCase {
152
154
)
153
155
}
154
156
155
- func testDidCompleteWithError_withoutError_shouldNotSendFailure( ) {
156
- delegate. urlSession ( URLSession . shared, task: URLSessionDataTask ( ) , didCompleteWithError: nil )
157
+ func testDidCompleteWithSuccess_shouldSendSuccess( ) {
158
+ let responseBody = " Uploaded! "
159
+ let data = responseBody. data ( using: . utf8) !
157
160
158
- XCTAssertNil ( mockPublisher. failureCalled)
161
+ let task = URLSession . shared. dataTask ( with: URL ( string: " https://example.com " ) !)
162
+ delegate. urlSession ( URLSession . shared, dataTask: task, didReceive: data)
163
+
164
+ class MockTask : URLSessionTask {
165
+ let mockResponse : URLResponse ?
166
+ override var response : URLResponse ? { return mockResponse }
167
+ init ( response: URLResponse ? ) { self . mockResponse = response }
168
+ }
169
+
170
+ let mockResponse = HTTPURLResponse (
171
+ url: URL ( string: " https://example.com " ) !,
172
+ statusCode: 201 ,
173
+ httpVersion: nil ,
174
+ headerFields: [ " X-Custom " : " value " ]
175
+ )
176
+ let mockTask = MockTask ( response: mockResponse)
177
+
178
+ delegate. urlSession ( URLSession . shared, task: mockTask, didCompleteWithError: nil )
179
+
180
+ XCTAssertEqual ( mockPublisher. successCalled? . 0 , 0 ) // totalBytesSent is default 0
181
+ XCTAssertEqual ( mockPublisher. successCalled? . 1 , 201 )
182
+ XCTAssertEqual ( mockPublisher. successCalled? . 2 , responseBody)
183
+ XCTAssertEqual ( mockPublisher. successCalled? . 3 [ " X-Custom " ] , " value " )
159
184
}
160
185
}
0 commit comments