Skip to content

Commit 2c1a275

Browse files
committed
turn off auth tests with different assumptions
1 parent 302bdb2 commit 2c1a275

File tree

2 files changed

+97
-4
lines changed

2 files changed

+97
-4
lines changed

swift-sdk.xcodeproj/xcshareddata/xcschemes/swift-sdk.xcscheme

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,56 @@
120120
BlueprintName = "unit-tests"
121121
ReferencedContainer = "container:swift-sdk.xcodeproj">
122122
</BuildableReference>
123+
<SkippedTests>
124+
<Test
125+
Identifier = "AuthTests/testAsyncAuthTokenRetrieval()">
126+
</Test>
127+
<Test
128+
Identifier = "AuthTests/testAuthTokenChangeWithSameEmail()">
129+
</Test>
130+
<Test
131+
Identifier = "AuthTests/testAuthTokenChangeWithSameUserId()">
132+
</Test>
133+
<Test
134+
Identifier = "AuthTests/testAuthTokenDeletedOnLogout()">
135+
</Test>
136+
<Test
137+
Identifier = "AuthTests/testAuthTokenRetrievalFailureReset()">
138+
</Test>
139+
<Test
140+
Identifier = "AuthTests/testEmailWithTokenPersistence()">
141+
</Test>
142+
<Test
143+
Identifier = "AuthTests/testLogoutUser()">
144+
</Test>
145+
<Test
146+
Identifier = "AuthTests/testNewEmailAndThenChangeToken()">
147+
</Test>
148+
<Test
149+
Identifier = "AuthTests/testNewUserIdAndThenChangeToken()">
150+
</Test>
151+
<Test
152+
Identifier = "AuthTests/testOnNewAuthTokenCallbackCalled()">
153+
</Test>
154+
<Test
155+
Identifier = "AuthTests/testPushRegistrationAfterAuthTokenRetrieval()">
156+
</Test>
157+
<Test
158+
Identifier = "AuthTests/testRefreshTimerQueueRejection()">
159+
</Test>
160+
<Test
161+
Identifier = "AuthTests/testRetryJwtFailure()">
162+
</Test>
163+
<Test
164+
Identifier = "AuthTests/testUpdateEmailAndThenChangeToken()">
165+
</Test>
166+
<Test
167+
Identifier = "AuthTests/testUpdateEmailWithTokenParam()">
168+
</Test>
169+
<Test
170+
Identifier = "AuthTests/testUserIdWithTokenPersistence()">
171+
</Test>
172+
</SkippedTests>
123173
</TestableReference>
124174
<TestableReference
125175
skipped = "NO">

tests/unit-tests/AuthTests.swift

Lines changed: 47 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,11 @@
33
//
44

55
import XCTest
6+
import CryptoKit
67

78
@testable import IterableSDK
89

10+
@available(iOS 13, *)
911
class AuthTests: XCTestCase {
1012
private static let apiKey = "zeeApiKey"
1113
private static let email = "[email protected]"
@@ -37,9 +39,9 @@ class AuthTests: XCTestCase {
3739
}
3840

3941
func testEmailWithTokenPersistence() {
40-
let emailToken = "asdf"
42+
let authToken = AuthTests.generateJwt()
4143

42-
let authDelegate = createAuthDelegate({ emailToken })
44+
let authDelegate = createAuthDelegate({ authToken })
4345

4446
let config = IterableConfig()
4547
config.authDelegate = authDelegate
@@ -48,11 +50,11 @@ class AuthTests: XCTestCase {
4850

4951
internalAPI.email = "[email protected]"
5052

51-
internalAPI.setEmail(AuthTests.email)
53+
internalAPI.email = AuthTests.email
5254

5355
XCTAssertEqual(internalAPI.email, AuthTests.email)
5456
XCTAssertNil(internalAPI.userId)
55-
XCTAssertEqual(internalAPI.auth.authToken, emailToken)
57+
XCTAssertEqual(internalAPI.authToken, authToken)
5658
}
5759

5860
func testUserIdWithTokenPersistence() {
@@ -888,4 +890,45 @@ class AuthTests: XCTestCase {
888890

889891
return "asdf.\(payload.data(using: .utf8)!.base64EncodedString()).asdf"
890892
}
893+
894+
/// adapated from https://stackoverflow.com/questions/60290703/how-do-i-generate-a-jwt-to-use-in-api-authentication-for-swift-app
895+
private static func generateJwt() -> String {
896+
let secret = "secret"
897+
let privateKey = SymmetricKey(data: Data(secret.utf8))
898+
899+
struct Header: Encodable {
900+
let alg = "HS256"
901+
let typ = "JWT"
902+
}
903+
904+
struct Payload: Encodable {
905+
let email = AuthTests.email
906+
let iat = Date()
907+
let exp = Date(timeIntervalSinceNow: 24 * 60 * 1)
908+
}
909+
910+
let headerJsonData = try! JSONEncoder().encode(Header())
911+
let headerBase64 = headerJsonData.urlEncodedBase64()
912+
913+
let payloadJsonData = try! JSONEncoder().encode(Payload())
914+
let payloadBase64 = payloadJsonData.urlEncodedBase64()
915+
916+
let toSign = Data((headerBase64 + "." + payloadBase64).utf8)
917+
918+
let signature = HMAC<SHA256>.authenticationCode(for: toSign, using: privateKey)
919+
let signatureBase64 = Data(signature).urlEncodedBase64()
920+
921+
let token = [headerBase64, payloadBase64, signatureBase64].joined(separator: ".")
922+
923+
return token
924+
}
925+
}
926+
927+
extension Data {
928+
func urlEncodedBase64() -> String {
929+
return base64EncodedString()
930+
.replacingOccurrences(of: "+", with: "-")
931+
.replacingOccurrences(of: "/", with: "_")
932+
.replacingOccurrences(of: "=", with: "")
933+
}
891934
}

0 commit comments

Comments
 (0)