diff --git a/core/designsystem/src/test/java/ru/forbion/f7cloud/core/designsystem/NotificationRowScreenshotTest.kt b/core/designsystem/src/test/java/ru/forbion/f7cloud/core/designsystem/NotificationRowScreenshotTest.kt new file mode 100644 index 0000000..3e68762 --- /dev/null +++ b/core/designsystem/src/test/java/ru/forbion/f7cloud/core/designsystem/NotificationRowScreenshotTest.kt @@ -0,0 +1,77 @@ +package ru.forbion.f7cloud.core.designsystem + +import androidx.compose.foundation.background +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.test.junit4.ComposeContentTestRule +import androidx.compose.ui.test.junit4.createComposeRule +import androidx.compose.ui.test.onRoot +import com.github.takahirom.roborazzi.captureRoboImage +import org.junit.Rule +import org.junit.Test +import org.junit.runner.RunWith +import org.robolectric.RobolectricTestRunner +import org.robolectric.annotation.Config +import org.robolectric.annotation.GraphicsMode + +/** + * Roborazzi-эталон строки уведомления (`F7NotificationRow`) для Fd-сверки 1:1 с мобильной + * лентой forbion (mail/111, ширина Figma-фрейма w360dp). Рендерит ключевые состояния строки, + * которые сверяются с веб-эталоном `docs/app-map/reference/notifications/`: + * - с действиями (primary=заливка + контур), длинный сабж, с message; + * - без действий, короткий сабж, без message. + * Иконки (`iconUrl`/`closeIconUrl`) грузятся через Coil/сеть — в Robolectric не отрисуются, + * это влияет только на растр иконки, не на компоновку/типографику (их и сверяем). + */ +@RunWith(RobolectricTestRunner::class) +@GraphicsMode(GraphicsMode.Mode.NATIVE) +@Config(sdk = [34], qualifiers = "w360dp-h800dp-xxhdpi") +class NotificationRowScreenshotTest { + + @get:Rule + val composeRule: ComposeContentTestRule = createComposeRule() + + @Test + fun notification_row_states() { + composeRule.setContent { + F7Theme { + Column(modifier = Modifier.fillMaxSize().background(Color.White)) { + // Строка с действиями + длинный сабж + message + F7NotificationRow( + subject = "Приглашение в беседу «Планёрка команды разработки F7»", + message = "Константин Девальд приглашает вас присоединиться к звонку.", + relativeTime = "5 минут назад", + iconUrl = null, + closeIconUrl = "", + authHeader = null, + onClick = {}, + onDismiss = {}, + showDivider = true, + actions = listOf( + F7NotificationActionUi(label = "Присоединиться", primary = true), + F7NotificationActionUi(label = "Отклонить", primary = false), + ), + onActionClick = {}, + ) + // Строка без действий, короткий сабж, без message + F7NotificationRow( + subject = "Рекомендованное приложение: Формы", + message = "", + relativeTime = "49 минут назад", + iconUrl = null, + closeIconUrl = "", + authHeader = null, + onClick = {}, + onDismiss = {}, + showDivider = false, + actions = emptyList(), + onActionClick = {}, + ) + } + } + } + composeRule.onRoot().captureRoboImage("src/test/screenshots/notification-row-states.png") + } +} diff --git a/core/designsystem/src/test/screenshots/notification-row-states.png b/core/designsystem/src/test/screenshots/notification-row-states.png new file mode 100644 index 0000000..e95bb55 Binary files /dev/null and b/core/designsystem/src/test/screenshots/notification-row-states.png differ