Skip to content
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.onesignal.session.internal.session.impl

import com.onesignal.common.TimeUtils
import com.onesignal.common.threading.suspendifyOnIO
import com.onesignal.core.internal.config.ConfigModelStore
import com.onesignal.core.internal.operations.IOperationRepo
Expand All @@ -11,6 +12,7 @@ import com.onesignal.session.internal.session.ISessionService
import com.onesignal.user.internal.identity.IdentityModelStore
import com.onesignal.user.internal.operations.TrackSessionEndOperation
import com.onesignal.user.internal.operations.TrackSessionStartOperation
import com.onesignal.user.internal.properties.PropertiesModelStore

/**
* The [SessionListener] is responsible for subscribing itself as an [ISessionLifecycleHandler]
Expand All @@ -33,17 +35,20 @@ internal class SessionListener(
private val _sessionService: ISessionService,
private val _configModelStore: ConfigModelStore,
private val _identityModelStore: IdentityModelStore,
private val _propertiesModelStore: PropertiesModelStore,
private val _outcomeEventsController: IOutcomeEventsController,
) : IStartableService, ISessionLifecycleHandler {
override fun start() {
_sessionService.subscribe(this)
}

override fun onSessionStarted() {
_propertiesModelStore.model.timezone = TimeUtils.getTimeZoneId()
_operationRepo.enqueue(TrackSessionStartOperation(_configModelStore.model.appId, _identityModelStore.model.onesignalId), true)
}

override fun onSessionActive() {
_propertiesModelStore.model.timezone = TimeUtils.getTimeZoneId()
}

override fun onSessionEnded(duration: Long) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@ package com.onesignal.user.internal

import com.onesignal.common.IDManager
import com.onesignal.common.OneSignalUtils
import com.onesignal.common.TimeUtils
import com.onesignal.common.events.EventProducer
import com.onesignal.common.modeling.ISingletonModelStoreChangeHandler
import com.onesignal.common.modeling.ModelChangedArgs
Expand Down Expand Up @@ -266,10 +265,7 @@ internal open class UserManager(
}
}

override fun onFocus(firedOnSubscribe: Boolean) {
// Detect any user properties updates that changed
_propertiesModel.timezone = TimeUtils.getTimeZoneId()
}
override fun onFocus(firedOnSubscribe: Boolean) { }
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

See https://github.com/OneSignal/OneSignal-Android-SDK/pull/2378/changes, we can get rid of the ApplicationService stuff

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@nan-li please check, i removed the references.


override fun onUnfocused() { }
}
Original file line number Diff line number Diff line change
@@ -1,25 +1,38 @@
package com.onesignal.session.internal.session.impl

import com.onesignal.common.TimeUtils
import com.onesignal.mocks.MockHelper
import com.onesignal.user.internal.operations.TrackSessionStartOperation
import io.kotest.core.spec.style.FunSpec
import io.mockk.every
import io.mockk.mockk
import io.mockk.mockkObject
import io.mockk.unmockkAll
import io.mockk.verify

private class Mocks {
val mockOperationRepo = mockk<com.onesignal.core.internal.operations.IOperationRepo>(relaxed = true)

val propertiesModelStore = MockHelper.propertiesModelStore()

val sessionListener =
SessionListener(
mockOperationRepo,
mockk<com.onesignal.session.internal.session.ISessionService>(relaxed = true),
MockHelper.configModelStore(),
MockHelper.identityModelStore(),
propertiesModelStore,
mockk<com.onesignal.session.internal.outcomes.IOutcomeEventsController>(relaxed = true),
)
}

class SessionListenerTests : FunSpec({

test("onSessionStarted enqueues TrackSessionStartOperation") {
// Given
val mockOperationRepo = mockk<com.onesignal.core.internal.operations.IOperationRepo>(relaxed = true)

val sessionListener =
SessionListener(
mockOperationRepo,
mockk<com.onesignal.session.internal.session.ISessionService>(relaxed = true),
MockHelper.configModelStore(),
MockHelper.identityModelStore(),
mockk<com.onesignal.session.internal.outcomes.IOutcomeEventsController>(relaxed = true),
)
val mocks = Mocks()
val mockOperationRepo = mocks.mockOperationRepo
val sessionListener = mocks.sessionListener

// When
sessionListener.onSessionStarted()
Expand All @@ -29,4 +42,47 @@ class SessionListenerTests : FunSpec({
mockOperationRepo.enqueue(any<TrackSessionStartOperation>(), true)
}
}

test("onSessionStarted updates timezone") {
// Given
val mocks = Mocks()
val sessionListener = mocks.sessionListener
val propertiesModel = mocks.propertiesModelStore.model
var timezoneId = "1"
mockkObject(TimeUtils)
every { TimeUtils.getTimeZoneId() } returns timezoneId

// When
sessionListener.onSessionStarted()

// Then
propertiesModel.timezone = timezoneId

// Once timezone is changed, repetitive onSessionStarted call will update timezone
timezoneId = "2"
sessionListener.onSessionStarted()
propertiesModel.timezone = timezoneId

unmockkAll()
}

test("onSessionActive updates timezone") {
// Given
val mocks = Mocks()
val sessionListener = mocks.sessionListener
val propertiesModel = mocks.propertiesModelStore.model
var timezoneId = "1"
mockkObject(TimeUtils)
every { TimeUtils.getTimeZoneId() } returns timezoneId

// When
sessionListener.onSessionStarted()

// Once timezone is changed, onSessionActive will update timezone
timezoneId = "2"
sessionListener.onSessionActive()
propertiesModel.timezone = timezoneId

unmockkAll()
}
})
Loading