5
5
// Created by Guilherme Souza on 27/03/24.
6
6
//
7
7
8
- @testable import Auth
9
8
import ConcurrencyExtras
10
9
import CustomDump
10
+ import InlineSnapshotTesting
11
11
import TestHelpers
12
12
import XCTest
13
13
14
+ @testable import Auth
15
+
14
16
#if canImport(FoundationNetworking)
15
17
import FoundationNetworking
16
18
#endif
@@ -55,7 +57,7 @@ final class AuthClientIntegrationTests: XCTestCase {
55
57
let password = mockPassword ( )
56
58
57
59
let metadata : [ String : AnyJSON ] = [
58
- " test " : . integer( 42 ) ,
60
+ " test " : . integer( 42 )
59
61
]
60
62
61
63
let response = try await authClient. signUp (
@@ -74,23 +76,23 @@ final class AuthClientIntegrationTests: XCTestCase {
74
76
}
75
77
}
76
78
77
- // func testSignUpAndSignInWithPhone() async throws {
78
- // try await XCTAssertAuthChangeEvents([.initialSession, .signedIn, .signedOut, .signedIn]) {
79
- // let phone = mockPhoneNumber()
80
- // let password = mockPassword()
81
- // let metadata: [String: AnyJSON] = [
82
- // "test": .integer(42),
83
- // ]
84
- // let response = try await authClient.signUp(phone: phone, password: password, data: metadata)
85
- // XCTAssertNotNil(response.session)
86
- // XCTAssertEqual(response.user.phone, phone)
87
- // XCTAssertEqual(response.user.userMetadata["test"], 42)
88
- //
89
- // try await authClient.signOut()
90
- //
91
- // try await authClient.signIn(phone: phone, password: password)
92
- // }
93
- // }
79
+ // func testSignUpAndSignInWithPhone() async throws {
80
+ // try await XCTAssertAuthChangeEvents([.initialSession, .signedIn, .signedOut, .signedIn]) {
81
+ // let phone = mockPhoneNumber()
82
+ // let password = mockPassword()
83
+ // let metadata: [String: AnyJSON] = [
84
+ // "test": .integer(42),
85
+ // ]
86
+ // let response = try await authClient.signUp(phone: phone, password: password, data: metadata)
87
+ // XCTAssertNotNil(response.session)
88
+ // XCTAssertEqual(response.user.phone, phone)
89
+ // XCTAssertEqual(response.user.userMetadata["test"], 42)
90
+ //
91
+ // try await authClient.signOut()
92
+ //
93
+ // try await authClient.signIn(phone: phone, password: password)
94
+ // }
95
+ // }
94
96
95
97
func testSignInWithEmail_invalidEmail( ) async throws {
96
98
let email = mockEmail ( )
@@ -108,12 +110,12 @@ final class AuthClientIntegrationTests: XCTestCase {
108
110
}
109
111
}
110
112
111
- // func testSignInWithOTP_usingEmail() async throws {
112
- // let email = mockEmail()
113
- //
114
- // try await authClient.signInWithOTP(email: email)
115
- // try await authClient.verifyOTP(email: email, token: "123456", type: .magiclink)
116
- // }
113
+ // func testSignInWithOTP_usingEmail() async throws {
114
+ // let email = mockEmail()
115
+ //
116
+ // try await authClient.signInWithOTP(email: email)
117
+ // try await authClient.verifyOTP(email: email, token: "123456", type: .magiclink)
118
+ // }
117
119
118
120
func testSignOut_otherScope_shouldSignOutLocally( ) async throws {
119
121
try await XCTAssertAuthChangeEvents ( [ . initialSession, . signedIn] ) {
@@ -170,7 +172,7 @@ final class AuthClientIntegrationTests: XCTestCase {
170
172
func testUserIdentities( ) async throws {
171
173
let session = try await signUpIfNeededOrSignIn ( email: mockEmail ( ) , password: mockPassword ( ) )
172
174
let identities = try await authClient. userIdentities ( )
173
- expectNoDifference ( session. user. identities, identities)
175
+ expectNoDifference ( session. user. identities? . map ( \ . identityId ) ?? [ ] , identities. map ( \ . identityId ) )
174
176
}
175
177
176
178
func testUnlinkIdentity_withOnlyOneIdentity( ) async throws {
@@ -181,15 +183,8 @@ final class AuthClientIntegrationTests: XCTestCase {
181
183
do {
182
184
try await authClient. unlinkIdentity ( identity)
183
185
XCTFail ( " Expect failure " )
184
- } catch {
185
- if let error = error as? AuthError {
186
- XCTAssertEqual (
187
- error. localizedDescription,
188
- " User must have at least 1 identity after unlinking "
189
- )
190
- } else {
191
- XCTFail ( " Unexpected error: \( error) " )
192
- }
186
+ } catch let error as AuthError {
187
+ XCTAssertEqual ( error. errorCode, . singleIdentityNotDeletable)
193
188
}
194
189
}
195
190
@@ -246,8 +241,8 @@ final class AuthClientIntegrationTests: XCTestCase {
246
241
func testLinkIdentity( ) async throws {
247
242
try await signUpIfNeededOrSignIn ( email: mockEmail ( ) , password: mockPassword ( ) )
248
243
249
- try await authClient. linkIdentity ( provider: . github ) { url in
250
- XCTAssertTrue ( url. absoluteString. contains ( " github .com" ) )
244
+ try await authClient. linkIdentity ( provider: . apple ) { url in
245
+ XCTAssertTrue ( url. absoluteString. contains ( " apple .com" ) )
251
246
}
252
247
}
253
248
@@ -291,10 +286,10 @@ final class AuthClientIntegrationTests: XCTestCase {
291
286
}
292
287
}
293
288
294
- private func mockEmail( length: Int = Int . random ( in: 5 ... 10 ) ) -> String {
289
+ private func mockEmail( length: Int = Int . random ( in: 5 ... 10 ) ) -> String {
295
290
var username = " "
296
- for _ in 0 ..< length {
297
- let randomAscii = Int . random ( in: 97 ... 122 ) // ASCII values for lowercase letters
291
+ for _ in 0 ..< length {
292
+ let randomAscii = Int . random ( in: 97 ... 122 ) // ASCII values for lowercase letters
298
293
let randomCharacter = Character ( UnicodeScalar ( randomAscii) !)
299
294
username. append ( randomCharacter)
300
295
}
@@ -303,13 +298,13 @@ final class AuthClientIntegrationTests: XCTestCase {
303
298
304
299
private func mockPhoneNumber( ) -> String {
305
300
// Generate random country code (1 to 3 digits)
306
- let countryCode = String ( format: " %d " , Int . random ( in: 1 ... 999 ) )
301
+ let countryCode = String ( format: " %d " , Int . random ( in: 1 ... 999 ) )
307
302
308
303
// Generate random area code (3 digits)
309
- let areaCode = String ( format: " %03d " , Int . random ( in: 100 ... 999 ) )
304
+ let areaCode = String ( format: " %03d " , Int . random ( in: 100 ... 999 ) )
310
305
311
306
// Generate random subscriber number (7 digits)
312
- let subscriberNumber = String ( format: " %07d " , Int . random ( in: 1000000 ... 9999999 ) )
307
+ let subscriberNumber = String ( format: " %07d " , Int . random ( in: 1_000_000 ... 9_999_999 ) )
313
308
314
309
// Format the phone number in E.164 format
315
310
let phoneNumber = " \( countryCode) \( areaCode) \( subscriberNumber) "
@@ -322,12 +317,14 @@ final class AuthClientIntegrationTests: XCTestCase {
322
317
" abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#$%^&*()-_=+ "
323
318
var password = " "
324
319
325
- for _ in 0 ..< length {
326
- let randomIndex = Int . random ( in: 0 ..< allowedCharacters. count)
327
- let character = allowedCharacters [ allowedCharacters. index (
328
- allowedCharacters. startIndex,
329
- offsetBy: randomIndex
330
- ) ]
320
+ for _ in 0 ..< length {
321
+ let randomIndex = Int . random ( in: 0 ..< allowedCharacters. count)
322
+ let character = allowedCharacters [
323
+ allowedCharacters. index (
324
+ allowedCharacters. startIndex,
325
+ offsetBy: randomIndex
326
+ )
327
+ ]
331
328
password. append ( character)
332
329
}
333
330
0 commit comments