Skip to content

Commit 1329bd1

Browse files
committed
wip
1 parent 96abd8b commit 1329bd1

File tree

7 files changed

+58
-5
lines changed

7 files changed

+58
-5
lines changed

iOS_SDK/OneSignalSDK/OneSignalCoreMocks/OneSignalCoreMocks.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -28,5 +28,5 @@ FOUNDATION_EXPORT double OneSignalCoreMocksVersionNumber;
2828
FOUNDATION_EXPORT const unsigned char OneSignalCoreMocksVersionString[];
2929

3030
// In this header, you should import all the public headers of your framework using statements like #import <OneSignalCoreMocks/PublicHeader.h>
31-
31+
#import "NSBundleOverrider.h"
3232

iOS_SDK/OneSignalSDK/OneSignalUser/Source/Executors/OSUserExecutor.swift

+4-1
Original file line numberDiff line numberDiff line change
@@ -124,7 +124,7 @@ class OSUserExecutor {
124124
createUser(userInstance)
125125
}
126126
}
127-
}
127+
} // TODO: 🟡 check sharedInstance.user above createUser(userInstance)
128128

129129
private func getIdentityModel(_ modelId: String) -> OSIdentityModel? {
130130
return OneSignalUserManagerImpl.sharedInstance.getIdentityModel(modelId)
@@ -405,6 +405,8 @@ extension OSUserExecutor {
405405
// This will hydrate the OneSignal ID for any pending requests
406406
self.createUser(aliasLabel: request.aliasLabel, aliasId: request.aliasId, identityModel: request.identityModelToUpdate)
407407
}
408+
// TODO: 🟡 check sharedInstance.user userInstance
409+
408410
} else if responseType == .invalid || responseType == .unauthorized {
409411
// Failed, no retry
410412
self.removeFromQueue(request)
@@ -548,6 +550,7 @@ extension OSUserExecutor {
548550
if let propertiesObject = parsePropertiesObjectResponse(response) {
549551
OneSignalUserManagerImpl.sharedInstance._user?.propertiesModel.hydrate(propertiesObject)
550552
}
553+
// TODO: 🟡 check sharedInstance.user using _user instead
551554

552555
// Now parse email and sms subscriptions
553556
if let subscriptionObject = parseSubscriptionObjectResponse(response) {

iOS_SDK/OneSignalSDK/OneSignalUser/Source/OSPropertiesModelStoreListener.swift

+2
Original file line numberDiff line numberDiff line change
@@ -58,5 +58,7 @@ class OSPropertiesModelStoreListener: OSModelStoreListener {
5858
property: args.property,
5959
value: args.newValue
6060
)
61+
// TODO: 🟡 check sharedInstance.user userInstance
62+
6163
}
6264
}

iOS_SDK/OneSignalSDK/OneSignalUser/Source/OSSubscriptionModelStoreListener.swift

+3-1
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@ class OSSubscriptionModelStoreListener: OSModelStoreListener {
4848
property: model.type.rawValue, // push, email, sms
4949
value: model.address ?? ""
5050
)
51+
// TODO: 🟡 check sharedInstance.user userInstance
5152
}
5253

5354
/**
@@ -65,6 +66,7 @@ class OSSubscriptionModelStoreListener: OSModelStoreListener {
6566
property: model.type.rawValue, // push, email, sms
6667
value: model.address ?? ""
6768
)
69+
// TODO: 🟡 check sharedInstance.user userInstance
6870
}
6971

7072
func getUpdateModelDelta(_ args: OSModelChangedArgs) -> OSDelta? {
@@ -82,13 +84,13 @@ class OSSubscriptionModelStoreListener: OSModelStoreListener {
8284
let condition = OSIamFetchReadyCondition.sharedInstance(withId: onesignalId)
8385
condition.setSubscriptionUpdatePending(value: true)
8486
}
85-
8687
return OSDelta(
8788
name: OS_UPDATE_SUBSCRIPTION_DELTA,
8889
identityModelId: userInstance.identityModel.modelId,
8990
model: args.model,
9091
property: args.property,
9192
value: args.newValue
9293
)
94+
// TODO: 🟡 check sharedInstance.user
9395
}
9496
}

iOS_SDK/OneSignalSDK/OneSignalUser/Source/OneSignalUserManagerImpl.swift

+8-2
Original file line numberDiff line numberDiff line change
@@ -203,22 +203,28 @@ public class OneSignalUserManagerImpl: NSObject, OneSignalUserManager {
203203
return
204204
}
205205

206-
OneSignalLog.onesignalLog(.LL_VERBOSE, message: "OneSignalUserManager calling start")
206+
OneSignalLog.onesignalLog(.LL_VERBOSE, message: "💛 OneSignalUserManager calling start")
207207

208208
OSNotificationsManager.delegate = self
209209

210210
var hasCachedUser = false
211211

212212
// Path 1. Load user from cache, if any
213213
// Corrupted state if any of these models exist without the others
214+
215+
let i = identityModelStore.getModels()[OS_IDENTITY_MODEL_KEY]
216+
let p = propertiesModelStore.getModels()[OS_PROPERTIES_MODEL_KEY]
217+
let s = pushSubscriptionModelStore.getModels()[OS_PUSH_SUBSCRIPTION_MODEL_KEY]
218+
214219
if let identityModel = identityModelStore.getModels()[OS_IDENTITY_MODEL_KEY],
215220
let propertiesModel = propertiesModelStore.getModels()[OS_PROPERTIES_MODEL_KEY],
216221
let pushSubscription = pushSubscriptionModelStore.getModels()[OS_PUSH_SUBSCRIPTION_MODEL_KEY] {
217222
hasCachedUser = true
218223
_user = OSUserInternalImpl(identityModel: identityModel, propertiesModel: propertiesModel, pushSubscriptionModel: pushSubscription)
219224
addIdentityModelToRepo(identityModel)
220-
OneSignalLog.onesignalLog(.LL_VERBOSE, message: "OneSignalUserManager.start called, loaded the user from cache.")
225+
OneSignalLog.onesignalLog(.LL_VERBOSE, message: "💛 OneSignalUserManager.start called, loaded the user from cache.")
221226
}
227+
OneSignalLog.onesignalLog(.LL_VERBOSE, message: "💛 OneSignalUserManager after uncache user")
222228

223229
// TODO: Update the push sub model with any new state from NotificationsManager
224230

iOS_SDK/OneSignalSDK/OneSignalUserMocks/OneSignalUserMocks.swift

+31
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
*/
2727

