Skip to content

Commit

Permalink
[tests] add more to reset User Manager state between tests
Browse files Browse the repository at this point in the history
* Also move its reset methods into an extension
  • Loading branch information
nan-li committed Apr 29, 2024
1 parent 975076e commit ef9d2c6
Show file tree
Hide file tree
Showing 3 changed files with 30 additions and 29 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ extension OSModelStoreListener {
store.changeSubscription.subscribe(self)
}

func close() {
public func close() {
store.changeSubscription.unsubscribe(self)
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -120,7 +120,7 @@ public class OneSignalUserManagerImpl: NSObject, OneSignalUserManager {

var identityModelRepo = OSIdentityModelRepo()

private var hasCalledStart = false
var hasCalledStart = false

private var jwtExpiredHandler: OSJwtExpiredHandler?

Expand All @@ -139,7 +139,7 @@ public class OneSignalUserManagerImpl: NSObject, OneSignalUserManager {
return user
}

private var _user: OSUserInternal?
var _user: OSUserInternal?

// This is a user instance to operate on when there is no app_id and/or privacy consent yet, effectively no-op.
// The models are not added to any model stores.
Expand Down
53 changes: 27 additions & 26 deletions iOS_SDK/OneSignalSDK/OneSignalUserMocks/OneSignalUserMocks.swift
Original file line number Diff line number Diff line change
Expand Up @@ -36,46 +36,47 @@ public class OneSignalUserMocks: NSObject {

public static func reset() {
resetStaticUserExecutor()
resetUserManager()
// TODO: Reset Operation Repo first
// OSCoreMocks.resetOperationRepo()
OneSignalUserManagerImpl.sharedInstance.reset()
}

public static func resetStaticUserExecutor() {
OSUserExecutor.userRequestQueue.removeAll()
OSUserExecutor.transferSubscriptionRequestQueue.removeAll()
}
}

extension OSIdentityModelRepo {
func reset() {
self.models = [:]
}
}

/**
extension OneSignalUserManagerImpl {
/**
User Manager needs to reset between tests until we dependency inject the User Manager.
For example, executors it owns may have cached requests or deltas that would have carried over.
This is adapting as more data needs to be considered and reset...
*/
public static func resetUserManager() {
OneSignalUserManagerImpl.sharedInstance.identityModelRepo.reset()

OneSignalUserManagerImpl.sharedInstance.identityModelStore.clearModelsFromStore()
OneSignalUserManagerImpl.sharedInstance.propertiesModelStore.clearModelsFromStore()
OneSignalUserManagerImpl.sharedInstance.subscriptionModelStore.clearModelsFromStore()
OneSignalUserManagerImpl.sharedInstance.pushSubscriptionModelStore.clearModelsFromStore()
func reset() {
identityModelRepo.reset()

let propertyExecutor = OSPropertyOperationExecutor()
let identityExecutor = OSIdentityOperationExecutor()
let subscriptionExecutor = OSSubscriptionOperationExecutor()
// Model store listeners unsubscribe to their models
// User Manager start() will subscribe them
identityModelStoreListener.close()
propertiesModelStoreListener.close()
subscriptionModelStoreListener.close()
pushSubscriptionModelStoreListener.close()

OneSignalUserManagerImpl.sharedInstance.propertyExecutor = propertyExecutor
OneSignalUserManagerImpl.sharedInstance.identityExecutor = identityExecutor
OneSignalUserManagerImpl.sharedInstance.subscriptionExecutor = subscriptionExecutor
// Executor instances do no need to be reset, they are initailized in start()

// TODO: Reset Operation Repo first
// OSCoreMocks.resetOperationRepo()
identityModelStore.clearModelsFromStore()
propertiesModelStore.clearModelsFromStore()
subscriptionModelStore.clearModelsFromStore()
pushSubscriptionModelStore.clearModelsFromStore()

OSOperationRepo.sharedInstance.addExecutor(identityExecutor)
OSOperationRepo.sharedInstance.addExecutor(propertyExecutor)
OSOperationRepo.sharedInstance.addExecutor(subscriptionExecutor)
}
}

extension OSIdentityModelRepo {
func reset() {
self.models = [:]
_user = nil
hasCalledStart = false
}
}

0 comments on commit ef9d2c6

Please sign in to comment.