@@ -50,7 +50,9 @@ final class NetworkManagerTests: XCTestCase {
5050 }
5151 }
5252
53- func testPostRequestInEnvironments( ) {
53+ // MARK: - RxSwift Tests
54+
55+ func testRXPostRequestInEnvironments( ) {
5456 MockEnvironment . allCases. forEach { environment in
5557 let endpoint = " something "
5658 let session = MockURLSession ( )
@@ -203,7 +205,165 @@ final class NetworkManagerTests: XCTestCase {
203205 }
204206 }
205207
206- //TODO: Add tests for Combine methods
208+ // MARK: - Combine Tests
209+
210+ @available ( iOS 13 . 0 , * )
211+ func testCombinePostRequetInEnvironments( ) {
212+ MockEnvironment . allCases. forEach { environment in
213+ let endpoint = " combine "
214+ let session = MockURLSession ( )
215+ let networkManager = NetworkManager ( environment: environment, session: session, sessionCookieName: " Value " )
216+
217+ let _ = networkManager. request ( method: . post, endpoint: endpoint)
218+ . sink ( receiveCompletion: { completion in
219+ switch completion {
220+ case . failure( let error) :
221+ XCTFail ( " Error: \( error. localizedDescription) " )
222+ case . finished:
223+ return
224+ }
225+ } , receiveValue: { _ in
226+ return
227+ } )
228+
229+ guard let url = URL ( string: " \( environment. scheme) :// \( environment. host) / \( environment. path) \( endpoint) " ) else {
230+ XCTFail ( " Invalid URL " )
231+ return
232+ }
233+
234+ XCTAssert ( session. lastURL == url)
235+ }
236+ }
237+
238+ @available ( iOS 13 . 0 , * )
239+ func testCombineGetRequestInEnvironments( ) {
240+ MockEnvironment . allCases. forEach { environment in
241+ let params = [ " userID " : " 1234567 " ]
242+ let endpoint = " something "
243+ let session = MockURLSession ( )
244+ let networkManager = NetworkManager ( environment: environment, session: session)
245+
246+ let _ = networkManager. request ( method: . get, endpoint: endpoint, parameters: params)
247+ . sink ( receiveCompletion: { completion in
248+ switch completion {
249+ case . failure( let error) :
250+ XCTFail ( " Error: \( error. localizedDescription) " )
251+ case . finished:
252+ return
253+ }
254+ } , receiveValue: { _ in
255+ return
256+ } )
257+
258+ guard let url = URL ( string: " \( environment. scheme) :// \( environment. host) / \( environment. path) \( endpoint) ? \( queryString ( from: params) ) " ) else {
259+ XCTFail ( " Invalid URL " )
260+ return
261+ }
262+
263+ XCTAssert ( session. lastURL == url)
264+ }
265+ }
266+
267+ @available ( iOS 13 . 0 , * )
268+ func testCombineAuthenticatedPostFaileWithNoCookie( ) {
269+ MockEnvironment . allCases. forEach { environment in
270+ let endpoint = " crashtastic "
271+ let session = MockURLSession ( )
272+ session. requiresAuthentication = true
273+ let networkManager = NetworkManager ( environment: environment, session: session)
274+
275+ let _ = networkManager. request ( method: . post, endpoint: endpoint)
276+ . sink ( receiveCompletion: { completion in
277+ switch completion {
278+ case . failure( let error) :
279+ XCTAssertEqual ( error. localizedDescription, NetworkError . unauthorized. localizedDescription)
280+ case . finished:
281+ XCTFail ( " Test should have returned an error " )
282+ }
283+ } , receiveValue: { _ in
284+ return
285+ } )
286+ }
287+ }
288+
289+ @available ( iOS 13 . 0 , * )
290+ func testCombineAuthenticatedPostRequestInEnvironments( ) {
291+ MockEnvironment . allCases. forEach { environment in
292+ let endpoint = " something "
293+ let session = MockURLSession ( )
294+ let networkManager = NetworkManager ( environment: environment, session: session, sessionCookieName: " Value " )
295+
296+ session. requiresAuthentication = false
297+ // Send an initial request to make sett the cookie
298+ let _ = networkManager. request ( method: . post, endpoint: " login " )
299+ . sink ( receiveCompletion: { _ in
300+ return
301+ } ) { _ in
302+ return
303+ }
304+
305+ session. requiresAuthentication = true
306+
307+ let _ = networkManager. authenticatedRequest ( method: . post, endpoint: endpoint)
308+ . sink ( receiveCompletion: { completion in
309+ switch completion {
310+ case . failure( let error) :
311+ XCTFail ( " Error: \( error. localizedDescription) " )
312+ case . finished:
313+ return
314+ }
315+ } , receiveValue: { data in
316+ XCTAssertNotNil ( data)
317+ } )
318+
319+ guard let url = URL ( string: " \( environment. scheme) :// \( environment. host) / \( environment. path) \( endpoint) " ) else {
320+ XCTFail ( " Invalid URL " )
321+ return
322+ }
323+
324+ XCTAssert ( session. lastURL == url)
325+ }
326+ }
327+
328+ @available ( iOS 13 . 0 , * )
329+ func testCombineAuthenticatedGetRequestInEnvironments( ) {
330+ MockEnvironment . allCases. forEach { environment in
331+ let params = [ " userID " : " 1234567 " ]
332+ let endpoint = " something "
333+ let session = MockURLSession ( )
334+ let networkManager = NetworkManager ( environment: environment, session: session, sessionCookieName: " Value " )
335+
336+ session. requiresAuthentication = false
337+ // Send an initial request to make sett the cookie
338+ let _ = networkManager. request ( method: . post, endpoint: " login " )
339+ . sink ( receiveCompletion: { _ in
340+ return
341+ } ) { _ in
342+ return
343+ }
344+
345+ session. requiresAuthentication = true
346+
347+ let _ = networkManager. authenticatedRequest ( method: . get, endpoint: endpoint, parameters: params)
348+ . sink ( receiveCompletion: { completion in
349+ switch completion {
350+ case . failure( let error) :
351+ XCTFail ( " Error: \( error. localizedDescription) " )
352+ case . finished:
353+ return
354+ }
355+ } , receiveValue: { data in
356+ XCTAssertNotNil ( data)
357+ } )
358+
359+ guard let url = URL ( string: " \( environment. scheme) :// \( environment. host) / \( environment. path) \( endpoint) ? \( queryString ( from: params) ) " ) else {
360+ XCTFail ( " Invalid URL " )
361+ return
362+ }
363+
364+ XCTAssert ( session. lastURL == url)
365+ }
366+ }
207367
208368 // MARK: - Test Helpers
209369
0 commit comments