11package com.dayscounter.ui.screens.createedit
22
33import androidx.compose.foundation.layout.PaddingValues
4+ import androidx.compose.runtime.MutableState
45import androidx.compose.runtime.mutableStateOf
56import androidx.compose.runtime.remember
67import androidx.compose.runtime.saveable.rememberSaveable
@@ -21,8 +22,8 @@ import org.junit.runner.RunWith
2122/* *
2223 * UI тесты для кастомного цвета в CreateEditScreen.
2324 *
24- * Проверяет отображение кастомного цвета в форме редактирования
25- * и его поведение при выборе preset-цвета .
25+ * Проверяет поведение кастомного цвета при взаимодействии с формой.
26+ * Статические тесты (начальное состояние) находятся в ColorSelectorUiTest .
2627 */
2728@RunWith(AndroidJUnit4 ::class )
2829class CreateEditScreenCustomColorTest {
@@ -32,70 +33,23 @@ class CreateEditScreenCustomColorTest {
3233 private val context = InstrumentationRegistry .getInstrumentation().targetContext
3334
3435 /* *
35- * Проверяет, что при открытии формы с кастомным цветом
36- * отображается 7 чипов (6 preset + 1 custom).
36+ * Проверяет, что при выборе preset-цвета он становится выбранным.
3737 */
3838 @Test
39- fun createEditForm_whenCustomColorInitiallySet_thenShowsCustomColorChip () {
40- // Given - кастомный цвет (оранжевый, не в preset)
41- @Suppress(" MagicNumber" )
42- val customColor = Color (0xFFFF6600 )
43-
44- composeTestRule.setContent {
45- JetpackDaysTheme {
46- val title = rememberSaveable { mutableStateOf(" Test Title" ) }
47- val details = rememberSaveable { mutableStateOf(" " ) }
48- val selectedDate = rememberSaveable { mutableStateOf(java.time.LocalDate .now()) }
49- val selectedColor = remember { mutableStateOf<Color ?>(customColor) }
50- val selectedDisplayOption =
51- rememberSaveable { mutableStateOf(DisplayOption .DAY ) }
52- val showDatePicker = remember { mutableStateOf(false ) }
53-
54- val uiStates =
55- CreateEditUiState (
56- title = title,
57- details = details,
58- selectedDate = selectedDate,
59- selectedColor = selectedColor,
60- selectedDisplayOption = selectedDisplayOption,
61- )
62-
63- val params =
64- CreateEditFormParams (
65- itemId = 1L ,
66- paddingValues = PaddingValues (),
67- uiStates = uiStates,
68- showDatePicker = showDatePicker,
69- viewModel = createTestViewModel(),
70- onBackClick = {},
71- )
72-
73- CreateEditFormContent (params)
74- }
75- }
76-
77- // Then - должен быть 7 чипов (6 preset + 1 custom)
78- val colorDescription = context.getString(R .string.color)
79- composeTestRule
80- .onAllNodesWithContentDescription(colorDescription)
81- .assertCountEquals(7 )
82- }
83-
84- /* *
85- * Проверяет, что при выборе preset-цвета кастомный чип исчезает.
86- */
87- @Test
88- fun createEditForm_whenPresetColorSelected_thenHidesCustomColorChip () {
39+ fun createEditForm_whenPresetColorSelected_thenSelectsPresetColor () {
8940 // Given - сначала выбран кастомный цвет
9041 @Suppress(" MagicNumber" )
91- val customColor = Color (0xFFFF6600 )
42+ val customColor = Color (0xFF123456 )
43+
44+ var selectedColorStateHolder: MutableState <Color ?>? = null
9245
9346 composeTestRule.setContent {
9447 JetpackDaysTheme {
9548 val title = rememberSaveable { mutableStateOf(" Test Title" ) }
9649 val details = rememberSaveable { mutableStateOf(" " ) }
9750 val selectedDate = rememberSaveable { mutableStateOf(java.time.LocalDate .now()) }
9851 val selectedColorState = remember { mutableStateOf<Color ?>(customColor) }
52+ selectedColorStateHolder = selectedColorState
9953 val selectedDisplayOption =
10054 rememberSaveable { mutableStateOf(DisplayOption .DAY ) }
10155 val showDatePicker = remember { mutableStateOf(false ) }
@@ -123,33 +77,33 @@ class CreateEditScreenCustomColorTest {
12377 }
12478 }
12579
126- // When - кликаем на последний чип (preset цвет )
80+ // When - кликаем на Red (индекс 1 в списке: custom, Red, Teal, Blue, Green, Yellow, Purple )
12781 val colorDescription = context.getString(R .string.color)
12882 composeTestRule
129- .onAllNodesWithContentDescription(colorDescription)[6 ] // Последний preset
83+ .onAllNodesWithContentDescription(colorDescription)[1 ] // Red
13084 .performClick()
13185
132- // Then - должен быть только 6 preset чипов (кастомный исчез)
133- composeTestRule
134- .onAllNodesWithContentDescription(colorDescription)
135- .assertCountEquals( 6 )
86+ // Then - выбранный цвет должен быть Red
87+ assert (selectedColorStateHolder?.value == PresetColors . Red ) {
88+ " Expected Red but got ${selectedColorStateHolder?.value} "
89+ }
13690 }
13791
13892 /* *
139- * Проверяет, что при открытии формы с preset-цветом
140- * отображается только 6 чипов.
93+ * Проверяет, что при выборе preset-цвета кастомный чип исчезает.
14194 */
14295 @Test
143- fun createEditForm_whenPresetColorInitiallySet_thenShowsOnlyPresetChips () {
144- // Given - preset цвет (красный)
145- val presetColor = PresetColors .Red
96+ fun createEditForm_whenPresetColorSelected_thenHidesCustomColorChip () {
97+ // Given - сначала выбран кастомный цвет (7 чипов)
98+ @Suppress(" MagicNumber" )
99+ val customColor = Color (0xFF123456 )
146100
147101 composeTestRule.setContent {
148102 JetpackDaysTheme {
149103 val title = rememberSaveable { mutableStateOf(" Test Title" ) }
150104 val details = rememberSaveable { mutableStateOf(" " ) }
151105 val selectedDate = rememberSaveable { mutableStateOf(java.time.LocalDate .now()) }
152- val selectedColor = remember { mutableStateOf<Color ?>(presetColor ) }
106+ val selectedColor = remember { mutableStateOf<Color ?>(customColor ) }
153107 val selectedDisplayOption =
154108 rememberSaveable { mutableStateOf(DisplayOption .DAY ) }
155109 val showDatePicker = remember { mutableStateOf(false ) }
@@ -177,56 +131,18 @@ class CreateEditScreenCustomColorTest {
177131 }
178132 }
179133
180- // Then - должен быть только 6 preset чипов
134+ // Сначала проверяем, что есть 7 чипов ( 6 preset + 1 custom)
181135 val colorDescription = context.getString(R .string.color)
182136 composeTestRule
183137 .onAllNodesWithContentDescription(colorDescription)
184- .assertCountEquals(6 )
185- }
186-
187- /* *
188- * Проверяет, что при открытии формы без цвета
189- * отображается только 6 preset чипов.
190- */
191- @Test
192- fun createEditForm_whenNoColorInitiallySet_thenShowsOnlyPresetChips () {
193- // Given - цвет не выбран
194-
195- composeTestRule.setContent {
196- JetpackDaysTheme {
197- val title = rememberSaveable { mutableStateOf(" Test Title" ) }
198- val details = rememberSaveable { mutableStateOf(" " ) }
199- val selectedDate = rememberSaveable { mutableStateOf(java.time.LocalDate .now()) }
200- val selectedColor = remember { mutableStateOf<Color ?>(null ) }
201- val selectedDisplayOption =
202- rememberSaveable { mutableStateOf(DisplayOption .DAY ) }
203- val showDatePicker = remember { mutableStateOf(false ) }
204-
205- val uiStates =
206- CreateEditUiState (
207- title = title,
208- details = details,
209- selectedDate = selectedDate,
210- selectedColor = selectedColor,
211- selectedDisplayOption = selectedDisplayOption,
212- )
213-
214- val params =
215- CreateEditFormParams (
216- itemId = null ,
217- paddingValues = PaddingValues (),
218- uiStates = uiStates,
219- showDatePicker = showDatePicker,
220- viewModel = createTestViewModel(),
221- onBackClick = {},
222- )
138+ .assertCountEquals(7 )
223139
224- CreateEditFormContent (params)
225- }
226- }
140+ // When - кликаем на Red (индекс 1 в списке: custom, Red, Teal, Blue, Green, Yellow, Purple)
141+ composeTestRule
142+ .onAllNodesWithContentDescription(colorDescription)[1 ]
143+ .performClick()
227144
228- // Then - должен быть только 6 preset чипов
229- val colorDescription = context.getString(R .string.color)
145+ // Then - должен остаться только 6 preset чипов (кастомный исчез)
230146 composeTestRule
231147 .onAllNodesWithContentDescription(colorDescription)
232148 .assertCountEquals(6 )
0 commit comments