@@ -22,13 +22,33 @@ import {
22
22
lowerRightMasks ,
23
23
settingsToToml ,
24
24
tomlToSettings ,
25
+ inputRangeSlideFromCurrentTo ,
25
26
} from '@e2e/playwright/test-utils'
26
27
import { expect , test } from '@e2e/playwright/zoo-test'
28
+ import type { Page } from '@playwright/test'
29
+
30
+ const settingsSwitchTab = ( page : Page ) => async ( tab : 'user' | 'proj' ) => {
31
+ const projectSettingsTab = page . getByRole ( 'radio' , { name : 'Project' } )
32
+ const userSettingsTab = page . getByRole ( 'radio' , { name : 'User' } )
33
+ const settingTheme = page . getByTestId ( 'theme' )
34
+ switch ( tab ) {
35
+ case 'user' :
36
+ await userSettingsTab . click ( )
37
+ await expect ( settingTheme ) . toBeVisible ( )
38
+ break
39
+ case 'proj' :
40
+ await projectSettingsTab . click ( )
41
+ await expect ( settingTheme ) . not . toBeVisible ( )
42
+ break
43
+ default :
44
+ const _ : never = tab
45
+ }
46
+ }
27
47
28
48
test . describe (
29
49
'Testing settings' ,
30
50
{
31
- tag : [ '@macos' , '@windows' ] ,
51
+ tag : [ '@linux' , '@ macos', '@windows' ] ,
32
52
} ,
33
53
( ) => {
34
54
test ( 'Stored settings are validated and fall back to defaults' , async ( {
@@ -199,17 +219,18 @@ test.describe(
199
219
} )
200
220
201
221
// Selectors and constants
202
- const projectSettingsTab = page . getByRole ( 'radio' , { name : 'Project' } )
203
- const userSettingsTab = page . getByRole ( 'radio' , { name : 'User' } )
204
222
const resetButton = ( level : SettingsLevel ) =>
205
223
page . getByRole ( 'button' , {
206
224
name : `Reset ${ level } -level settings` ,
207
225
} )
208
226
const themeColorSetting = page . locator ( '#themeColor' ) . getByRole ( 'slider' )
227
+
209
228
const settingValues = {
210
229
default : '259' ,
211
- user : '120' ,
212
- project : '50' ,
230
+ // Because it's a slider, sometimes the values cannot physically be
231
+ // dragged to. You need to adjust this until it works.
232
+ user : '48' ,
233
+ project : '77' ,
213
234
}
214
235
const resetToast = ( level : SettingsLevel ) =>
215
236
page . getByText ( `${ level } -level settings were reset` )
@@ -222,21 +243,31 @@ test.describe(
222
243
} )
223
244
224
245
await test . step ( 'Set up theme color' , async ( ) => {
225
- // Verify we're looking at the project-level settings,
226
- // and it's set to default value
227
- await expect ( projectSettingsTab ) . toBeChecked ( )
228
- await expect ( themeColorSetting ) . toHaveValue ( settingValues . default )
229
-
230
- // Set project-level value to 50
231
- await themeColorSetting . fill ( settingValues . project )
232
-
233
- // Set user-level value to 120
234
- await userSettingsTab . click ( )
235
- await themeColorSetting . fill ( settingValues . user )
236
- await projectSettingsTab . click ( )
246
+ // Verify we're looking at the project-level settings
247
+ await settingsSwitchTab ( page ) ( 'proj' )
248
+ await themeColorSetting . fill ( settingValues . default )
249
+
250
+ // Set project-level value
251
+ await inputRangeSlideFromCurrentTo (
252
+ themeColorSetting ,
253
+ settingValues . project
254
+ )
255
+ await expect ( themeColorSetting ) . toHaveValue ( settingValues . project )
256
+
257
+ // Set user-level value
258
+ // It's the same component so this could fill too soon.
259
+ // We need to confirm to wait the user settings tab is loaded.
260
+ await settingsSwitchTab ( page ) ( 'user' )
261
+ await inputRangeSlideFromCurrentTo (
262
+ themeColorSetting ,
263
+ settingValues . user
264
+ )
265
+ await expect ( themeColorSetting ) . toHaveValue ( settingValues . user )
237
266
} )
238
267
239
268
await test . step ( 'Reset project settings' , async ( ) => {
269
+ await settingsSwitchTab ( page ) ( 'proj' )
270
+
240
271
// Click the reset settings button.
241
272
await resetButton ( 'project' ) . click ( )
242
273
@@ -247,14 +278,17 @@ test.describe(
247
278
await expect ( themeColorSetting ) . toHaveValue ( settingValues . user )
248
279
249
280
await test . step ( `Check that the user settings did not change` , async ( ) => {
250
- await userSettingsTab . click ( )
281
+ await settingsSwitchTab ( page ) ( 'user' )
251
282
await expect ( themeColorSetting ) . toHaveValue ( settingValues . user )
252
283
} )
253
284
254
285
await test . step ( `Set project-level again to test the user-level reset` , async ( ) => {
255
- await projectSettingsTab . click ( )
256
- await themeColorSetting . fill ( settingValues . project )
257
- await userSettingsTab . click ( )
286
+ await settingsSwitchTab ( page ) ( 'proj' )
287
+ await inputRangeSlideFromCurrentTo (
288
+ themeColorSetting ,
289
+ settingValues . project
290
+ )
291
+ await settingsSwitchTab ( page ) ( 'user' )
258
292
} )
259
293
} )
260
294
@@ -269,7 +303,7 @@ test.describe(
269
303
await expect ( themeColorSetting ) . toHaveValue ( settingValues . default )
270
304
271
305
await test . step ( `Check that the project settings did not change` , async ( ) => {
272
- await projectSettingsTab . click ( )
306
+ await settingsSwitchTab ( page ) ( 'proj' )
273
307
await expect ( themeColorSetting ) . toHaveValue ( settingValues . project )
274
308
} )
275
309
} )
@@ -303,7 +337,7 @@ test.describe(
303
337
projectDirName ,
304
338
SETTINGS_FILE_NAME
305
339
)
306
- const userThemeColor = '120 '
340
+ const userThemeColor = '175 '
307
341
const projectThemeColor = '50'
308
342
const settingsOpenButton = page . getByRole ( 'link' , {
309
343
name : 'settings Settings' ,
@@ -322,7 +356,7 @@ test.describe(
322
356
await settingsOpenButton . click ( )
323
357
// The user tab should be selected by default on home
324
358
await expect ( userSettingsTab ) . toBeChecked ( )
325
- await themeColorSetting . fill ( userThemeColor )
359
+ await inputRangeSlideFromCurrentTo ( themeColorSetting , userThemeColor )
326
360
await expect ( logoLink ) . toHaveCSS ( '--primary-hue' , userThemeColor )
327
361
await settingsCloseButton . click ( )
328
362
await expect
@@ -339,7 +373,10 @@ test.describe(
339
373
await settingsOpenButton . click ( )
340
374
// The project tab should be selected by default within a project
341
375
await expect ( projectSettingsTab ) . toBeChecked ( )
342
- await themeColorSetting . fill ( projectThemeColor )
376
+ await inputRangeSlideFromCurrentTo (
377
+ themeColorSetting ,
378
+ projectThemeColor
379
+ )
343
380
await expect ( logoLink ) . toHaveCSS ( '--primary-hue' , projectThemeColor )
344
381
await settingsCloseButton . click ( )
345
382
// Make sure that the project settings file has been written to before continuing
@@ -631,7 +668,7 @@ test.describe(
631
668
} )
632
669
633
670
await test . step ( `Reset unit setting` , async ( ) => {
634
- await userSettingsTab . click ( )
671
+ await settingsSwitchTab ( page ) ( 'user' )
635
672
await defaultUnitSection . hover ( )
636
673
await defaultUnitRollbackButton . click ( )
637
674
await projectSettingsTab . hover ( )
@@ -666,7 +703,7 @@ test.describe(
666
703
667
704
// Go to the user tab
668
705
await userSettingsTab . hover ( )
669
- await userSettingsTab . click ( )
706
+ await settingsSwitchTab ( page ) ( 'user' )
670
707
await page . waitForTimeout ( 1000 )
671
708
672
709
await test . step ( 'Change modeling default unit within user tab' , async ( ) => {
0 commit comments