From d5ead8832b55ea9c92ac1ac42c963637ac597f4d Mon Sep 17 00:00:00 2001 From: Nan Date: Sun, 12 Nov 2023 18:12:11 -0800 Subject: [PATCH 1/6] Rename an internal method for clarity Subscription Manager contains a method previously called `addOrUpdatePushSubscription` that is meant to be used in relation to updating push tokens. This method is renamed to `addOrUpdatePushSubscriptionToken` so as to not confuse with other updates on the push subscription such as detecting app version changes between app opens, which is a newly added feature --- .../user/internal/subscriptions/ISubscriptionManager.kt | 2 +- .../user/internal/subscriptions/impl/SubscriptionManager.kt | 2 +- .../user/internal/subscriptions/SubscriptionManagerTests.kt | 4 ++-- .../internal/listeners/DeviceRegistrationListener.kt | 4 ++-- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/OneSignalSDK/onesignal/core/src/main/java/com/onesignal/user/internal/subscriptions/ISubscriptionManager.kt b/OneSignalSDK/onesignal/core/src/main/java/com/onesignal/user/internal/subscriptions/ISubscriptionManager.kt index 4df6412733..51e439d1a3 100644 --- a/OneSignalSDK/onesignal/core/src/main/java/com/onesignal/user/internal/subscriptions/ISubscriptionManager.kt +++ b/OneSignalSDK/onesignal/core/src/main/java/com/onesignal/user/internal/subscriptions/ISubscriptionManager.kt @@ -11,7 +11,7 @@ interface ISubscriptionManager : IEventNotifier { fun addEmailSubscription(email: String) - fun addOrUpdatePushSubscription( + fun addOrUpdatePushSubscriptionToken( pushToken: String?, pushTokenStatus: SubscriptionStatus, ) diff --git a/OneSignalSDK/onesignal/core/src/main/java/com/onesignal/user/internal/subscriptions/impl/SubscriptionManager.kt b/OneSignalSDK/onesignal/core/src/main/java/com/onesignal/user/internal/subscriptions/impl/SubscriptionManager.kt index 6f8c465695..678380bab6 100644 --- a/OneSignalSDK/onesignal/core/src/main/java/com/onesignal/user/internal/subscriptions/impl/SubscriptionManager.kt +++ b/OneSignalSDK/onesignal/core/src/main/java/com/onesignal/user/internal/subscriptions/impl/SubscriptionManager.kt @@ -55,7 +55,7 @@ internal class SubscriptionManager( addSubscriptionToModels(SubscriptionType.SMS, sms) } - override fun addOrUpdatePushSubscription( + override fun addOrUpdatePushSubscriptionToken( pushToken: String?, pushTokenStatus: SubscriptionStatus, ) { diff --git a/OneSignalSDK/onesignal/core/src/test/java/com/onesignal/user/internal/subscriptions/SubscriptionManagerTests.kt b/OneSignalSDK/onesignal/core/src/test/java/com/onesignal/user/internal/subscriptions/SubscriptionManagerTests.kt index 897c3ee4ea..70292bc0eb 100644 --- a/OneSignalSDK/onesignal/core/src/test/java/com/onesignal/user/internal/subscriptions/SubscriptionManagerTests.kt +++ b/OneSignalSDK/onesignal/core/src/test/java/com/onesignal/user/internal/subscriptions/SubscriptionManagerTests.kt @@ -134,7 +134,7 @@ class SubscriptionManagerTests : FunSpec({ val subscriptionManager = SubscriptionManager(mockSubscriptionModelStore) // When - subscriptionManager.addOrUpdatePushSubscription("pushToken", SubscriptionStatus.SUBSCRIBED) + subscriptionManager.addOrUpdatePushSubscriptionToken("pushToken", SubscriptionStatus.SUBSCRIBED) // Then verify { @@ -170,7 +170,7 @@ class SubscriptionManagerTests : FunSpec({ val subscriptionManager = SubscriptionManager(mockSubscriptionModelStore) // When - subscriptionManager.addOrUpdatePushSubscription("pushToken2", SubscriptionStatus.FIREBASE_FCM_ERROR_IOEXCEPTION_OTHER) + subscriptionManager.addOrUpdatePushSubscriptionToken("pushToken2", SubscriptionStatus.FIREBASE_FCM_ERROR_IOEXCEPTION_OTHER) // Then pushSubscription.address shouldBe "pushToken2" diff --git a/OneSignalSDK/onesignal/notifications/src/main/java/com/onesignal/notifications/internal/listeners/DeviceRegistrationListener.kt b/OneSignalSDK/onesignal/notifications/src/main/java/com/onesignal/notifications/internal/listeners/DeviceRegistrationListener.kt index 49b9f95e2e..1904d31948 100644 --- a/OneSignalSDK/onesignal/notifications/src/main/java/com/onesignal/notifications/internal/listeners/DeviceRegistrationListener.kt +++ b/OneSignalSDK/onesignal/notifications/src/main/java/com/onesignal/notifications/internal/listeners/DeviceRegistrationListener.kt @@ -71,7 +71,7 @@ internal class DeviceRegistrationListener( if (pushSubscription.token.isNotEmpty()) { val permission = _notificationsManager.permission - _subscriptionManager.addOrUpdatePushSubscription( + _subscriptionManager.addOrUpdatePushSubscriptionToken( null, if (permission) SubscriptionStatus.SUBSCRIBED else SubscriptionStatus.NO_PERMISSION, ) @@ -79,7 +79,7 @@ internal class DeviceRegistrationListener( suspendifyOnThread { val pushTokenAndStatus = _pushTokenManager.retrievePushToken() val permission = _notificationsManager.permission - _subscriptionManager.addOrUpdatePushSubscription( + _subscriptionManager.addOrUpdatePushSubscriptionToken( pushTokenAndStatus.token, if (permission) pushTokenAndStatus.status else SubscriptionStatus.NO_PERMISSION, ) From 940c8f1ca5546482eba4bcc9506004b1d1a6d21d Mon Sep 17 00:00:00 2001 From: Nan Date: Wed, 29 Nov 2023 23:22:06 -0800 Subject: [PATCH 2/6] Add device properties to Subscription Model Subscription Model now has sdk, deviceOS, carrier, and appVersion as properties so that they can persist. The getter is defaulted to "" (the empty string) as these properties do not exist prior to v5.0.5. They are only read when detecting changes so it is ok that they default to "" as the empty string will not be sent. --- .../subscriptions/SubscriptionModel.kt | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/OneSignalSDK/onesignal/core/src/main/java/com/onesignal/user/internal/subscriptions/SubscriptionModel.kt b/OneSignalSDK/onesignal/core/src/main/java/com/onesignal/user/internal/subscriptions/SubscriptionModel.kt index f8ff8b206a..318957aa7b 100644 --- a/OneSignalSDK/onesignal/core/src/main/java/com/onesignal/user/internal/subscriptions/SubscriptionModel.kt +++ b/OneSignalSDK/onesignal/core/src/main/java/com/onesignal/user/internal/subscriptions/SubscriptionModel.kt @@ -108,4 +108,30 @@ class SubscriptionModel : Model() { set(value) { setEnumProperty(::status.name, value) } + + // Prior to v5.0.5, we did not save the following properties, so we must default get() to "" + + var sdk: String + get() = getStringProperty(::sdk.name) { "" } + set(value) { + setStringProperty(::sdk.name, value) + } + + var deviceOS: String + get() = getStringProperty(::deviceOS.name) { "" } + set(value) { + setStringProperty(::deviceOS.name, value) + } + + var carrier: String + get() = getStringProperty(::carrier.name) { "" } + set(value) { + setStringProperty(::carrier.name, value) + } + + var appVersion: String + get() = getStringProperty(::appVersion.name) { "" } + set(value) { + setStringProperty(::appVersion.name, value) + } } From bd5ce9c4539c8eabef30b3f60f60b5e426717f9e Mon Sep 17 00:00:00 2001 From: Nan Date: Wed, 29 Nov 2023 23:26:31 -0800 Subject: [PATCH 3/6] Initialize push subscription model with device data Additionally set these properties when a push subscription model is created: - sdk, deviceOS, carrier, appVersion --- .../java/com/onesignal/internal/OneSignalImp.kt | 13 +++++++++++++ .../impl/executors/RefreshUserOperationExecutor.kt | 4 ++++ 2 files changed, 17 insertions(+) diff --git a/OneSignalSDK/onesignal/core/src/main/java/com/onesignal/internal/OneSignalImp.kt b/OneSignalSDK/onesignal/core/src/main/java/com/onesignal/internal/OneSignalImp.kt index 573e0b449f..a8c2b4611a 100644 --- a/OneSignalSDK/onesignal/core/src/main/java/com/onesignal/internal/OneSignalImp.kt +++ b/OneSignalSDK/onesignal/core/src/main/java/com/onesignal/internal/OneSignalImp.kt @@ -1,7 +1,10 @@ package com.onesignal.internal import android.content.Context +import android.os.Build import com.onesignal.IOneSignal +import com.onesignal.common.AndroidUtils +import com.onesignal.common.DeviceUtils import com.onesignal.common.IDManager import com.onesignal.common.OneSignalUtils import com.onesignal.common.modeling.ModelChangeTags @@ -285,6 +288,12 @@ internal class OneSignalImp : IOneSignal, IServiceProvider { legacyUserSyncJSON.safeString("identifier") ?: "" pushSubscriptionModel.status = SubscriptionStatus.fromInt(notificationTypes) ?: SubscriptionStatus.NO_PERMISSION + + pushSubscriptionModel.sdk = OneSignalUtils.SDK_VERSION + pushSubscriptionModel.deviceOS = Build.VERSION.RELEASE + pushSubscriptionModel.carrier = DeviceUtils.getCarrierName(services.getService().appContext) ?: "" + pushSubscriptionModel.appVersion = AndroidUtils.getAppVersion(services.getService().appContext) ?: "" + configModel!!.pushSubscriptionId = legacyPlayerId subscriptionModelStore!!.add( pushSubscriptionModel, @@ -466,6 +475,10 @@ internal class OneSignalImp : IOneSignal, IServiceProvider { newPushSubscription.optedIn = currentPushSubscription?.optedIn ?: true newPushSubscription.address = currentPushSubscription?.address ?: "" newPushSubscription.status = currentPushSubscription?.status ?: SubscriptionStatus.NO_PERMISSION + newPushSubscription.sdk = OneSignalUtils.SDK_VERSION + newPushSubscription.deviceOS = Build.VERSION.RELEASE + newPushSubscription.carrier = DeviceUtils.getCarrierName(services.getService().appContext) ?: "" + newPushSubscription.appVersion = AndroidUtils.getAppVersion(services.getService().appContext) ?: "" // ensure we always know this devices push subscription ID configModel!!.pushSubscriptionId = newPushSubscription.id diff --git a/OneSignalSDK/onesignal/core/src/main/java/com/onesignal/user/internal/operations/impl/executors/RefreshUserOperationExecutor.kt b/OneSignalSDK/onesignal/core/src/main/java/com/onesignal/user/internal/operations/impl/executors/RefreshUserOperationExecutor.kt index 7ee10334dd..b92e3cbca6 100644 --- a/OneSignalSDK/onesignal/core/src/main/java/com/onesignal/user/internal/operations/impl/executors/RefreshUserOperationExecutor.kt +++ b/OneSignalSDK/onesignal/core/src/main/java/com/onesignal/user/internal/operations/impl/executors/RefreshUserOperationExecutor.kt @@ -106,6 +106,10 @@ internal class RefreshUserOperationExecutor( } } subscriptionModel.optedIn = subscriptionModel.status != SubscriptionStatus.UNSUBSCRIBE + subscriptionModel.sdk = subscription.sdk ?: "" + subscriptionModel.deviceOS = subscription.deviceOS ?: "" + subscriptionModel.carrier = subscription.carrier ?: "" + subscriptionModel.appVersion = subscription.appVersion ?: "" // We only add a push subscription if it is this device's push subscription. if (subscriptionModel.type != SubscriptionType.PUSH || subscriptionModel.id == _configModelStore.model.pushSubscriptionId) { From d9b7d01ff9a5091c56ae5cf445f5f3c401f8ba1a Mon Sep 17 00:00:00 2001 From: Nan Date: Wed, 29 Nov 2023 23:56:27 -0800 Subject: [PATCH 4/6] On new sessions, check for subscription property updates Let the SubscriptionManager refresh the push subscription model on new sessions. --- .../subscriptions/impl/SubscriptionManager.kt | 45 ++++++++++++++++++- 1 file changed, 44 insertions(+), 1 deletion(-) diff --git a/OneSignalSDK/onesignal/core/src/main/java/com/onesignal/user/internal/subscriptions/impl/SubscriptionManager.kt b/OneSignalSDK/onesignal/core/src/main/java/com/onesignal/user/internal/subscriptions/impl/SubscriptionManager.kt index 678380bab6..c119ab62d0 100644 --- a/OneSignalSDK/onesignal/core/src/main/java/com/onesignal/user/internal/subscriptions/impl/SubscriptionManager.kt +++ b/OneSignalSDK/onesignal/core/src/main/java/com/onesignal/user/internal/subscriptions/impl/SubscriptionManager.kt @@ -1,11 +1,18 @@ package com.onesignal.user.internal.subscriptions.impl +import android.os.Build +import com.onesignal.common.AndroidUtils +import com.onesignal.common.DeviceUtils import com.onesignal.common.IDManager +import com.onesignal.common.OneSignalUtils import com.onesignal.common.events.EventProducer import com.onesignal.common.modeling.IModelStoreChangeHandler import com.onesignal.common.modeling.ModelChangedArgs +import com.onesignal.core.internal.application.IApplicationService import com.onesignal.debug.LogLevel import com.onesignal.debug.internal.logging.Logging +import com.onesignal.session.internal.session.ISessionLifecycleHandler +import com.onesignal.session.internal.session.ISessionService import com.onesignal.user.internal.EmailSubscription import com.onesignal.user.internal.PushSubscription import com.onesignal.user.internal.SmsSubscription @@ -32,8 +39,10 @@ import com.onesignal.user.subscriptions.PushSubscriptionChangedState * subscription model. */ internal class SubscriptionManager( + private val _applicationService: IApplicationService, + private val _sessionService: ISessionService, private val _subscriptionModelStore: SubscriptionModelStore, -) : ISubscriptionManager, IModelStoreChangeHandler { +) : ISubscriptionManager, IModelStoreChangeHandler, ISessionLifecycleHandler { private val events = EventProducer() override var subscriptions: SubscriptionList = SubscriptionList(listOf(), UninitializedPushSubscription()) override val pushSubscriptionModel: SubscriptionModel @@ -45,8 +54,17 @@ internal class SubscriptionManager( } _subscriptionModelStore.subscribe(this) + _sessionService.subscribe(this) } + override fun onSessionStarted() { + refreshPushSubscriptionState() + } + + override fun onSessionActive() { } + + override fun onSessionEnded(duration: Long) { } + override fun addEmailSubscription(email: String) { addSubscriptionToModels(SubscriptionType.EMAIL, email) } @@ -215,4 +233,29 @@ internal class SubscriptionManager( } } } + + /** + * Called when app has gained focus and the subscription state should be refreshed. + */ + private fun refreshPushSubscriptionState() { + val pushSub = subscriptions.push + + if (pushSub is UninitializedPushSubscription) { + return + } + val pushSubModel = (pushSub as Subscription).model + + pushSubModel.sdk = OneSignalUtils.SDK_VERSION + pushSubModel.deviceOS = Build.VERSION.RELEASE + + val carrier = DeviceUtils.getCarrierName(_applicationService.appContext) + carrier?.let { + pushSubModel.carrier = carrier + } + + val appVersion = AndroidUtils.getAppVersion(_applicationService.appContext) + appVersion?.let { + pushSubModel.appVersion = appVersion + } + } } From c3e618cba063fc470ec010eabfed800617f6960e Mon Sep 17 00:00:00 2001 From: Nan Date: Wed, 29 Nov 2023 23:17:14 -0800 Subject: [PATCH 5/6] Don't hydrate device info for a push subscription model When hydrating an existing push subscription model, use existing local device-scoped information instead of remote information for: - sdk - deviceOS - carrier - appVersion This information should always come from the local device. The reason for this change is that on a new session, we may detect a change to one of these properties and we do not want to overwrite it with old remote data from the get_user response. --- .../subscriptions/SubscriptionModelStore.kt | 28 ++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) diff --git a/OneSignalSDK/onesignal/core/src/main/java/com/onesignal/user/internal/subscriptions/SubscriptionModelStore.kt b/OneSignalSDK/onesignal/core/src/main/java/com/onesignal/user/internal/subscriptions/SubscriptionModelStore.kt index 1e76b8a892..fd02219da4 100644 --- a/OneSignalSDK/onesignal/core/src/main/java/com/onesignal/user/internal/subscriptions/SubscriptionModelStore.kt +++ b/OneSignalSDK/onesignal/core/src/main/java/com/onesignal/user/internal/subscriptions/SubscriptionModelStore.kt @@ -1,8 +1,34 @@ package com.onesignal.user.internal.subscriptions +import com.onesignal.common.modeling.ModelChangeTags import com.onesignal.common.modeling.SimpleModelStore import com.onesignal.core.internal.preferences.IPreferencesService open class SubscriptionModelStore(prefs: IPreferencesService) : SimpleModelStore({ SubscriptionModel() -}, "subscriptions", prefs) +}, "subscriptions", prefs) { + override fun replaceAll( + models: List, + tag: String, + ) { + if (tag != ModelChangeTags.HYDRATE) { + return super.replaceAll(models, tag) + } + // When hydrating an existing push subscription model, use existing device properties + synchronized(models) { + for (model in models) { + if (model.type == SubscriptionType.PUSH) { + val existingPushModel = get(model.id) + if (existingPushModel != null) { + model.sdk = existingPushModel.sdk + model.deviceOS = existingPushModel.deviceOS + model.carrier = existingPushModel.carrier + model.appVersion = existingPushModel.appVersion + } + break + } + } + super.replaceAll(models, tag) + } + } +} From 7c8167dd635366b279764fc3dc92e4743b8ca00f Mon Sep 17 00:00:00 2001 From: jinliu9508 Date: Fri, 1 Dec 2023 13:17:24 -0500 Subject: [PATCH 6/6] Fix some test units and a linting issue --- .../subscriptions/SubscriptionModel.kt | 1 - .../subscriptions/SubscriptionManagerTests.kt | 42 ++++++++++++++----- 2 files changed, 32 insertions(+), 11 deletions(-) diff --git a/OneSignalSDK/onesignal/core/src/main/java/com/onesignal/user/internal/subscriptions/SubscriptionModel.kt b/OneSignalSDK/onesignal/core/src/main/java/com/onesignal/user/internal/subscriptions/SubscriptionModel.kt index 318957aa7b..a76434fa76 100644 --- a/OneSignalSDK/onesignal/core/src/main/java/com/onesignal/user/internal/subscriptions/SubscriptionModel.kt +++ b/OneSignalSDK/onesignal/core/src/main/java/com/onesignal/user/internal/subscriptions/SubscriptionModel.kt @@ -110,7 +110,6 @@ class SubscriptionModel : Model() { } // Prior to v5.0.5, we did not save the following properties, so we must default get() to "" - var sdk: String get() = getStringProperty(::sdk.name) { "" } set(value) { diff --git a/OneSignalSDK/onesignal/core/src/test/java/com/onesignal/user/internal/subscriptions/SubscriptionManagerTests.kt b/OneSignalSDK/onesignal/core/src/test/java/com/onesignal/user/internal/subscriptions/SubscriptionManagerTests.kt index 70292bc0eb..168c9c4cee 100644 --- a/OneSignalSDK/onesignal/core/src/test/java/com/onesignal/user/internal/subscriptions/SubscriptionManagerTests.kt +++ b/OneSignalSDK/onesignal/core/src/test/java/com/onesignal/user/internal/subscriptions/SubscriptionManagerTests.kt @@ -2,6 +2,8 @@ package com.onesignal.user.internal.subscriptions import com.onesignal.common.modeling.ModelChangeTags import com.onesignal.common.modeling.ModelChangedArgs +import com.onesignal.core.internal.application.IApplicationService +import com.onesignal.session.internal.session.ISessionService import com.onesignal.user.internal.subscriptions.impl.SubscriptionManager import com.onesignal.user.subscriptions.ISmsSubscription import io.kotest.core.spec.style.FunSpec @@ -24,6 +26,8 @@ class SubscriptionManagerTests : FunSpec({ test("initializes subscriptions from model store") { // Given val mockSubscriptionModelStore = mockk() + val mockApplicationService = mockk() + val mockSessionService = mockk(relaxed = true) val pushSubscription = SubscriptionModel() pushSubscription.id = "subscription1" pushSubscription.type = SubscriptionType.PUSH @@ -49,7 +53,7 @@ class SubscriptionManagerTests : FunSpec({ every { mockSubscriptionModelStore.subscribe(any()) } just runs every { mockSubscriptionModelStore.list() } returns listOfSubscriptions - val subscriptionManager = SubscriptionManager(mockSubscriptionModelStore) + val subscriptionManager = SubscriptionManager(mockApplicationService, mockSessionService, mockSubscriptionModelStore) // When val subscriptions = subscriptionManager.subscriptions @@ -71,13 +75,15 @@ class SubscriptionManagerTests : FunSpec({ test("add email subscription adds to model store") { // Given val mockSubscriptionModelStore = mockk() + val mockApplicationService = mockk() + val mockSessionService = mockk(relaxed = true) val listOfSubscriptions = listOf() every { mockSubscriptionModelStore.subscribe(any()) } just runs every { mockSubscriptionModelStore.add(any()) } just runs every { mockSubscriptionModelStore.list() } returns listOfSubscriptions - val subscriptionManager = SubscriptionManager(mockSubscriptionModelStore) + val subscriptionManager = SubscriptionManager(mockApplicationService, mockSessionService, mockSubscriptionModelStore) // When subscriptionManager.addEmailSubscription("name@company.com") @@ -98,13 +104,15 @@ class SubscriptionManagerTests : FunSpec({ test("add sms subscription adds to model store") { // Given val mockSubscriptionModelStore = mockk() + val mockApplicationService = mockk() + val mockSessionService = mockk(relaxed = true) val listOfSubscriptions = listOf() every { mockSubscriptionModelStore.subscribe(any()) } just runs every { mockSubscriptionModelStore.add(any()) } just runs every { mockSubscriptionModelStore.list() } returns listOfSubscriptions - val subscriptionManager = SubscriptionManager(mockSubscriptionModelStore) + val subscriptionManager = SubscriptionManager(mockApplicationService, mockSessionService, mockSubscriptionModelStore) // When subscriptionManager.addSmsSubscription("+15558675309") @@ -125,13 +133,15 @@ class SubscriptionManagerTests : FunSpec({ test("add push subscription adds to model store") { // Given val mockSubscriptionModelStore = mockk() + val mockApplicationService = mockk() + val mockSessionService = mockk(relaxed = true) val listOfSubscriptions = listOf() every { mockSubscriptionModelStore.subscribe(any()) } just runs every { mockSubscriptionModelStore.add(any()) } just runs every { mockSubscriptionModelStore.list() } returns listOfSubscriptions - val subscriptionManager = SubscriptionManager(mockSubscriptionModelStore) + val subscriptionManager = SubscriptionManager(mockApplicationService, mockSessionService, mockSubscriptionModelStore) // When subscriptionManager.addOrUpdatePushSubscriptionToken("pushToken", SubscriptionStatus.SUBSCRIBED) @@ -152,6 +162,8 @@ class SubscriptionManagerTests : FunSpec({ test("update push subscription updates model store") { // Given val mockSubscriptionModelStore = mockk() + val mockApplicationService = mockk() + val mockSessionService = mockk(relaxed = true) val pushSubscription = SubscriptionModel() pushSubscription.id = "subscription1" @@ -167,7 +179,7 @@ class SubscriptionManagerTests : FunSpec({ every { mockSubscriptionModelStore.list() } returns listOfSubscriptions every { mockSubscriptionModelStore.get("subscription1") } returns pushSubscription - val subscriptionManager = SubscriptionManager(mockSubscriptionModelStore) + val subscriptionManager = SubscriptionManager(mockApplicationService, mockSessionService, mockSubscriptionModelStore) // When subscriptionManager.addOrUpdatePushSubscriptionToken("pushToken2", SubscriptionStatus.FIREBASE_FCM_ERROR_IOEXCEPTION_OTHER) @@ -180,6 +192,8 @@ class SubscriptionManagerTests : FunSpec({ test("remove email subscription removes from model store") { // Given val mockSubscriptionModelStore = mockk() + val mockApplicationService = mockk() + val mockSessionService = mockk(relaxed = true) val emailSubscription = SubscriptionModel() emailSubscription.id = "subscription1" @@ -195,7 +209,7 @@ class SubscriptionManagerTests : FunSpec({ every { mockSubscriptionModelStore.list() } returns listOfSubscriptions every { mockSubscriptionModelStore.remove("subscription1") } just runs - val subscriptionManager = SubscriptionManager(mockSubscriptionModelStore) + val subscriptionManager = SubscriptionManager(mockApplicationService, mockSessionService, mockSubscriptionModelStore) // When subscriptionManager.removeEmailSubscription("name@company.com") @@ -207,6 +221,8 @@ class SubscriptionManagerTests : FunSpec({ test("remove sms subscription removes from model store") { // Given val mockSubscriptionModelStore = mockk() + val mockApplicationService = mockk() + val mockSessionService = mockk(relaxed = true) val emailSubscription = SubscriptionModel() emailSubscription.id = "subscription1" @@ -222,7 +238,7 @@ class SubscriptionManagerTests : FunSpec({ every { mockSubscriptionModelStore.list() } returns listOfSubscriptions every { mockSubscriptionModelStore.remove("subscription1") } just runs - val subscriptionManager = SubscriptionManager(mockSubscriptionModelStore) + val subscriptionManager = SubscriptionManager(mockApplicationService, mockSessionService, mockSubscriptionModelStore) // When subscriptionManager.removeSmsSubscription("+18458675309") @@ -241,6 +257,8 @@ class SubscriptionManagerTests : FunSpec({ smsSubscription.address = "+18458675309" val mockSubscriptionModelStore = mockk() + val mockApplicationService = mockk() + val mockSessionService = mockk(relaxed = true) val listOfSubscriptions = listOf() every { mockSubscriptionModelStore.subscribe(any()) } just runs @@ -248,7 +266,7 @@ class SubscriptionManagerTests : FunSpec({ val spySubscriptionChangedHandler = spyk() - val subscriptionManager = SubscriptionManager(mockSubscriptionModelStore) + val subscriptionManager = SubscriptionManager(mockApplicationService, mockSessionService, mockSubscriptionModelStore) subscriptionManager.subscribe(spySubscriptionChangedHandler) // When @@ -280,6 +298,8 @@ class SubscriptionManagerTests : FunSpec({ emailSubscription.address = "+18458675309" val mockSubscriptionModelStore = mockk() + val mockApplicationService = mockk() + val mockSessionService = mockk(relaxed = true) val listOfSubscriptions = listOf(emailSubscription) every { mockSubscriptionModelStore.subscribe(any()) } just runs @@ -287,7 +307,7 @@ class SubscriptionManagerTests : FunSpec({ val spySubscriptionChangedHandler = spyk() - val subscriptionManager = SubscriptionManager(mockSubscriptionModelStore) + val subscriptionManager = SubscriptionManager(mockApplicationService, mockSessionService, mockSubscriptionModelStore) subscriptionManager.subscribe(spySubscriptionChangedHandler) // When @@ -321,6 +341,8 @@ class SubscriptionManagerTests : FunSpec({ smsSubscription.address = "+18458675309" val mockSubscriptionModelStore = mockk() + val mockApplicationService = mockk() + val mockSessionService = mockk(relaxed = true) val listOfSubscriptions = listOf(smsSubscription) every { mockSubscriptionModelStore.subscribe(any()) } just runs @@ -328,7 +350,7 @@ class SubscriptionManagerTests : FunSpec({ val spySubscriptionChangedHandler = spyk() - val subscriptionManager = SubscriptionManager(mockSubscriptionModelStore) + val subscriptionManager = SubscriptionManager(mockApplicationService, mockSessionService, mockSubscriptionModelStore) subscriptionManager.subscribe(spySubscriptionChangedHandler) // When