Clarify seen and checked app filtering

This commit is contained in:
ajp_anton
2026-07-27 13:27:08 +00:00
parent cad73e33a0
commit 55057767c1
3 changed files with 87 additions and 11 deletions
@@ -6,13 +6,61 @@ import org.junit.Test
class AppListOrderingTest {
private fun app(label: String, seen: Boolean = false, selected: Boolean = false) = ListedApp(label, "pkg.$label", seen, selected)
@Test fun `seen apps are repeated before the full list when requested`() {
val items = AppListOrdering.items(listOf(app("Zulu"), app("Beta", seen = true), app("Alpha", seen = true)), false, true)
assertEquals(listOf("Alpha", "Beta", "|", "Alpha", "Beta", "Zulu"), items.map { if (it is AppListItem.App) it.value.label else "|" })
@Test fun `seen apps are titled and repeated before the full list when requested`() {
val items = AppListOrdering.items(
listOf(app("Zulu"), app("Beta", seen = true), app("Alpha", seen = true)),
onlySeen = false,
seenAppsFirst = true,
mode = AppRuleMode.BLACKLIST,
)
assertEquals(listOf("[Seen apps]", "Alpha", "Beta", "|", "[All apps]", "Alpha", "Beta", "Zulu"), items.labels())
}
@Test fun `selected unseen app remains after seen apps in only-seen mode`() {
val items = AppListOrdering.items(listOf(app("Seen", seen = true), app("Chosen", selected = true), app("Hidden")), true, true)
assertEquals(listOf("Seen", "|", "Chosen"), items.map { if (it is AppListItem.App) it.value.label else "|" })
@Test fun `selected unseen apps are titled after seen apps in only-seen mode`() {
val items = AppListOrdering.items(
listOf(app("Seen", seen = true), app("Chosen", selected = true), app("Hidden")),
onlySeen = true,
seenAppsFirst = true,
mode = AppRuleMode.WHITELIST,
)
assertEquals(listOf("[Seen apps]", "Seen", "|", "[Whitelisted apps]", "Chosen"), items.labels())
}
@Test fun `only seen and checked without grouping is one alphabetical list`() {
val items = AppListOrdering.items(
listOf(app("Zulu", seen = true), app("Beta", selected = true), app("Hidden")),
onlySeen = true,
seenAppsFirst = false,
mode = AppRuleMode.BLACKLIST,
)
assertEquals(listOf("Beta", "Zulu"), items.labels())
}
@Test fun `only seen apps omit section titles without unseen checked apps`() {
val items = AppListOrdering.items(
listOf(app("Zulu", seen = true), app("Alpha", seen = true), app("Hidden")),
onlySeen = true,
seenAppsFirst = true,
mode = AppRuleMode.BLACKLIST,
)
assertEquals(listOf("Alpha", "Zulu"), items.labels())
}
@Test fun `all apps without grouping is one alphabetical list`() {
val items = AppListOrdering.items(
listOf(app("Zulu", seen = true), app("Alpha"), app("Beta", selected = true)),
onlySeen = false,
seenAppsFirst = false,
mode = AppRuleMode.BLACKLIST,
)
assertEquals(listOf("Alpha", "Beta", "Zulu"), items.labels())
}
private fun List<AppListItem>.labels() = map {
when (it) {
is AppListItem.App -> it.value.label
is AppListItem.SectionTitle -> "[${it.value}]"
AppListItem.Separator -> "|"
}
}
}