Skip to content

Commit 9af852f

Browse files
committed
Merge pull request #348 from Iterable/MOB-1895-allow-token-change
[MOB-1895] allow same email or userId to only change token
1 parent e22949f commit 9af852f

File tree

2 files changed

+83
-25
lines changed

2 files changed

+83
-25
lines changed

swift-sdk/Internal/IterableAPIInternal.swift

Lines changed: 28 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -111,35 +111,39 @@ final class IterableAPIInternal: NSObject, PushTrackerProtocol, AuthProvider {
111111
}
112112

113113
func setEmail(_ email: String?, withToken token: String? = nil) {
114-
guard email != _email else {
115-
return
114+
if email != _email {
115+
logoutPreviousUser()
116+
117+
_email = email
118+
_userId = nil
119+
authToken = token
120+
121+
storeAuthData()
122+
123+
loginNewUser()
124+
} else if token != authToken {
125+
authToken = token
126+
127+
storeAuthData()
116128
}
117-
118-
logoutPreviousUser()
119-
120-
_email = email
121-
_userId = nil
122-
authToken = token
123-
124-
storeAuthData()
125-
126-
loginNewUser()
127129
}
128130

129131
func setUserId(_ userId: String?, withToken token: String? = nil) {
130-
guard userId != _userId else {
131-
return
132+
if userId != _userId {
133+
logoutPreviousUser()
134+
135+
_email = nil
136+
_userId = userId
137+
authToken = token
138+
139+
storeAuthData()
140+
141+
loginNewUser()
142+
} else if token != authToken {
143+
authToken = token
144+
145+
storeAuthData()
132146
}
133-
134-
logoutPreviousUser()
135-
136-
_userId = userId
137-
_email = nil
138-
authToken = token
139-
140-
storeAuthData()
141-
142-
loginNewUser()
143147
}
144148

145149
func logoutUser() {

tests/swift-sdk-swift-tests/AuthTests.swift

Lines changed: 55 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ class AuthTests: XCTestCase {
8383
XCTAssertNil(internalAPI.auth.authToken)
8484
}
8585

86-
func testEmailWithTokenChange() {
86+
func testNewEmailWithTokenChange() {
8787
let internalAPI = IterableAPIInternal.initializeForTesting()
8888

8989
let originalEmail = "[email protected]"
@@ -105,6 +105,28 @@ class AuthTests: XCTestCase {
105105
XCTAssertEqual(internalAPI.auth.authToken, newToken)
106106
}
107107

108+
func testNewUserIdWithTokenChange() {
109+
let internalAPI = IterableAPIInternal.initializeForTesting()
110+
111+
let originalUserId = "firstUserId"
112+
let originalToken = "nen"
113+
114+
let newUserId = "secondUserId"
115+
let newToken = "greedIsland"
116+
117+
internalAPI.setUserId(originalUserId, withToken: originalToken)
118+
119+
XCTAssertNil(internalAPI.email)
120+
XCTAssertEqual(internalAPI.userId, originalUserId)
121+
XCTAssertEqual(internalAPI.auth.authToken, originalToken)
122+
123+
internalAPI.setUserId(newUserId, withToken: newToken)
124+
125+
XCTAssertNil(internalAPI.email)
126+
XCTAssertEqual(internalAPI.userId, newUserId)
127+
XCTAssertEqual(internalAPI.auth.authToken, newToken)
128+
}
129+
108130
func testUpdateEmailWithToken() {
109131
let condition1 = expectation(description: "update email with auth token")
110132

@@ -151,4 +173,36 @@ class AuthTests: XCTestCase {
151173
XCTAssertNil(internalAPI.userId)
152174
XCTAssertNil(internalAPI.auth.authToken)
153175
}
176+
177+
func testAuthTokenChangeWithSameEmail() {
178+
let internalAPI = IterableAPIInternal.initializeForTesting()
179+
180+
internalAPI.setEmail(AuthTests.email, withToken: AuthTests.authToken)
181+
182+
XCTAssertEqual(internalAPI.email, AuthTests.email)
183+
XCTAssertEqual(internalAPI.auth.authToken, AuthTests.authToken)
184+
185+
let newAuthToken = AuthTests.authToken + "3984ru398gj893"
186+
187+
internalAPI.setEmail(AuthTests.email, withToken: newAuthToken)
188+
189+
XCTAssertEqual(internalAPI.email, AuthTests.email)
190+
XCTAssertEqual(internalAPI.auth.authToken, newAuthToken)
191+
}
192+
193+
func testAuthTokenChangeWithSameUserId() {
194+
let internalAPI = IterableAPIInternal.initializeForTesting()
195+
196+
internalAPI.setUserId(AuthTests.userId, withToken: AuthTests.authToken)
197+
198+
XCTAssertEqual(internalAPI.userId, AuthTests.userId)
199+
XCTAssertEqual(internalAPI.auth.authToken, AuthTests.authToken)
200+
201+
let newAuthToken = AuthTests.authToken + "3984ru398gj893"
202+
203+
internalAPI.setUserId(AuthTests.userId, withToken: newAuthToken)
204+
205+
XCTAssertEqual(internalAPI.userId, AuthTests.userId)
206+
XCTAssertEqual(internalAPI.auth.authToken, newAuthToken)
207+
}
154208
}

0 commit comments

Comments
 (0)