@@ -285,4 +285,143 @@ final class JetpackConnectionStoreTests: XCTestCase {
285285 // Then
286286 XCTAssertNil ( result)
287287 }
288+
289+ func test_registerSite_returns_correct_blogID( ) throws {
290+ // Given
291+ let urlSuffix = " /jetpack/v4/connection/register "
292+ network. simulateResponse ( requestUrlSuffix: urlSuffix, filename: " jetpack-connection-registration " )
293+ let store = JetpackConnectionStore ( dispatcher: dispatcher)
294+
295+ let setupAction = JetpackConnectionAction . authenticate ( siteURL: siteURL, network: network)
296+ store. onAction ( setupAction)
297+
298+ // When
299+ let result : Result < Int64 , Error > = waitFor { promise in
300+ let action = JetpackConnectionAction . registerSite { result in
301+ promise ( result)
302+ }
303+ store. onAction ( action)
304+ }
305+
306+ // Then
307+ XCTAssertTrue ( result. isSuccess)
308+ let blogID = try XCTUnwrap ( result. get ( ) )
309+ XCTAssertEqual ( blogID, 1234567890 )
310+ }
311+
312+ func test_registerSite_properly_relays_errors( ) {
313+ // Given
314+ let urlSuffix = " /jetpack/v4/connection/register "
315+ let error = NetworkError . unacceptableStatusCode ( statusCode: 500 )
316+ network. simulateError ( requestUrlSuffix: urlSuffix, error: error)
317+ let store = JetpackConnectionStore ( dispatcher: dispatcher)
318+
319+ let setupAction = JetpackConnectionAction . authenticate ( siteURL: siteURL, network: network)
320+ store. onAction ( setupAction)
321+
322+ // When
323+ let result : Result < Int64 , Error > = waitFor { promise in
324+ let action = JetpackConnectionAction . registerSite { result in
325+ promise ( result)
326+ }
327+ store. onAction ( action)
328+ }
329+
330+ // Then
331+ XCTAssertTrue ( result. isFailure)
332+ XCTAssertEqual ( result. failure as? NetworkError , error)
333+ }
334+
335+ func test_provisionConnection_returns_correct_provision_response( ) throws {
336+ // Given
337+ let urlSuffix = " /jetpack/v4/remote_provision "
338+ network. simulateResponse ( requestUrlSuffix: urlSuffix, filename: " jetpack-connection-provision " )
339+ let store = JetpackConnectionStore ( dispatcher: dispatcher)
340+
341+ let setupAction = JetpackConnectionAction . authenticate ( siteURL: siteURL, network: network)
342+ store. onAction ( setupAction)
343+
344+ // When
345+ let result : Result < JetpackConnectionProvisionResponse , Error > = waitFor { promise in
346+ let action = JetpackConnectionAction . provisionConnection { result in
347+ promise ( result)
348+ }
349+ store. onAction ( action)
350+ }
351+
352+ // Then
353+ XCTAssertTrue ( result. isSuccess)
354+ let response = try XCTUnwrap ( result. get ( ) )
355+ XCTAssertEqual ( response. userId, 123456789 )
356+ XCTAssertEqual ( response. scope, " administrator " )
357+ XCTAssertEqual ( response. secret, " secret_token_12345 " )
358+ }
359+
360+ func test_provisionConnection_properly_relays_errors( ) {
361+ // Given
362+ let urlSuffix = " /jetpack/v4/remote_provision "
363+ let error = NetworkError . unacceptableStatusCode ( statusCode: 500 )
364+ network. simulateError ( requestUrlSuffix: urlSuffix, error: error)
365+ let store = JetpackConnectionStore ( dispatcher: dispatcher)
366+
367+ let setupAction = JetpackConnectionAction . authenticate ( siteURL: siteURL, network: network)
368+ store. onAction ( setupAction)
369+
370+ // When
371+ let result : Result < JetpackConnectionProvisionResponse , Error > = waitFor { promise in
372+ let action = JetpackConnectionAction . provisionConnection { result in
373+ promise ( result)
374+ }
375+ store. onAction ( action)
376+ }
377+
378+ // Then
379+ XCTAssertTrue ( result. isFailure)
380+ XCTAssertEqual ( result. failure as? NetworkError , error)
381+ }
382+
383+ func test_finalizeJetpackConnection_returns_success_on_success( ) throws {
384+ // Given
385+ let urlSuffix = " sites/134/jetpack-remote-connect-user "
386+ network. simulateResponse ( requestUrlSuffix: urlSuffix, filename: " jetpack-connection-finalize-success " )
387+ let store = JetpackConnectionStore ( dispatcher: dispatcher)
388+
389+ // When
390+ let result : Result < Void , Error > = waitFor { promise in
391+ let provisionResponse = JetpackConnectionProvisionResponse ( userId: 123456789 , scope: " administrator " , secret: " secret_token_12345 " )
392+ let action = JetpackConnectionAction . finalizeConnection ( siteID: 134 ,
393+ siteURL: " http://test.com " ,
394+ provisionResponse: provisionResponse,
395+ network: self . network) { result in
396+ promise ( result)
397+ }
398+ store. onAction ( action)
399+ }
400+
401+ // Then
402+ XCTAssertTrue ( result. isSuccess)
403+ }
404+
405+ func test_finalizeJetpackConnection_returns_error_on_failure( ) throws {
406+ // Given
407+ let urlSuffix = " sites/134/jetpack-remote-connect-user "
408+ network. simulateResponse ( requestUrlSuffix: urlSuffix, filename: " jetpack-connection-finalize-error " )
409+ let store = JetpackConnectionStore ( dispatcher: dispatcher)
410+
411+ // When
412+ let result : Result < Void , Error > = waitFor { promise in
413+ let provisionResponse = JetpackConnectionProvisionResponse ( userId: 123456789 , scope: " administrator " , secret: " secret_token_12345 " )
414+ let action = JetpackConnectionAction . finalizeConnection ( siteID: 134 ,
415+ siteURL: " http://test.com " ,
416+ provisionResponse: provisionResponse,
417+ network: self . network) { result in
418+ promise ( result)
419+ }
420+ store. onAction ( action)
421+ }
422+
423+ // Then
424+ XCTAssertTrue ( result. isFailure)
425+ XCTAssertEqual ( result. failure as? JetpackConnectionError , . alreadyConnected)
426+ }
288427}
0 commit comments