Skip to content

Commit 61b6857

Browse files
authored
Merge branch 'main' into add/conjugate-tab-ui-clean
2 parents 37c54a4 + c988830 commit 61b6857

31 files changed

Lines changed: 422 additions & 149 deletions

app/src/androidTestKeyboards/kotlin/be/scri/ui/screens/settings/SettingsScreenInstallKeyboardButtonTest.kt

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ class SettingsScreenInstallKeyboardButtonTest {
2929
every { mockViewModel.vibrateOnKeypress } returns MutableStateFlow(false)
3030
every { mockViewModel.popupOnKeypress } returns MutableStateFlow(false)
3131
every { mockViewModel.isUserDarkMode } returns MutableStateFlow(false)
32+
every { mockViewModel.isIncreaseTextSize } returns MutableStateFlow(false)
3233
return mockViewModel
3334
}
3435

@@ -43,6 +44,7 @@ class SettingsScreenInstallKeyboardButtonTest {
4344
SettingsScreen(
4445
onDarkModeChange = {},
4546
onLanguageSettingsClick = {},
47+
onIncreaseTextSizeChange = {},
4648
context = context,
4749
viewModel = mockViewModel,
4850
)
@@ -68,6 +70,7 @@ class SettingsScreenInstallKeyboardButtonTest {
6870
SettingsScreen(
6971
onDarkModeChange = {},
7072
onLanguageSettingsClick = {},
73+
onIncreaseTextSizeChange = {},
7174
context = context,
7275
viewModel = mockViewModel,
7376
)
@@ -90,6 +93,7 @@ class SettingsScreenInstallKeyboardButtonTest {
9093
SettingsScreen(
9194
onDarkModeChange = {},
9295
onLanguageSettingsClick = {},
96+
onIncreaseTextSizeChange = {},
9397
context = context,
9498
viewModel = mockViewModel,
9599
)
@@ -113,6 +117,7 @@ class SettingsScreenInstallKeyboardButtonTest {
113117
SettingsScreen(
114118
onDarkModeChange = {},
115119
onLanguageSettingsClick = {},
120+
onIncreaseTextSizeChange = {},
116121
context = context,
117122
viewModel = mockViewModel,
118123
)
@@ -137,6 +142,7 @@ class SettingsScreenInstallKeyboardButtonTest {
137142
SettingsScreen(
138143
onDarkModeChange = {},
139144
onLanguageSettingsClick = {},
145+
onIncreaseTextSizeChange = {},
140146
context = context,
141147
viewModel = mockViewModel,
142148
)
@@ -160,6 +166,7 @@ class SettingsScreenInstallKeyboardButtonTest {
160166
SettingsScreen(
161167
onDarkModeChange = {},
162168
onLanguageSettingsClick = {},
169+
onIncreaseTextSizeChange = {},
163170
context = context,
164171
viewModel = mockViewModel,
165172
)
@@ -186,6 +193,7 @@ class SettingsScreenInstallKeyboardButtonTest {
186193
SettingsScreen(
187194
onDarkModeChange = {},
188195
onLanguageSettingsClick = {},
196+
onIncreaseTextSizeChange = {},
189197
context = context,
190198
viewModel = mockViewModel,
191199
)
@@ -210,6 +218,7 @@ class SettingsScreenInstallKeyboardButtonTest {
210218
SettingsScreen(
211219
onDarkModeChange = {},
212220
onLanguageSettingsClick = {},
221+
onIncreaseTextSizeChange = {},
213222
context = context,
214223
viewModel = mockViewModel,
215224
)

app/src/androidTestKeyboards/kotlin/be/scri/ui/screens/settings/SettingsScreenInstrumentedTest.kt

Lines changed: 78 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,6 @@ import androidx.activity.ComponentActivity
77
import androidx.compose.runtime.Composable
88
import androidx.compose.ui.test.assertHasClickAction
99
import androidx.compose.ui.test.assertIsDisplayed
10-
import androidx.compose.ui.test.filterToOne
11-
import androidx.compose.ui.test.hasClickAction
12-
import androidx.compose.ui.test.hasText
1310
import androidx.compose.ui.test.junit4.createAndroidComposeRule
1411
import androidx.compose.ui.test.onNodeWithText
1512
import androidx.compose.ui.test.performClick
@@ -39,13 +36,15 @@ class SettingsScreenInstrumentedTest {
3936
private lateinit var context: Context
4037
private lateinit var mockViewModel: SettingsViewModel
4138
private lateinit var onDarkModeChangeMock: (Boolean) -> Unit
39+
private lateinit var onIncreaseTextSizeChangeMock: (Boolean) -> Unit
4240
private lateinit var onLanguageSettingsClickMock: (String) -> Unit
4341

4442
@Before
4543
fun setUp() {
4644
context = InstrumentationRegistry.getInstrumentation().targetContext
4745
mockViewModel = mockk(relaxed = true)
4846
onDarkModeChangeMock = mockk(relaxed = true)
47+
onIncreaseTextSizeChangeMock = mockk(relaxed = true)
4948
onLanguageSettingsClickMock = mockk(relaxed = true)
5049

5150
// Setup comprehensive mock returns for all StateFlow properties
@@ -54,9 +53,11 @@ class SettingsScreenInstrumentedTest {
5453
every { mockViewModel.vibrateOnKeypress } returns MutableStateFlow(false)
5554
every { mockViewModel.popupOnKeypress } returns MutableStateFlow(false)
5655
every { mockViewModel.isUserDarkMode } returns MutableStateFlow(false)
56+
every { mockViewModel.isIncreaseTextSize } returns MutableStateFlow(false)
5757

5858
every { mockViewModel.refreshSettings(any()) } returns Unit
5959
every { mockViewModel.setLightDarkMode(any()) } returns Unit
60+
every { mockViewModel.setIncreaseTextSize(any()) } returns Unit
6061
}
6162

6263
private fun setTestContent(content: @Composable () -> Unit) {
@@ -73,6 +74,7 @@ class SettingsScreenInstrumentedTest {
7374
setTestContent {
7475
SettingsScreen(
7576
onDarkModeChange = onDarkModeChangeMock,
77+
onIncreaseTextSizeChange = onIncreaseTextSizeChangeMock,
7678
onLanguageSettingsClick = onLanguageSettingsClickMock,
7779
context = context,
7880
)
@@ -88,6 +90,7 @@ class SettingsScreenInstrumentedTest {
8890
setTestContent {
8991
SettingsScreen(
9092
onDarkModeChange = onDarkModeChangeMock,
93+
onIncreaseTextSizeChange = onIncreaseTextSizeChangeMock,
9194
onLanguageSettingsClick = onLanguageSettingsClickMock,
9295
context = context,
9396
)
@@ -103,6 +106,7 @@ class SettingsScreenInstrumentedTest {
103106
setTestContent {
104107
SettingsScreen(
105108
onDarkModeChange = onDarkModeChangeMock,
109+
onIncreaseTextSizeChange = onIncreaseTextSizeChangeMock,
106110
onLanguageSettingsClick = onLanguageSettingsClickMock,
107111
context = context,
108112
)
@@ -118,6 +122,7 @@ class SettingsScreenInstrumentedTest {
118122
setTestContent {
119123
SettingsScreen(
120124
onDarkModeChange = onDarkModeChangeMock,
125+
onIncreaseTextSizeChange = onIncreaseTextSizeChangeMock,
121126
onLanguageSettingsClick = onLanguageSettingsClickMock,
122127
context = context,
123128
)
@@ -128,13 +133,34 @@ class SettingsScreenInstrumentedTest {
128133
.assertIsDisplayed()
129134
}
130135

136+
@Test
137+
fun settingsScreen_increaseTextSizeSwitch_isDisplayed() {
138+
setTestContent {
139+
SettingsScreen(
140+
onDarkModeChange = onDarkModeChangeMock,
141+
onIncreaseTextSizeChange = onIncreaseTextSizeChangeMock,
142+
onLanguageSettingsClick = onLanguageSettingsClickMock,
143+
context = context,
144+
)
145+
}
146+
147+
composeTestRule
148+
.onNodeWithText(context.getString(R.string.i18n_app_settings_menu_increase_text_size))
149+
.assertIsDisplayed()
150+
151+
composeTestRule
152+
.onNodeWithText(context.getString(R.string.i18n_app_settings_menu_increase_text_size_description))
153+
.assertIsDisplayed()
154+
}
155+
131156
@Test
132157
fun settingsScreen_whenKeyboardNotInstalled_showsInstallButton() {
133158
every { mockViewModel.isKeyboardInstalled } returns MutableStateFlow(false)
134159

135160
setTestContent {
136161
SettingsScreen(
137162
onDarkModeChange = onDarkModeChangeMock,
163+
onIncreaseTextSizeChange = onIncreaseTextSizeChangeMock,
138164
onLanguageSettingsClick = onLanguageSettingsClickMock,
139165
context = context,
140166
viewModel = mockViewModel,
@@ -156,6 +182,7 @@ class SettingsScreenInstrumentedTest {
156182
setTestContent {
157183
SettingsScreen(
158184
onDarkModeChange = onDarkModeChangeMock,
185+
onIncreaseTextSizeChange = onIncreaseTextSizeChangeMock,
159186
onLanguageSettingsClick = onLanguageSettingsClickMock,
160187
context = context,
161188
viewModel = mockViewModel,
@@ -183,6 +210,7 @@ class SettingsScreenInstrumentedTest {
183210
setTestContent {
184211
SettingsScreen(
185212
onDarkModeChange = onDarkModeChangeMock,
213+
onIncreaseTextSizeChange = onIncreaseTextSizeChangeMock,
186214
onLanguageSettingsClick = onLanguageSettingsClickMock,
187215
context = context,
188216
viewModel = mockViewModel,
@@ -206,12 +234,14 @@ class SettingsScreenInstrumentedTest {
206234
every { mockViewModelSpy.vibrateOnKeypress } returns MutableStateFlow(false)
207235
every { mockViewModelSpy.popupOnKeypress } returns MutableStateFlow(false)
208236
every { mockViewModelSpy.isUserDarkMode } returns MutableStateFlow(false)
237+
every { mockViewModelSpy.isIncreaseTextSize } returns MutableStateFlow(false)
209238
every { mockViewModelSpy.refreshSettings(any()) } returns Unit
210239
every { mockViewModelSpy.setLightDarkMode(any()) } returns Unit
211240

212241
setTestContent {
213242
SettingsScreen(
214243
onDarkModeChange = onDarkModeChangeMock,
244+
onIncreaseTextSizeChange = onIncreaseTextSizeChangeMock,
215245
onLanguageSettingsClick = onLanguageSettingsClickMock,
216246
context = context,
217247
viewModel = mockViewModelSpy,
@@ -222,20 +252,50 @@ class SettingsScreenInstrumentedTest {
222252

223253
composeTestRule
224254
.onNodeWithText(darkModeText)
225-
.assertIsDisplayed()
226-
227-
composeTestRule
228-
.onAllNodes(hasClickAction() and !hasText(darkModeText))
229-
.filterToOne(
230-
!hasText("App language") and !hasText("Install keyboards"),
231-
).performClick()
255+
.performClick()
232256

233257
composeTestRule.waitForIdle()
234258

235259
verify(timeout = 3000) { mockViewModelSpy.setLightDarkMode(true) }
236260
verify(timeout = 3000) { onDarkModeChangeMock(true) }
237261
}
238262

263+
@Test
264+
fun settingsScreen_increaseTextSizeToggle_triggersCallbacks() {
265+
every { mockViewModel.isIncreaseTextSize } returns MutableStateFlow(false)
266+
val mockViewModelSpy = spyk(mockViewModel)
267+
268+
every { mockViewModelSpy.languages } returns MutableStateFlow(emptyList())
269+
every { mockViewModelSpy.isKeyboardInstalled } returns MutableStateFlow(false)
270+
every { mockViewModelSpy.vibrateOnKeypress } returns MutableStateFlow(false)
271+
every { mockViewModelSpy.popupOnKeypress } returns MutableStateFlow(false)
272+
every { mockViewModelSpy.isUserDarkMode } returns MutableStateFlow(false)
273+
every { mockViewModelSpy.isIncreaseTextSize } returns MutableStateFlow(false)
274+
every { mockViewModelSpy.refreshSettings(any()) } returns Unit
275+
every { mockViewModelSpy.setIncreaseTextSize(any()) } returns Unit
276+
277+
setTestContent {
278+
SettingsScreen(
279+
onDarkModeChange = onDarkModeChangeMock,
280+
onIncreaseTextSizeChange = onIncreaseTextSizeChangeMock,
281+
onLanguageSettingsClick = onLanguageSettingsClickMock,
282+
context = context,
283+
viewModel = mockViewModelSpy,
284+
)
285+
}
286+
287+
val increaseTextSizeText = "Increase app text size"
288+
289+
composeTestRule
290+
.onNodeWithText(increaseTextSizeText)
291+
.performClick()
292+
293+
composeTestRule.waitForIdle()
294+
295+
verify(timeout = 3000) { mockViewModelSpy.setIncreaseTextSize(true) }
296+
verify(timeout = 3000) { onIncreaseTextSizeChangeMock(true) }
297+
}
298+
239299
@Test
240300
fun settingsScreen_refreshSettings_whenLifecycleResumes() {
241301
val mockViewModelSpy = spyk(mockViewModel)
@@ -245,12 +305,14 @@ class SettingsScreenInstrumentedTest {
245305
every { mockViewModelSpy.vibrateOnKeypress } returns MutableStateFlow(false)
246306
every { mockViewModelSpy.popupOnKeypress } returns MutableStateFlow(false)
247307
every { mockViewModelSpy.isUserDarkMode } returns MutableStateFlow(false)
308+
every { mockViewModelSpy.isIncreaseTextSize } returns MutableStateFlow(false)
248309
every { mockViewModelSpy.refreshSettings(any()) } returns Unit
249310
every { mockViewModelSpy.setLightDarkMode(any()) } returns Unit
250311

251312
setTestContent {
252313
SettingsScreen(
253314
onDarkModeChange = onDarkModeChangeMock,
315+
onIncreaseTextSizeChange = onIncreaseTextSizeChangeMock,
254316
onLanguageSettingsClick = onLanguageSettingsClickMock,
255317
context = context,
256318
viewModel = mockViewModelSpy,
@@ -265,6 +327,7 @@ class SettingsScreenInstrumentedTest {
265327
setTestContent {
266328
SettingsScreen(
267329
onDarkModeChange = onDarkModeChangeMock,
330+
onIncreaseTextSizeChange = onIncreaseTextSizeChangeMock,
268331
onLanguageSettingsClick = onLanguageSettingsClickMock,
269332
context = context,
270333
)
@@ -280,6 +343,7 @@ class SettingsScreenInstrumentedTest {
280343
setTestContent {
281344
SettingsScreen(
282345
onDarkModeChange = onDarkModeChangeMock,
346+
onIncreaseTextSizeChange = onIncreaseTextSizeChangeMock,
283347
onLanguageSettingsClick = onLanguageSettingsClickMock,
284348
context = context,
285349
)
@@ -298,6 +362,7 @@ class SettingsScreenInstrumentedTest {
298362
setTestContent {
299363
SettingsScreen(
300364
onDarkModeChange = onDarkModeChangeMock,
365+
onIncreaseTextSizeChange = onIncreaseTextSizeChangeMock,
301366
onLanguageSettingsClick = onLanguageSettingsClickMock,
302367
context = context,
303368
)
@@ -317,6 +382,7 @@ class SettingsScreenInstrumentedTest {
317382
setTestContent {
318383
SettingsScreen(
319384
onDarkModeChange = onDarkModeChangeMock,
385+
onIncreaseTextSizeChange = onIncreaseTextSizeChangeMock,
320386
onLanguageSettingsClick = onLanguageSettingsClickMock,
321387
context = context,
322388
viewModel = mockViewModel,
@@ -338,6 +404,7 @@ class SettingsScreenInstrumentedTest {
338404
setTestContent {
339405
SettingsScreen(
340406
onDarkModeChange = onDarkModeChangeMock,
407+
onIncreaseTextSizeChange = onIncreaseTextSizeChangeMock,
341408
onLanguageSettingsClick = onLanguageSettingsClickMock,
342409
context = context,
343410
viewModel = mockViewModel,
@@ -354,6 +421,7 @@ class SettingsScreenInstrumentedTest {
354421
setTestContent {
355422
SettingsScreen(
356423
onDarkModeChange = onDarkModeChangeMock,
424+
onIncreaseTextSizeChange = onIncreaseTextSizeChangeMock,
357425
onLanguageSettingsClick = onLanguageSettingsClickMock,
358426
context = context,
359427
)

0 commit comments

Comments
 (0)