@@ -22,7 +22,7 @@ class HttpClientSendTests: XCTestCase {
22
22
super. tearDown ( )
23
23
}
24
24
25
- func testSendBody ( ) {
25
+ func testSendBody_1 ( ) {
26
26
let session = FakeSession ( )
27
27
let client = HttpClient ( session: session)
28
28
let sendData = " testData " . data ( using: String . Encoding. utf8) !
@@ -58,7 +58,7 @@ class HttpClientSendTests: XCTestCase {
58
58
waitForExpectations ( timeout: 1 , handler: nil )
59
59
}
60
60
61
- func testSendJsonBody ( ) {
61
+ func testSendJsonBody_1 ( ) {
62
62
let session = FakeSession ( )
63
63
let client = HttpClient ( session: session)
64
64
let sendJson = [ " Key1 " : " Value1 " , " Key2 " : " Value2 " ]
@@ -96,7 +96,87 @@ class HttpClientSendTests: XCTestCase {
96
96
waitForExpectations ( timeout: 1 , handler: nil )
97
97
}
98
98
99
- func testRequestWithIncorrectJsonObject( ) {
99
+ func testSendJsonBody_2( ) {
100
+ let session = FakeSession ( )
101
+ let client = HttpClient ( session: session)
102
+ let sendJson = [ " Key1 " : " Value1 " , " Key2 " : " Value2 " ]
103
+
104
+ let sendJsonData = try ! JSONSerialization . data ( withJSONObject: sendJson, options: [ ] )
105
+
106
+ let actions : ( FakeDataTask ) -> ( ) = { task in
107
+ DispatchQueue . global ( qos: DispatchQoS . QoSClass. utility) . async { _ in
108
+ guard task. originalRequest!. url! == URL ( baseUrl: " https://test.com/post " , parameters: [ " post " : " Request " ] ) !,
109
+ task. originalRequest!. httpMethod == HttpMethod . patch. rawValue,
110
+ task. originalRequest!. allHTTPHeaderFields ? [ " Header1 " ] == " HeaderVal1 " ,
111
+ task. originalRequest!. httpBody? . elementsEqual ( sendJsonData) ?? false else {
112
+ client. sessionObserver. sessionEventsSubject. onNext ( . didCompleteWithError( session: session,
113
+ dataTask: task,
114
+ error: NSError ( domain: " HttpRequestTests " , code: 1 , userInfo: nil ) ) )
115
+
116
+ return
117
+ }
118
+
119
+ client. sessionObserver. sessionEventsSubject. onNext (
120
+ SessionDataEvents . didReceiveResponse ( session: session,
121
+ dataTask: task,
122
+ response: URLResponse ( url: task. originalRequest!. url!, mimeType: " Application/json " , expectedContentLength: 26 , textEncodingName: nil ) ,
123
+ completion: { _ in } ) )
124
+ client. sessionObserver. sessionEventsSubject. onNext ( . didReceiveData( session: session, dataTask: task, data: sendJsonData) )
125
+ client. sessionObserver. sessionEventsSubject. onNext ( . didCompleteWithError( session: session,
126
+ dataTask: task,
127
+ error: nil ) )
128
+ }
129
+ }
130
+
131
+ session. task = FakeDataTask ( resumeClosure: actions)
132
+
133
+ let url = URL ( baseUrl: " https://test.com/post " , parameters: [ " post " : " Request " ] ) !
134
+ let expectation = self . expectation ( description: " Should receive OK response " )
135
+
136
+ _ = client. requestJson ( url: url, method: . patch, jsonBody: sendJson, options: [ ] , httpHeaders: [ " Header1 " : " HeaderVal1 " ] , requestCacheMode: CacheMode . withoutCache)
137
+ . subscribe ( onNext: { _ in expectation. fulfill ( ) } , onError: { _ in XCTFail ( " error returned " ) } )
138
+
139
+ waitForExpectations ( timeout: 1 , handler: nil )
140
+ }
141
+
142
+ func testSendJsonBody_3( ) {
143
+ let session = FakeSession ( )
144
+ let client = HttpClient ( session: session)
145
+ let sendJson = [ " Key1 " : " Value1 " , " Key2 " : " Value2 " ]
146
+
147
+ let sendJsonData = try ! JSONSerialization . data ( withJSONObject: sendJson, options: [ ] )
148
+
149
+ let actions : ( FakeDataTask ) -> ( ) = { task in
150
+ DispatchQueue . global ( qos: DispatchQoS . QoSClass. utility) . async { _ in
151
+ guard task. originalRequest!. url! == URL ( baseUrl: " https://test.com/post " , parameters: [ " post " : " Request " ] ) !,
152
+ task. originalRequest!. httpMethod == HttpMethod . patch. rawValue,
153
+ task. originalRequest!. allHTTPHeaderFields ? [ " Header1 " ] == " HeaderVal1 " ,
154
+ task. originalRequest!. httpBody? . elementsEqual ( sendJsonData) ?? false else {
155
+ client. sessionObserver. sessionEventsSubject. onNext ( . didCompleteWithError( session: session,
156
+ dataTask: task,
157
+ error: NSError ( domain: " HttpRequestTests " , code: 1 , userInfo: nil ) ) )
158
+
159
+ return
160
+ }
161
+
162
+ client. sessionObserver. sessionEventsSubject. onNext ( . didCompleteWithError( session: session,
163
+ dataTask: task,
164
+ error: nil ) )
165
+ }
166
+ }
167
+
168
+ session. task = FakeDataTask ( resumeClosure: actions)
169
+
170
+ let url = URL ( baseUrl: " https://test.com/post " , parameters: [ " post " : " Request " ] ) !
171
+ let expectation = self . expectation ( description: " Should receive OK response " )
172
+
173
+ _ = client. request ( url: url, method: . patch, jsonBody: sendJson, options: [ ] , httpHeaders: [ " Header1 " : " HeaderVal1 " ] )
174
+ . subscribe ( onNext: { _ in expectation. fulfill ( ) } , onError: { _ in XCTFail ( " error returned " ) } )
175
+
176
+ waitForExpectations ( timeout: 1 , handler: nil )
177
+ }
178
+
179
+ func testRequestWithIncorrectJsonObject_1( ) {
100
180
let url = URL ( baseUrl: " https://test.com/post " , parameters: [ " post " : " Request " ] ) !
101
181
let expectation = self . expectation ( description: " Should receive error " )
102
182
@@ -109,4 +189,32 @@ class HttpClientSendTests: XCTestCase {
109
189
110
190
waitForExpectations ( timeout: 1 , handler: nil )
111
191
}
192
+
193
+ func testRequestWithIncorrectJsonObject_2( ) {
194
+ let url = URL ( baseUrl: " https://test.com/post " , parameters: [ " post " : " Request " ] ) !
195
+ let expectation = self . expectation ( description: " Should receive error " )
196
+
197
+ let client = HttpClient ( )
198
+ _ = client. requestJson ( url: url, method: . patch, jsonBody: 2 , options: [ ] , httpHeaders: [ " Header1 " : " HeaderVal1 " ] , requestCacheMode: CacheMode . withoutCache)
199
+ . subscribe ( onNext: { _ in XCTFail ( " Should not return data " ) } , onError: { error in
200
+ guard case HttpClientError . invalidJsonObject = error else { XCTFail ( " Incorrect error returned " ) ; return }
201
+ expectation. fulfill ( )
202
+ } )
203
+
204
+ waitForExpectations ( timeout: 1 , handler: nil )
205
+ }
206
+
207
+ func testRequestWithIncorrectJsonObject_3( ) {
208
+ let url = URL ( baseUrl: " https://test.com/post " , parameters: [ " post " : " Request " ] ) !
209
+ let expectation = self . expectation ( description: " Should receive error " )
210
+
211
+ let client = HttpClient ( )
212
+ _ = client. request ( url: url, method: . patch, jsonBody: 2 , options: [ ] , httpHeaders: [ " Header1 " : " HeaderVal1 " ] )
213
+ . subscribe ( onNext: { _ in XCTFail ( " Should not return data " ) } , onError: { error in
214
+ guard case HttpClientError . invalidJsonObject = error else { XCTFail ( " Incorrect error returned " ) ; return }
215
+ expectation. fulfill ( )
216
+ } )
217
+
218
+ waitForExpectations ( timeout: 1 , handler: nil )
219
+ }
112
220
}
0 commit comments