2828
import Foundation
29+
import OneSignalCore
2930
import OneSignalOSCore
3031
import OneSignalOSCoreMocks
3132
@testable import OneSignalUser
@@ -39,6 +40,36 @@ public class OneSignalUserMocks: NSObject {
3940
OSCoreMocks.resetOperationRepo()
4041
OneSignalUserManagerImpl.sharedInstance.reset()
4142
}
43+
44+
@objc
45+
public static func cacheUser() {
46+
let identityModel = OSIdentityModel(aliases: nil, changeNotifier: OSEventProducer())
47+
let propertiesModel = OSPropertiesModel(changeNotifier: OSEventProducer())
48+
let subscriptionModel = OneSignalUserManagerImpl.sharedInstance.createDefaultPushSubscription(subscriptionId: nil)
49+
// models[id] = model
50+
OneSignalUserDefaults.initShared().saveCodeableData(
51+
forKey: OS_IDENTITY_MODEL_STORE_KEY,
52+
withValue: [OS_IDENTITY_MODEL_KEY: identityModel]
53+
)
54+
OneSignalUserDefaults.initShared().saveCodeableData(
55+
forKey: OS_PROPERTIES_MODEL_STORE_KEY,
56+
withValue: [OS_PROPERTIES_MODEL_KEY: propertiesModel]
57+
)
58+
OneSignalUserDefaults.initShared().saveCodeableData(
59+
forKey: OS_PUSH_SUBSCRIPTION_MODEL_STORE_KEY,
60+
withValue: [OS_PUSH_SUBSCRIPTION_MODEL_KEY: subscriptionModel]
61+
)
62+
}
63+
64+
@objc
65+
public static func setUser() {
66+
let identityModel = OSIdentityModel(aliases: nil, changeNotifier: OSEventProducer())
67+
let propertiesModel = OSPropertiesModel(changeNotifier: OSEventProducer())
68+
let subscriptionModel = OneSignalUserManagerImpl.sharedInstance.createDefaultPushSubscription(subscriptionId: nil)
69+
OneSignalUserManagerImpl.sharedInstance.identityModelStore.add(id: OS_IDENTITY_MODEL_KEY, model: identityModel, hydrating: false)
70+
OneSignalUserManagerImpl.sharedInstance.propertiesModelStore.add(id: OS_PROPERTIES_MODEL_KEY, model: propertiesModel, hydrating: false)
71+
OneSignalUserManagerImpl.sharedInstance.pushSubscriptionModelStore.add(id: OS_PUSH_SUBSCRIPTION_MODEL_KEY, model: subscriptionModel, hydrating: false)
72+
}
4273
}
4374

4475
extension OSIdentityModelRepo {

iOS_SDK/OneSignalSDK/OneSignalUserTests/OneSignalUserTests.swift

+9
Original file line numberDiff line numberDiff line change
@@ -152,4 +152,13 @@ final class OneSignalUserTests: XCTestCase {
152152
contains: expectedPayload)
153153
)
154154
}
155+
156+
func testUserManagerStart_doesNotDeadlock() throws {
157+
// Cache a user via Property, Identity, Subscription model in stores
158+
OneSignalUserMocks.setUser()
159+
//appVersion = Bundle.main.infoDictionary?["CFBundleShortVersionString"] as? String
160+
NSBundleOverrider
161+
OneSignalUserManagerImpl.sharedInstance.start()
162+
163+
}
155164
}

0 commit comments

Comments
 (0)