From cf24f9c0e3df55daaec2ef872a359ad3348ee9b3 Mon Sep 17 00:00:00 2001 From: Rene Luria Date: Thu, 6 Aug 2026 17:03:24 +0200 Subject: [PATCH] feat: add groupEventsByDate helper for schedule date headers --- .../ch/parano/myicek/filter/EventFilter.kt | 6 +++ .../parano/myicek/filter/EventFilterTest.kt | 47 ++++++++++++++++++- 2 files changed, 52 insertions(+), 1 deletion(-) diff --git a/composeApp/src/commonMain/kotlin/ch/parano/myicek/filter/EventFilter.kt b/composeApp/src/commonMain/kotlin/ch/parano/myicek/filter/EventFilter.kt index 29fee2c..c3a0258 100644 --- a/composeApp/src/commonMain/kotlin/ch/parano/myicek/filter/EventFilter.kt +++ b/composeApp/src/commonMain/kotlin/ch/parano/myicek/filter/EventFilter.kt @@ -52,3 +52,9 @@ fun List.distinctAgegroups(): List = fun List.distinctSubgroups(): List = map { extractSubgroup(it.name) }.toSet().sorted() + +fun groupEventsByDate(events: List): List>> = + events + .sortedBy { it.start } + .groupBy { it.start.take(10) } + .toList() diff --git a/composeApp/src/commonTest/kotlin/ch/parano/myicek/filter/EventFilterTest.kt b/composeApp/src/commonTest/kotlin/ch/parano/myicek/filter/EventFilterTest.kt index 847522b..e2f0fba 100644 --- a/composeApp/src/commonTest/kotlin/ch/parano/myicek/filter/EventFilterTest.kt +++ b/composeApp/src/commonTest/kotlin/ch/parano/myicek/filter/EventFilterTest.kt @@ -20,6 +20,7 @@ package ch.parano.myicek.filter import ch.parano.myicek.models.Event import kotlin.test.Test import kotlin.test.assertEquals +import kotlin.test.assertTrue class EventFilterTest { @@ -28,6 +29,7 @@ class EventFilterTest { agegroup: String = "U13 (Elite)", name: String = "U13 Elite - HC Ajoie", eventType: String = "Jeu", + start: String = "2024-11-10T14:00:00", ) = Event( idEvent = id, agegroup = agegroup, @@ -35,7 +37,7 @@ class EventFilterTest { title = "Title", opponent = "Opp", place = "Place", - start = "2024-11-10T14:00:00", + start = start, end = "2024-11-10T16:15:00", color = "#e4222e", eventType = eventType, @@ -171,4 +173,47 @@ class EventFilterTest { assertEquals("U13 Elite", result[0]) assertEquals("U13 Top", result[1]) } + + @Test + fun testGroupEventsByDateSingleDay() { + val events = listOf( + event(id = "1", start = "2024-11-10T14:00:00"), + event(id = "2", start = "2024-11-10T16:00:00"), + ) + val grouped = groupEventsByDate(events) + assertEquals(1, grouped.size) + assertEquals("2024-11-10", grouped[0].first) + assertEquals(2, grouped[0].second.size) + } + + @Test + fun testGroupEventsByDateMultipleDays() { + val events = listOf( + event(id = "1", start = "2024-11-11T10:00:00"), + event(id = "2", start = "2024-11-10T14:00:00"), + event(id = "3", start = "2024-11-10T16:00:00"), + ) + val grouped = groupEventsByDate(events) + assertEquals(2, grouped.size) + assertEquals("2024-11-10", grouped[0].first) + assertEquals(2, grouped[0].second.size) + assertEquals("2024-11-11", grouped[1].first) + assertEquals(1, grouped[1].second.size) + } + + @Test + fun testGroupEventsByDateWithSpaceSeparator() { + val events = listOf( + event(id = "1", start = "2024-11-10 14:00:00"), + ) + val grouped = groupEventsByDate(events) + assertEquals(1, grouped.size) + assertEquals("2024-11-10", grouped[0].first) + } + + @Test + fun testGroupEventsByDateEmpty() { + val grouped = groupEventsByDate(emptyList()) + assertTrue(grouped.isEmpty()) + } }