From f0cc35f2ce794c62a1ed9201c4fea82ea313a2c0 Mon Sep 17 00:00:00 2001 From: Jean-Luc Makiola Date: Mon, 6 Jul 2026 20:34:35 +0200 Subject: [PATCH] test: cover the export calendar-id plumbing The fake now records the calendarIds it receives; two repository tests assert exportEvents forwards a chosen subset and defaults to null (all eligible calendars), closing the coverage gap for the per-calendar export selector. Co-Authored-By: Claude Opus 4.8 (1M context) --- .../calendar/CalendarRepositoryImplTest.kt | 24 +++++++++++++++++++ .../data/calendar/FakeCalendarDataSource.kt | 7 +++++- 2 files changed, 30 insertions(+), 1 deletion(-) diff --git a/app/src/test/java/de/jeanlucmakiola/calendula/data/calendar/CalendarRepositoryImplTest.kt b/app/src/test/java/de/jeanlucmakiola/calendula/data/calendar/CalendarRepositoryImplTest.kt index 1fb9abd..ed8e728 100644 --- a/app/src/test/java/de/jeanlucmakiola/calendula/data/calendar/CalendarRepositoryImplTest.kt +++ b/app/src/test/java/de/jeanlucmakiola/calendula/data/calendar/CalendarRepositoryImplTest.kt @@ -536,6 +536,30 @@ class CalendarRepositoryImplTest { assertThat(fake.importedEvents.map { it.second }).containsExactly(3L, 3L) } + @Test + fun `exportEvents forwards the chosen calendar-id subset to the data source`( + @TempDir tempDir: Path, + ) = runTest { + val fake = FakeCalendarDataSource() + val repo = CalendarRepositoryImpl(fake, newPrefs(tempDir), newSettings(tempDir), Dispatchers.Unconfined) + + repo.exportEvents(calendarIds = setOf(1L, 4L)) + + assertThat(fake.lastExportableEventsCalendarIds).containsExactly(1L, 4L) + } + + @Test + fun `exportEvents defaults to null so every eligible calendar is exported`( + @TempDir tempDir: Path, + ) = runTest { + val fake = FakeCalendarDataSource() + val repo = CalendarRepositoryImpl(fake, newPrefs(tempDir), newSettings(tempDir), Dispatchers.Unconfined) + + repo.exportEvents() + + assertThat(fake.lastExportableEventsCalendarIds).isNull() + } + private fun parsedEvent(uid: String?) = de.jeanlucmakiola.calendula.domain.ics.ParsedIcsEvent( uid = uid, summary = "E", diff --git a/app/src/test/java/de/jeanlucmakiola/calendula/data/calendar/FakeCalendarDataSource.kt b/app/src/test/java/de/jeanlucmakiola/calendula/data/calendar/FakeCalendarDataSource.kt index 7cd933e..d62ddae 100644 --- a/app/src/test/java/de/jeanlucmakiola/calendula/data/calendar/FakeCalendarDataSource.kt +++ b/app/src/test/java/de/jeanlucmakiola/calendula/data/calendar/FakeCalendarDataSource.kt @@ -23,6 +23,8 @@ internal class FakeCalendarDataSource : CalendarDataSource { var eventDetailResult: (Long) -> EventDetail? = { null } var eventColorPaletteResult: (Long) -> List = { emptyList() } var exportableEventsResult: List = emptyList() + /** The [calendarIds] the last [exportableEvents] call received (null = all). */ + var lastExportableEventsCalendarIds: Set? = null /** UIDs the target calendar already holds, for import dedup. */ var existingUidsResult: Set = emptySet() /** Set to make the next write call throw. */ @@ -59,7 +61,10 @@ internal class FakeCalendarDataSource : CalendarDataSource { override fun eventDetail(eventId: Long): EventDetail? = eventDetailResult(eventId) override fun eventColorPalette(calendarId: Long): List = eventColorPaletteResult(calendarId) - override fun exportableEvents(calendarIds: Set?): List = exportableEventsResult + override fun exportableEvents(calendarIds: Set?): List { + lastExportableEventsCalendarIds = calendarIds + return exportableEventsResult + } override fun existingUids(calendarId: Long): Set = existingUidsResult