From 3ced240e2363200c043329f3a528a97cd70434f4 Mon Sep 17 00:00:00 2001 From: Jean-Luc Makiola Date: Mon, 8 Jun 2026 17:57:12 +0200 Subject: [PATCH] test: instrumented repository smoke against real CalendarContract --- app/build.gradle.kts | 1 + .../calendar/CalendarRepositorySmokeTest.kt | 45 +++++++++++++++++++ 2 files changed, 46 insertions(+) create mode 100644 app/src/androidTest/java/de/jeanlucmakiola/calendula/data/calendar/CalendarRepositorySmokeTest.kt diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 8d4639f..20b43fe 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -121,6 +121,7 @@ dependencies { androidTestImplementation(libs.androidx.junit) androidTestImplementation(libs.androidx.espresso.core) androidTestImplementation(libs.androidx.test.rules) + androidTestImplementation(libs.truth) androidTestImplementation(platform(libs.androidx.compose.bom)) androidTestImplementation(libs.androidx.ui.test.junit4) } diff --git a/app/src/androidTest/java/de/jeanlucmakiola/calendula/data/calendar/CalendarRepositorySmokeTest.kt b/app/src/androidTest/java/de/jeanlucmakiola/calendula/data/calendar/CalendarRepositorySmokeTest.kt new file mode 100644 index 0000000..1fd3236 --- /dev/null +++ b/app/src/androidTest/java/de/jeanlucmakiola/calendula/data/calendar/CalendarRepositorySmokeTest.kt @@ -0,0 +1,45 @@ +package de.jeanlucmakiola.calendula.data.calendar + +import android.Manifest +import androidx.test.ext.junit.runners.AndroidJUnit4 +import androidx.test.platform.app.InstrumentationRegistry +import androidx.test.rule.GrantPermissionRule +import com.google.common.truth.Truth.assertThat +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.flow.first +import kotlinx.coroutines.runBlocking +import org.junit.Rule +import org.junit.Test +import org.junit.runner.RunWith +import kotlin.time.Instant + +@RunWith(AndroidJUnit4::class) +class CalendarRepositorySmokeTest { + + @get:Rule + val permissionRule: GrantPermissionRule = + GrantPermissionRule.grant(Manifest.permission.READ_CALENDAR) + + private val context = InstrumentationRegistry.getInstrumentation().targetContext + + private fun newRepo(): CalendarRepositoryImpl { + val dataSource = AndroidCalendarDataSource(context) + return CalendarRepositoryImpl(dataSource, Dispatchers.IO) + } + + @Test + fun calendars_returnsListWithoutCrashing() = runBlocking { + val repo = newRepo() + val first = repo.calendars().first() + assertThat(first).isNotNull() + } + + @Test + fun instances_returnsListWithoutCrashing() = runBlocking { + val repo = newRepo() + val now = Instant.fromEpochMilliseconds(System.currentTimeMillis()) + val oneDayLater = Instant.fromEpochMilliseconds(System.currentTimeMillis() + 86_400_000L) + val first = repo.instances(now..oneDayLater).first() + assertThat(first).isNotNull() + } +}