FakeCalendarBridge.kt 31 lignes · 1365 octets
package fr.ebii.card2vcf.sync

/** Fake [CalendarBridgeApi] en mémoire (sans `ContentResolver`) pour tester le pont Agenda↔Room. */
class FakeCalendarBridge : CalendarBridgeApi {
    private val calendars = mutableMapOf<String, Long>()
    private val events = mutableMapOf<Long, MutableMap<Long, CalendarEventSnapshot>>()
    private var nextCalendarId = 1L
    private var nextEventId = 1L
    val deletedEventIds = mutableListOf<Long>()

    override fun ensureLocalCalendar(displayName: String): Long =
        calendars.getOrPut(displayName) { nextCalendarId++ }

    override fun listEvents(calendarId: Long): List<CalendarEventSnapshot> =
        events[calendarId]?.values?.toList() ?: emptyList()

    override fun upsertEvent(calendarId: Long, snap: CalendarEventSnapshot): Long {
        val calendarEvents = events.getOrPut(calendarId) { mutableMapOf() }
        val eventId = snap.eventId ?: nextEventId++
        calendarEvents[eventId] = snap.copy(eventId = eventId)
        return eventId
    }

    override fun deleteEvent(eventId: Long) {
        deletedEventIds += eventId
        events.values.forEach { it.remove(eventId) }
    }

    /** Simule un événement déjà présent dans l'app Agenda système (ajout hors [upsertEvent]). */
    fun seedEvent(calendarId: Long, snap: CalendarEventSnapshot): Long = upsertEvent(calendarId, snap)
}