7
7
//
8
8
9
9
import XCTest
10
+ #if canImport(FoundationNetworking)
11
+ import FoundationNetworking
12
+ #endif
10
13
@testable import Mocker
11
14
12
15
final class MockerTests : XCTestCase {
@@ -36,17 +39,15 @@ final class MockerTests: XCTestCase {
36
39
let expectation = self . expectation ( description: " Data request should succeed " )
37
40
let originalURL = URL ( string: " https://avatars3.githubusercontent.com/u/26250426?v=4&s=400 " ) !
38
41
42
+ let mockedData = MockedData . botAvatarImageFileUrl. data
39
43
let mock = Mock ( url: originalURL, dataType: . imagePNG, statusCode: 200 , data: [
40
- . get: MockedData . botAvatarImageFileUrl . data
44
+ . get: mockedData
41
45
] )
42
46
43
47
mock. register ( )
44
48
URLSession . shared. dataTask ( with: originalURL) { ( data, _, error) in
45
49
XCTAssertNil ( error)
46
- let image : UIImage = UIImage ( data: data!) !
47
- let sampleImage : UIImage = UIImage ( contentsOfFile: MockedData . botAvatarImageFileUrl. path) !
48
-
49
- XCTAssertEqual ( image. size, sampleImage. size, " Image should be returned mocked " )
50
+ XCTAssertEqual ( data, mockedData, " Image should be returned mocked " )
50
51
expectation. fulfill ( )
51
52
} . resume ( )
52
53
@@ -58,16 +59,14 @@ final class MockerTests: XCTestCase {
58
59
let expectation = self . expectation ( description: " Data request should succeed " )
59
60
let originalURL = URL ( string: " https://www.wetransfer.com/sample-image.png " )
60
61
62
+ let mockedData = MockedData . botAvatarImageFileUrl. data
61
63
Mock ( fileExtensions: " png " , dataType: . imagePNG, statusCode: 200 , data: [
62
- . get: MockedData . botAvatarImageFileUrl . data
64
+ . get: mockedData
63
65
] ) . register ( )
64
66
65
67
URLSession . shared. dataTask ( with: originalURL!) { ( data, _, error) in
66
68
XCTAssertNil ( error)
67
- let image : UIImage = UIImage ( data: data!) !
68
- let sampleImage : UIImage = UIImage ( contentsOfFile: MockedData . botAvatarImageFileUrl. path) !
69
-
70
- XCTAssertEqual ( image. size, sampleImage. size, " Image should be returned mocked " )
69
+ XCTAssertEqual ( data, mockedData, " Image should be returned mocked " )
71
70
expectation. fulfill ( )
72
71
} . resume ( )
73
72
@@ -82,23 +81,15 @@ final class MockerTests: XCTestCase {
82
81
Mock ( fileExtensions: " png " , dataType: . imagePNG, statusCode: 400 , data: [
83
82
. get: Data ( )
84
83
] ) . register ( )
84
+
85
+ let mockedData = MockedData . botAvatarImageFileUrl. data
85
86
Mock ( url: originalURL, ignoreQuery: true , dataType: . imagePNG, statusCode: 200 , data: [
86
- . get: MockedData . botAvatarImageFileUrl . data
87
+ . get: mockedData
87
88
] ) . register ( )
88
89
89
90
URLSession . shared. dataTask ( with: originalURL) { ( data, _, error) in
90
91
XCTAssertNil ( error)
91
- guard let data = data else {
92
- XCTFail ( " Data is nil " )
93
- return
94
- }
95
- guard let image: UIImage = UIImage ( data: data) else {
96
- XCTFail ( " Invalid data \( String ( describing: data) ) " )
97
- return
98
- }
99
- let sampleImage : UIImage = UIImage ( contentsOfFile: MockedData . botAvatarImageFileUrl. path) !
100
-
101
- XCTAssertEqual ( image. size, sampleImage. size, " Image should be returned mocked " )
92
+ XCTAssertEqual ( data, mockedData, " Image should be returned mocked " )
102
93
expectation. fulfill ( )
103
94
} . resume ( )
104
95
@@ -110,27 +101,17 @@ final class MockerTests: XCTestCase {
110
101
let expectation = self . expectation ( description: " Data request should succeed " )
111
102
let originalURL = URL ( string: " https://www.wetransfer.com/sample-image.png?width=200&height=200 " ) !
112
103
104
+ let mockedData = MockedData . botAvatarImageFileUrl. data
113
105
Mock ( url: originalURL, ignoreQuery: true , dataType: . imagePNG, statusCode: 200 , data: [
114
- . get: MockedData . botAvatarImageFileUrl . data
106
+ . get: mockedData
115
107
] ) . register ( )
116
108
117
109
/// Make it different compared to the mocked URL.
118
110
let customURL = URL ( string: originalURL. absoluteString + " & " + UUID( ) . uuidString) !
119
111
120
112
URLSession . shared. dataTask ( with: customURL) { ( data, _, error) in
121
113
XCTAssertNil ( error)
122
- guard let data = data else {
123
- XCTFail ( " Data is nil " )
124
- return
125
- }
126
-
127
- guard let image: UIImage = UIImage ( data: data) else {
128
- XCTFail ( " Invalid data \( String ( describing: data) ) " )
129
- return
130
- }
131
- let sampleImage : UIImage = UIImage ( contentsOfFile: MockedData . botAvatarImageFileUrl. path) !
132
-
133
- XCTAssertEqual ( image. size, sampleImage. size, " Image should be returned mocked " )
114
+ XCTAssertEqual ( data, mockedData, " Image should be returned mocked " )
134
115
expectation. fulfill ( )
135
116
} . resume ( )
136
117
@@ -173,13 +154,13 @@ final class MockerTests: XCTestCase {
173
154
/// It should return the additional headers.
174
155
func testAdditionalHeaders( ) {
175
156
let expectation = self . expectation ( description: " Data request should succeed " )
176
- let headers = [ " testkey " : " testvalue " ]
157
+ let headers = [ " Testkey " : " testvalue " ]
177
158
let mock = Mock ( dataType: . json, statusCode: 200 , data: [ . get: Data ( ) ] , additionalHeaders: headers)
178
159
mock. register ( )
179
160
180
161
URLSession . shared. dataTask ( with: mock. request) { ( _, response, error) in
181
162
XCTAssertNil ( error)
182
- XCTAssertEqual ( ( ( response as? HTTPURLResponse ) ? . allHeaderFields [ " testkey " ] as? String ) , " testvalue " , " Additional headers should be added. " )
163
+ XCTAssertEqual ( ( ( response as? HTTPURLResponse ) ? . allHeaderFields [ " Testkey " ] as? String ) , " testvalue " , " Additional headers should be added. " )
183
164
expectation. fulfill ( )
184
165
} . resume ( )
185
166
@@ -192,12 +173,12 @@ final class MockerTests: XCTestCase {
192
173
let mock = Mock ( dataType: . json, statusCode: 200 , data: [ . get: Data ( ) ] , additionalHeaders: [ " testkey " : " testvalue " ] )
193
174
mock. register ( )
194
175
195
- let newMock = Mock ( dataType: . json, statusCode: 200 , data: [ . get: Data ( ) ] , additionalHeaders: [ " newkey " : " newvalue " ] )
176
+ let newMock = Mock ( dataType: . json, statusCode: 200 , data: [ . get: Data ( ) ] , additionalHeaders: [ " Newkey " : " newvalue " ] )
196
177
newMock. register ( )
197
178
198
179
URLSession . shared. dataTask ( with: mock. request) { ( _, response, error) in
199
180
XCTAssertNil ( error)
200
- XCTAssertEqual ( ( ( response as? HTTPURLResponse ) ? . allHeaderFields [ " newkey " ] as? String ) , " newvalue " , " Additional headers should be added. " )
181
+ XCTAssertEqual ( ( ( response as? HTTPURLResponse ) ? . allHeaderFields [ " Newkey " ] as? String ) , " newvalue " , " Additional headers should be added. " )
201
182
expectation. fulfill ( )
202
183
} . resume ( )
203
184
@@ -209,8 +190,9 @@ final class MockerTests: XCTestCase {
209
190
let expectation = self . expectation ( description: " Data request should succeed " )
210
191
let originalURL = URL ( string: " https://www.wetransfer.com/sample-image.png " )
211
192
193
+ let mockedData = MockedData . botAvatarImageFileUrl. data
212
194
Mock ( fileExtensions: " png " , dataType: . imagePNG, statusCode: 200 , data: [
213
- . get: MockedData . botAvatarImageFileUrl . data
195
+ . get: mockedData
214
196
] ) . register ( )
215
197
216
198
let configuration = URLSessionConfiguration . default
@@ -219,18 +201,7 @@ final class MockerTests: XCTestCase {
219
201
220
202
urlSession. dataTask ( with: originalURL!) { ( data, _, error) in
221
203
XCTAssertNil ( error)
222
- guard let data = data else {
223
- XCTFail ( " Data is nil " )
224
- return
225
- }
226
-
227
- guard let image: UIImage = UIImage ( data: data) else {
228
- XCTFail ( " Invalid data \( String ( describing: data) ) " )
229
- return
230
- }
231
- let sampleImage : UIImage = UIImage ( contentsOfFile: MockedData . botAvatarImageFileUrl. path) !
232
-
233
- XCTAssertEqual ( image. size, sampleImage. size, " Image should be returned mocked " )
204
+ XCTAssertEqual ( data, mockedData, " Image should be returned mocked " )
234
205
expectation. fulfill ( )
235
206
} . resume ( )
236
207
@@ -258,7 +229,10 @@ final class MockerTests: XCTestCase {
258
229
}
259
230
260
231
/// It should correctly handle redirect responses.
261
- func testRedirectResponse( ) {
232
+ func testRedirectResponse( ) throws {
233
+ #if os(Linux)
234
+ throw XCTSkip ( " The URLSession swift-corelibs-foundation implementation doesn't currently handle redirects directly " )
235
+ #endif
262
236
let expectation = self . expectation ( description: " Data request should be cancelled " )
263
237
let urlWhichRedirects : URL = URL ( string: " https://we.tl/redirect " ) !
264
238
Mock ( url: urlWhichRedirects, dataType: . html, statusCode: 200 , data: [ . get: MockedData . redirectGET. data] ) . register ( )
@@ -447,10 +421,14 @@ final class MockerTests: XCTestCase {
447
421
XCTAssertNil ( urlresponse)
448
422
XCTAssertNotNil ( error)
449
423
if let error = error {
424
+ #if os(Linux)
425
+ XCTAssertEqual ( error as? TestExampleError , . example)
426
+ #else
450
427
// there's not a particularly elegant way to verify an instance
451
428
// of an error, but this is a convenient workaround for testing
452
429
// purposes
453
430
XCTAssertTrue ( String ( describing: error) . contains ( " TestExampleError " ) )
431
+ #endif
454
432
}
455
433
456
434
expectation. fulfill ( )
@@ -460,7 +438,10 @@ final class MockerTests: XCTestCase {
460
438
}
461
439
462
440
/// It should cache response
463
- func testMockCachePolicy( ) {
441
+ func testMockCachePolicy( ) throws {
442
+ #if os(Linux)
443
+ throw XCTSkip ( " URLSessionTask in swift-corelibs-foundation doesn't cache response for custom protocols " )
444
+ #endif
464
445
let expectation = self . expectation ( description: " Data request should succeed " )
465
446
let originalURL = URL ( string: " https://www.wetransfer.com/example.json " ) !
466
447
@@ -471,7 +452,9 @@ final class MockerTests: XCTestCase {
471
452
) . register ( )
472
453
473
454
let configuration = URLSessionConfiguration . default
455
+ #if !os(Linux)
474
456
configuration. urlCache = URLCache ( )
457
+ #endif
475
458
configuration. protocolClasses = [ MockingURLProtocol . self]
476
459
let urlSession = URLSession ( configuration: configuration)
477
460
0 commit comments