Skip to content
Merged
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
2 changes: 1 addition & 1 deletion android/src/androidTest/assets/Environment.json
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
],
"project": {
"clickOutsideClose": true,
"darkOverlay": false,
"overlay": "none",
"id": "cm6ovvfnv0003sf0k7zi8r3ac",
"inAppSurveyBranding": true,
"placement": "bottomRight",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,8 @@ class SurveyManagerInstrumentedTest {
fun setup() {
// Reset UserManager state before each test
UserManager.lastDisplayedAt = null
// Reset SurveyManager environment state
setBackingEnvironmentDataHolder(null)
}

@Test
Expand Down Expand Up @@ -430,6 +432,155 @@ class SurveyManagerInstrumentedTest {
assertEquals(survey6.id, result5[0].id)
}

// region resolveOverlay tests

@Test
fun testResolveOverlay_nullSurvey_nullEnvironment_returnsNone() {
setBackingEnvironmentDataHolder(null)
val result = SurveyManager.resolveOverlay(null)
assertEquals(SurveyOverlay.NONE, result)
}

@Test
fun testResolveOverlay_nullSurvey_projectOverlayDark_returnsDark() {
setBackingEnvironmentDataHolder(createEnvHolder(projectOverlay = SurveyOverlay.DARK))
val result = SurveyManager.resolveOverlay(null)
assertEquals(SurveyOverlay.DARK, result)
}

@Test
fun testResolveOverlay_nullSurvey_projectOverlayLight_returnsLight() {
setBackingEnvironmentDataHolder(createEnvHolder(projectOverlay = SurveyOverlay.LIGHT))
val result = SurveyManager.resolveOverlay(null)
assertEquals(SurveyOverlay.LIGHT, result)
}

@Test
fun testResolveOverlay_nullSurvey_projectOverlayNone_returnsNone() {
setBackingEnvironmentDataHolder(createEnvHolder(projectOverlay = SurveyOverlay.NONE))
val result = SurveyManager.resolveOverlay(null)
assertEquals(SurveyOverlay.NONE, result)
}

@Test
fun testResolveOverlay_nullSurvey_projectOverlayNull_returnsNone() {
setBackingEnvironmentDataHolder(createEnvHolder(projectOverlay = null))
val result = SurveyManager.resolveOverlay(null)
assertEquals(SurveyOverlay.NONE, result)
}

@Test
fun testResolveOverlay_surveyWithoutProjectOverwrites_fallsBackToProject() {
setBackingEnvironmentDataHolder(createEnvHolder(projectOverlay = SurveyOverlay.DARK))
val survey = createTestSurvey() // projectOverwrites defaults to null
val result = SurveyManager.resolveOverlay(survey)
assertEquals(SurveyOverlay.DARK, result)
}

@Test
fun testResolveOverlay_surveyOverwritesOverlayNull_fallsBackToProject() {
setBackingEnvironmentDataHolder(createEnvHolder(projectOverlay = SurveyOverlay.DARK))
val survey = createSurveyWithOverwrites(overlay = null)
val result = SurveyManager.resolveOverlay(survey)
assertEquals(SurveyOverlay.DARK, result)
}

@Test
fun testResolveOverlay_surveyOverwritesOverlayLight_overridesProjectDark() {
setBackingEnvironmentDataHolder(createEnvHolder(projectOverlay = SurveyOverlay.DARK))
val survey = createSurveyWithOverwrites(overlay = SurveyOverlay.LIGHT)
val result = SurveyManager.resolveOverlay(survey)
assertEquals(SurveyOverlay.LIGHT, result)
}

@Test
fun testResolveOverlay_surveyOverwritesOverlayDark_overridesProjectNone() {
setBackingEnvironmentDataHolder(createEnvHolder(projectOverlay = SurveyOverlay.NONE))
val survey = createSurveyWithOverwrites(overlay = SurveyOverlay.DARK)
val result = SurveyManager.resolveOverlay(survey)
assertEquals(SurveyOverlay.DARK, result)
}

@Test
fun testResolveOverlay_surveyOverwritesOverlayNone_overridesProjectDark() {
setBackingEnvironmentDataHolder(createEnvHolder(projectOverlay = SurveyOverlay.DARK))
val survey = createSurveyWithOverwrites(overlay = SurveyOverlay.NONE)
val result = SurveyManager.resolveOverlay(survey)
assertEquals(SurveyOverlay.NONE, result)
}

@Test
fun testResolveOverlay_environmentDataHolderDataNull_returnsNone() {
// data=null forces the ?.data?.project?.overlay chain to short-circuit at each null check
val envHolder = EnvironmentDataHolder(data = null, originalResponseMap = mapOf())
setBackingEnvironmentDataHolder(envHolder)
val result = SurveyManager.resolveOverlay(null)
assertEquals(SurveyOverlay.NONE, result)
}

@Test
fun testResolveOverlay_surveyWithOverwritesNoOverlay_environmentDataNull_returnsNone() {
val envHolder = EnvironmentDataHolder(data = null, originalResponseMap = mapOf())
setBackingEnvironmentDataHolder(envHolder)
val survey = createSurveyWithOverwrites(overlay = null)
val result = SurveyManager.resolveOverlay(survey)
assertEquals(SurveyOverlay.NONE, result)
}

// endregion

// region helper methods

private fun setBackingEnvironmentDataHolder(value: EnvironmentDataHolder?) {
val field = SurveyManager::class.java.getDeclaredField("backingEnvironmentDataHolder")
field.isAccessible = true
field.set(SurveyManager, value)
}

private fun createEnvHolder(projectOverlay: SurveyOverlay?): EnvironmentDataHolder {
val project = Project(
id = "proj1",
recontactDays = null,
clickOutsideClose = null,
overlay = projectOverlay,
placement = null,
inAppSurveyBranding = null,
styling = null
)
val envData = EnvironmentData(
surveys = emptyList(),
actionClasses = null,
project = project
)
val envResponseData = EnvironmentResponseData(
data = envData,
expiresAt = null
)
return EnvironmentDataHolder(
data = envResponseData,
originalResponseMap = mapOf()
)
}

private fun createSurveyWithOverwrites(overlay: SurveyOverlay?): Survey {
return Survey(
id = "test",
name = "Test Survey",
triggers = null,
recontactDays = null,
displayLimit = null,
delay = null,
displayPercentage = null,
displayOption = null,
segment = null,
styling = null,
languages = null,
projectOverwrites = SurveyProjectOverwrites(overlay = overlay)
)
}

// endregion

private fun createTestSurvey(
id: String = "test",
displayOption: String? = null,
Expand Down Expand Up @@ -466,4 +617,4 @@ class SurveyManagerInstrumentedTest {
languages = null
)
}
}
}
Loading
Loading