@@ -31,6 +31,75 @@ async function waitForLoadingDone(page: Page) {
3131 ) . toHaveCount ( 0 ) ;
3232}
3333
34+ async function changeCondFormatComparison (
35+ page : Page ,
36+ condition : string ,
37+ column : string = ''
38+ ) {
39+ const formattingRule = page . locator ( '.formatting-item' ) ;
40+ const conditionSelect = page . locator ( 'data-testid=condition-select' ) ;
41+ const highlightCell = page . getByRole ( 'button' , { name : 'Conditional' } ) ;
42+ const doneButton = page . getByRole ( 'button' , { name : 'Done' } ) ;
43+ const columnSelect = page
44+ . locator ( '.conditional-rule-editor' )
45+ . getByRole ( 'button' )
46+ . first ( ) ;
47+
48+ await expect ( formattingRule ) . toHaveCount ( 1 ) ;
49+ await expect ( conditionSelect ) . toHaveCount ( 0 ) ;
50+ await expect ( highlightCell ) . toHaveCount ( 0 ) ;
51+
52+ await formattingRule . click ( ) ;
53+
54+ await expect ( formattingRule ) . toHaveCount ( 0 ) ;
55+ await expect ( conditionSelect ) . toHaveCount ( 1 ) ;
56+ await expect ( highlightCell ) . toHaveCount ( 1 ) ;
57+ await expect ( columnSelect ) . toHaveCount ( 1 ) ;
58+
59+ await highlightCell . click ( ) ;
60+ if ( column !== '' ) {
61+ await columnSelect . click ( ) ;
62+ await page . getByRole ( 'button' , { name : column , exact : true } ) . click ( ) ;
63+
64+ await page . locator ( '.style-editor' ) . click ( ) ;
65+ await page
66+ . locator ( '.style-options' )
67+ . getByRole ( 'button' , { name : 'Positive' } )
68+ . click ( ) ;
69+ }
70+ await conditionSelect . selectOption ( condition ) ;
71+ await doneButton . click ( ) ;
72+
73+ await expect ( formattingRule ) . toHaveCount ( 1 ) ;
74+ await expect ( conditionSelect ) . toHaveCount ( 0 ) ;
75+ await expect ( highlightCell ) . toHaveCount ( 0 ) ;
76+ await expect ( columnSelect ) . toHaveCount ( 0 ) ;
77+ await waitForLoadingDone ( page ) ;
78+ }
79+
80+ async function changeCondFormatHighlight ( page : Page ) {
81+ const formattingRule = page . locator ( '.formatting-item' ) ;
82+ const highlightRow = page . getByRole ( 'button' , { name : 'Rows' } ) ;
83+ const doneButton = page . getByRole ( 'button' , { name : 'Done' } ) ;
84+
85+ await expect ( formattingRule ) . toHaveCount ( 1 ) ;
86+ await expect ( highlightRow ) . toHaveCount ( 0 ) ;
87+ await expect ( doneButton ) . toHaveCount ( 0 ) ;
88+
89+ await formattingRule . click ( ) ;
90+
91+ await expect ( highlightRow ) . toHaveCount ( 1 ) ;
92+ await expect ( doneButton ) . toHaveCount ( 1 ) ;
93+
94+ await highlightRow . click ( ) ;
95+ await doneButton . click ( ) ;
96+
97+ await expect ( formattingRule ) . toHaveCount ( 1 ) ;
98+ await expect ( highlightRow ) . toHaveCount ( 0 ) ;
99+ await expect ( doneButton ) . toHaveCount ( 0 ) ;
100+ await waitForLoadingDone ( page ) ;
101+ }
102+
34103test ( 'can open a simple table' , async ( { page } ) => {
35104 await page . goto ( '' ) ;
36105 await openSimpleTable ( page ) ;
@@ -172,6 +241,62 @@ test.describe('tests complex table operations', () => {
172241 await expect ( page . locator ( '.iris-grid-column' ) ) . toHaveScreenshot ( ) ;
173242 } ) ;
174243
244+ test ( 'can conditional format' , async ( ) => {
245+ await page . locator ( 'data-testid=menu-item-Conditional Formatting' ) . click ( ) ;
246+
247+ await test . step ( ' Setup new formatting rule' , async ( ) => {
248+ await page . getByRole ( 'button' , { name : 'Add New Rule' } ) . click ( ) ;
249+ await page . locator ( '.style-editor' ) . click ( ) ;
250+ await page . getByRole ( 'button' , { name : 'Positive' } ) . click ( ) ;
251+ await page . getByRole ( 'button' , { name : 'Done' } ) . click ( ) ;
252+ } ) ;
253+
254+ await test . step ( 'Is null' , async ( ) => {
255+ await changeCondFormatComparison ( page , 'is-null' ) ;
256+ await expect ( page . locator ( '.iris-grid-column' ) ) . toHaveScreenshot ( ) ;
257+
258+ await changeCondFormatHighlight ( page ) ;
259+ await expect ( page . locator ( '.iris-grid-column' ) ) . toHaveScreenshot ( ) ;
260+ } ) ;
261+
262+ await test . step ( 'Is not null' , async ( ) => {
263+ await changeCondFormatComparison ( page , 'is-not-null' ) ;
264+ await expect ( page . locator ( '.iris-grid-column' ) ) . toHaveScreenshot ( ) ;
265+
266+ await changeCondFormatHighlight ( page ) ;
267+ await expect ( page . locator ( '.iris-grid-column' ) ) . toHaveScreenshot ( ) ;
268+ } ) ;
269+
270+ await test . step ( 'Change column' , async ( ) => {
271+ await changeCondFormatComparison ( page , 'is-not-null' , 'Int' ) ;
272+ await expect ( page . locator ( '.iris-grid-column' ) ) . toHaveScreenshot ( ) ;
273+
274+ await changeCondFormatHighlight ( page ) ;
275+ await expect ( page . locator ( '.iris-grid-column' ) ) . toHaveScreenshot ( ) ;
276+ } ) ;
277+
278+ await test . step ( 'Cancel' , async ( ) => {
279+ const formattingRule = page . locator ( '.formatting-item' ) ;
280+ const conditionSelect = page . locator ( 'data-testid=condition-select' ) ;
281+
282+ await expect ( conditionSelect ) . toHaveCount ( 0 ) ;
283+
284+ await formattingRule . click ( ) ;
285+ await conditionSelect . selectOption ( 'is-null' ) ;
286+ await page . getByRole ( 'button' , { name : 'Cancel' } ) . first ( ) . click ( ) ;
287+
288+ await waitForLoadingDone ( page ) ;
289+ await expect ( page . locator ( '.iris-grid-column' ) ) . toHaveScreenshot ( ) ;
290+ } ) ;
291+
292+ await test . step ( 'Delete' , async ( ) => {
293+ await page . getByRole ( 'button' , { name : 'Delete rule' } ) . click ( ) ;
294+
295+ await waitForLoadingDone ( page ) ;
296+ await expect ( page . locator ( '.iris-grid-column' ) ) . toHaveScreenshot ( ) ;
297+ } ) ;
298+ } ) ;
299+
175300 test ( 'can organize columns' , async ( ) => {
176301 await page . locator ( 'data-testid=menu-item-Organize Columns' ) . click ( ) ;
177302
@@ -247,7 +372,7 @@ test.describe('tests complex table operations', () => {
247372 ) ;
248373 await dragColumnButton . hover ( ) ;
249374 await page . mouse . down ( ) ;
250- await page . mouse . move ( x , y , { steps : 500 } ) ;
375+ await page . mouse . move ( x , y , { steps : 50 } ) ;
251376 await page . mouse . up ( ) ;
252377
253378 await expect ( page . locator ( '.iris-grid-column' ) ) . toHaveScreenshot ( ) ;
@@ -274,7 +399,7 @@ test.describe('tests complex table operations', () => {
274399 ) ;
275400 await dragColumnButton . hover ( ) ;
276401 await page . mouse . down ( ) ;
277- await page . mouse . move ( x , y , { steps : 500 } ) ;
402+ await page . mouse . move ( x , y , { steps : 50 } ) ;
278403 await page . mouse . up ( ) ;
279404
280405 await expect ( page . locator ( '.iris-grid-column' ) ) . toHaveScreenshot ( ) ;
0 commit comments