Skip to content
Open
Show file tree
Hide file tree
Changes from all 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
Expand Up @@ -149,8 +149,8 @@ internal class DynamicTriggerController(
companion object {
private const val REQUIRED_ACCURACY = 0.3

// Assume last time an In-App Message was displayed a very very long time ago.
private const val DEFAULT_LAST_IN_APP_TIME_AGO: Long = 999999
// If no In-App Message has been dismissed yet, treat the last one as infinitely long ago.
private const val DEFAULT_LAST_IN_APP_TIME_AGO: Long = Long.MAX_VALUE
}

override fun subscribe(handler: ITriggerHandler) = events.subscribe(handler)
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
package com.onesignal.inAppMessages.internal.triggers.impl

import com.onesignal.inAppMessages.internal.Trigger
import com.onesignal.inAppMessages.internal.state.InAppStateService
import com.onesignal.mocks.MockHelper
import com.onesignal.session.internal.session.ISessionService
import io.kotest.core.spec.style.FunSpec
import io.kotest.matchers.shouldBe
import io.mockk.mockk
import org.json.JSONObject

private fun timeSinceLastInAppTrigger(seconds: Int): Trigger {
val json = JSONObject()
json.put("id", "trigger-id")
json.put("kind", Trigger.OSTriggerKind.TIME_SINCE_LAST_IN_APP.toString())
json.put("operator", Trigger.OSTriggerOperator.GREATER_THAN.toString())
json.put("value", seconds)
return Trigger(json)
}

class DynamicTriggerControllerTests : FunSpec({
val oneHourInSeconds = 3600

test("time since last in-app trigger fires when no in-app message was dismissed yet") {
// Given
val state = InAppStateService()
val controller = DynamicTriggerController(state, mockk<ISessionService>(relaxed = true), MockHelper.time(1_000_000))

// When
val result = controller.dynamicTriggerShouldFire(timeSinceLastInAppTrigger(oneHourInSeconds))

// Then
result shouldBe true
}

test("time since last in-app trigger does not fire before the interval has elapsed") {
// Given
val now = 10_000_000L
val state = InAppStateService()
state.lastTimeInAppDismissed = now - 60_000L
val controller = DynamicTriggerController(state, mockk<ISessionService>(relaxed = true), MockHelper.time(now))

// When
val result = controller.dynamicTriggerShouldFire(timeSinceLastInAppTrigger(oneHourInSeconds))

// Then
result shouldBe false
}
})