diff --git a/.kotlin/sessions/kotlin-compiler-14341001045275348642.salive b/.kotlin/sessions/kotlin-compiler-14341001045275348642.salive new file mode 100644 index 00000000..e69de29b diff --git a/app/src/test/java/app/closer/notifications/PartnerNotificationManagerTest.kt b/app/src/test/java/app/closer/notifications/PartnerNotificationManagerTest.kt index 57ff2e64..be308c76 100644 --- a/app/src/test/java/app/closer/notifications/PartnerNotificationManagerTest.kt +++ b/app/src/test/java/app/closer/notifications/PartnerNotificationManagerTest.kt @@ -1,6 +1,7 @@ package app.closer.notifications import android.content.Context +import androidx.core.app.NotificationCompat import androidx.core.app.NotificationManagerCompat import app.closer.core.navigation.AppRoute import app.closer.domain.repository.AppSettings @@ -8,8 +9,9 @@ import app.closer.domain.repository.SettingsRepository import io.mockk.coEvery import io.mockk.every import io.mockk.mockk +import io.mockk.mockkConstructor import io.mockk.mockkStatic -import io.mockk.unmockkStatic +import io.mockk.unmockkAll import io.mockk.verify import kotlinx.coroutines.flow.flowOf import kotlinx.coroutines.test.runTest @@ -25,6 +27,7 @@ class PartnerNotificationManagerTest { private val settingsRepository = mockk() private val quietHoursManager = mockk() private val rateLimiter = mockk(relaxed = true) + private val notificationManagerCompat = mockk(relaxed = true) private lateinit var manager: PartnerNotificationManager @@ -39,18 +42,29 @@ class PartnerNotificationManagerTest { every { quietHoursManager.isInQuietHours(any(), any()) } returns false every { rateLimiter.canSend(any()) } returns true + mockkStatic(NotificationManagerCompat::from) + every { NotificationManagerCompat.from(context) } returns notificationManagerCompat + every { notificationManagerCompat.areNotificationsEnabled() } returns true + + mockkConstructor(NotificationCompat.Builder::class) + every { anyConstructed().setSmallIcon(any()) } returns mockk(relaxed = true) + every { anyConstructed().setContentTitle(any()) } returns mockk(relaxed = true) + every { anyConstructed().setContentText(any()) } returns mockk(relaxed = true) + every { anyConstructed().setAutoCancel(any()) } returns mockk(relaxed = true) + every { anyConstructed().setContentIntent(any()) } returns mockk(relaxed = true) + every { anyConstructed().setCategory(any()) } returns mockk(relaxed = true) + every { anyConstructed().build() } returns mockk(relaxed = true) + manager = PartnerNotificationManager(context, settingsRepository, quietHoursManager, rateLimiter) } @After fun tearDown() { - unmockkStatic(NotificationManagerCompat::from) + unmockkAll() } @Test fun `show records rate limit when enabled`() = runTest { - enableNotificationManager() - manager.show(PartnerNotificationType.PARTNER_ANSWERED, "couple_1") verify { rateLimiter.record(NotificationRateLimiter.Type.PARTNER_TRIGGER) } @@ -90,8 +104,6 @@ class PartnerNotificationManagerTest { @Test fun `handleRemote maps known FCM types to local types`() = runTest { - enableNotificationManager() - manager.handleRemote("reveal_ready", "couple_1", PartnerNotificationPayload(questionId = "q1")) verify { rateLimiter.record(NotificationRateLimiter.Type.PARTNER_TRIGGER) } @@ -155,8 +167,6 @@ class PartnerNotificationManagerTest { ) ) - enableNotificationManager() - manager.show(PartnerNotificationType.PARTNER_ANSWERED, "couple_1") verify { rateLimiter.record(NotificationRateLimiter.Type.PARTNER_TRIGGER) } @@ -175,10 +185,4 @@ class PartnerNotificationManagerTest { verify(exactly = 0) { rateLimiter.record(any()) } } - - private fun enableNotificationManager() { - mockkStatic(NotificationManagerCompat::from) - every { NotificationManagerCompat.from(context).areNotificationsEnabled() } returns true - every { NotificationManagerCompat.from(context).notify(any(), any()) } returns Unit - } }