@@ -37,7 +37,30 @@ class LoginManagerTests: XCTestCase, ViewControllerCompatibleTest {
3737
3838 var window : UIWindow !
3939
40- private func setupSessionStub( ) {
40+ override func setUp( ) {
41+ let url = URL ( string: " https://example.com/auth " )
42+ LoginManager . shared. setup ( channelID: " 123 " , universalLinkURL: url)
43+ }
44+
45+ override func tearDown( ) async throws {
46+ LoginManager . shared. reset ( )
47+ resetViewController ( )
48+ }
49+
50+ func testSetupLoginManager( ) {
51+ XCTAssertNotNil ( Session . shared)
52+ XCTAssertNotNil ( AccessTokenStore . shared)
53+ XCTAssertNotNil ( LoginConfiguration . shared)
54+
55+ XCTAssertTrue ( LoginManager . shared. isSetupFinished)
56+ }
57+
58+ func testLoginAction( ) {
59+ let expect = expectation ( description: " \( #file) _ \( #line) " )
60+
61+ XCTAssertFalse ( LoginManager . shared. isAuthorized)
62+ XCTAssertFalse ( LoginManager . shared. isAuthorizing)
63+
4164 let delegateStub = SessionDelegateStub ( stubs: [
4265 . init( data: PostExchangeTokenRequest . successData, responseCode: 200 ) ,
4366 . init( data: GetUserProfileRequest . successData, responseCode: 200 )
@@ -46,23 +69,9 @@ class LoginManagerTests: XCTestCase, ViewControllerCompatibleTest {
4669 configuration: LoginConfiguration . shared,
4770 delegate: delegateStub
4871 )
49- }
50-
51- private func performLoginTest(
52- permissions: Set < LoginPermission > ,
53- expectOpenID: Bool ,
54- useNonIsolatedResumeURL: Bool = false ,
55- additionalAssertions: ( ( LoginResult , LoginProcess ) -> Void ) ? = nil
56- ) {
57- let expect = expectation ( description: " \( #file) _ \( #line) " )
58-
59- XCTAssertFalse ( LoginManager . shared. isAuthorized)
60- XCTAssertFalse ( LoginManager . shared. isAuthorizing)
61-
62- setupSessionStub ( )
6372
6473 var process : LoginProcess !
65- process = LoginManager . shared. login ( permissions: permissions , in: setupViewController ( ) ) {
74+ process = LoginManager . shared. login ( permissions: [ . profile ] , in: setupViewController ( ) ) {
6675 loginResult in
6776 XCTAssertNotNil ( loginResult. value)
6877
@@ -73,86 +82,75 @@ class LoginManagerTests: XCTestCase, ViewControllerCompatibleTest {
7382 XCTAssertTrue ( LoginManager . shared. isAuthorized)
7483 XCTAssertFalse ( LoginManager . shared. isAuthorizing)
7584
76- if expectOpenID {
77- XCTAssertNotNil ( result. IDTokenNonce)
78- XCTAssertEqual ( result. IDTokenNonce, process!. IDTokenNonce)
79- } else {
80- XCTAssertNil ( result. IDTokenNonce)
81- }
85+ // IDTokenNonce should be `nil` when `.openID` not required.
86+ XCTAssertNil ( result. IDTokenNonce)
8287
83- additionalAssertions ? ( result , process! )
88+ XCTAssertEqual ( process . loginRoute , . appUniversalLink )
8489
8590 try ! AccessTokenStore . shared. removeCurrentAccessToken ( )
8691 expect. fulfill ( )
8792 } !
8893
89- if !expectOpenID {
90- process. appUniversalLinkFlow = AppUniversalLinkFlow ( parameter: sampleFlowParameters)
91- }
94+ // Set a sample value for checking `loginRoute` in the result.
95+ process. appUniversalLinkFlow = AppUniversalLinkFlow ( parameter: sampleFlowParameters)
9296
9397 DispatchQueue . main. asyncAfter ( deadline: . now( ) + 0.1 ) {
9498
9599 XCTAssertFalse ( LoginManager . shared. isAuthorized)
96100 XCTAssertTrue ( LoginManager . shared. isAuthorizing)
97101
102+ // Simulate auth result
98103 let urlString = " \( Constant . thirdPartyAppReturnURL) ?code=123&state= \( process. processID) "
99- let handled : Bool
100- if useNonIsolatedResumeURL {
101- handled = process. nonisolatedResumeOpenURL ( url: URL ( string: urlString) !)
102- } else {
103- handled = process. resumeOpenURL ( url: URL ( string: urlString) !)
104- }
104+ let handled = process. resumeOpenURL ( url: URL ( string: urlString) !)
105105 XCTAssertTrue ( handled)
106106 }
107107
108108 waitForExpectations ( timeout: 2 , handler: nil )
109109 }
110-
111- override func setUp( ) {
112- let url = URL ( string: " https://example.com/auth " )
113- LoginManager . shared. setup ( channelID: " 123 " , universalLinkURL: url)
114- }
115-
116- override func tearDown( ) async throws {
117- LoginManager . shared. reset ( )
118- resetViewController ( )
119- }
120-
121- func testSetupLoginManager( ) {
122- XCTAssertNotNil ( Session . shared)
123- XCTAssertNotNil ( AccessTokenStore . shared)
124- XCTAssertNotNil ( LoginConfiguration . shared)
125-
126- XCTAssertTrue ( LoginManager . shared. isSetupFinished)
127- }
128-
129- func testLoginAction( ) {
130- performLoginTest (
131- permissions: [ . profile] ,
132- expectOpenID: false
133- ) { result, process in
134- XCTAssertEqual ( process. loginRoute, . appUniversalLink)
135- }
136- }
137110
138111 func testLoginActionWithOpenID( ) {
139- performLoginTest (
140- permissions: [ . profile, . openID] ,
141- expectOpenID: true
112+ let expect = expectation ( description: " \( #file) _ \( #line) " )
113+
114+ XCTAssertFalse ( LoginManager . shared. isAuthorized)
115+ XCTAssertFalse ( LoginManager . shared. isAuthorizing)
116+
117+ let delegateStub = SessionDelegateStub ( stubs: [
118+ . init( data: PostExchangeTokenRequest . successData, responseCode: 200 ) ,
119+ . init( data: GetUserProfileRequest . successData, responseCode: 200 )
120+ ] )
121+ Session . _shared = Session (
122+ configuration: LoginConfiguration . shared,
123+ delegate: delegateStub
142124 )
143- }
144125
145- func testLoginActionWithNonIsolatedResumeOpenURL( ) {
146- performLoginTest (
147- permissions: [ . profile] ,
148- expectOpenID: false ,
149- useNonIsolatedResumeURL: true
150- ) { result, process in
151- XCTAssertEqual ( process. loginRoute, . appUniversalLink)
152- }
153- }
126+ var process : LoginProcess !
127+ process = LoginManager . shared. login ( permissions: [ . profile, . openID] , in: setupViewController ( ) ) {
128+ loginResult in
129+ XCTAssertNotNil ( loginResult. value)
154130
131+ let result = loginResult. value!
155132
133+ // IDTokenNonce should be `nil` when `.openID` not required.
134+ XCTAssertNotNil ( result. IDTokenNonce)
135+ XCTAssertEqual ( result. IDTokenNonce, process!. IDTokenNonce)
136+
137+ try ! AccessTokenStore . shared. removeCurrentAccessToken ( )
138+ expect. fulfill ( )
139+ } !
140+
141+ DispatchQueue . main. asyncAfter ( deadline: . now( ) + 0.1 ) {
142+
143+ XCTAssertFalse ( LoginManager . shared. isAuthorized)
144+ XCTAssertTrue ( LoginManager . shared. isAuthorizing)
145+
146+ let urlString = " \( Constant . thirdPartyAppReturnURL) ?code=123&state= \( process. processID) "
147+ let handled = process. resumeOpenURL ( url: URL ( string: urlString) !)
148+ XCTAssertTrue ( handled)
149+ }
150+
151+ waitForExpectations ( timeout: 2 , handler: nil )
152+ }
153+
156154 func testLogout( ) {
157155 let expect = expectation ( description: " \( #file) _ \( #line) " )
158156
0 commit comments