test(designsystem): Roborazzi-эталон F7NotificationRow (Fd, w360dp) — состояния с действиями/без; PNG-эталон нативной строки уведомления

This commit is contained in:
b-mob-notify
2026-07-13 10:28:02 +00:00
parent eed7723230
commit 2854f5d5a4
2 changed files with 77 additions and 0 deletions
@@ -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")
}
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 126 KiB