@@ -932,8 +932,7 @@ test.describe('Deselect triggers server refetch', { tag: '@responsive' }, () =>
932932 // Register response waiter BEFORE the click (waitForResponse must precede the action)
933933 const refetchPromise = page . waitForResponse (
934934 ( resp ) =>
935- resp . url ( ) . includes ( '/api/budget/breakdown' ) &&
936- resp . url ( ) . includes ( 'deselectedSources=' ) ,
935+ resp . url ( ) . includes ( '/api/budget/breakdown' ) && resp . url ( ) . includes ( 'deselectedSources=' ) ,
937936 ) ;
938937
939938 await row . click ( ) ;
@@ -990,8 +989,7 @@ test.describe('Deselect triggers server refetch', { tag: '@responsive' }, () =>
990989 // Register response waiter BEFORE the click
991990 const refetchPromise = page . waitForResponse (
992991 ( resp ) =>
993- resp . url ( ) . includes ( '/api/budget/breakdown' ) &&
994- resp . url ( ) . includes ( 'deselectedSources=' ) ,
992+ resp . url ( ) . includes ( '/api/budget/breakdown' ) && resp . url ( ) . includes ( 'deselectedSources=' ) ,
995993 ) ;
996994
997995 await overviewPage . sourceRow ( 'Bank Loan' ) . click ( ) ;
@@ -1036,8 +1034,7 @@ test.describe('Deselect triggers server refetch', { tag: '@responsive' }, () =>
10361034 // Deselect Bank Loan — first refetch includes only SOURCE_A_ID
10371035 const refetchA = page . waitForResponse (
10381036 ( resp ) =>
1039- resp . url ( ) . includes ( '/api/budget/breakdown' ) &&
1040- resp . url ( ) . includes ( 'deselectedSources=' ) ,
1037+ resp . url ( ) . includes ( '/api/budget/breakdown' ) && resp . url ( ) . includes ( 'deselectedSources=' ) ,
10411038 ) ;
10421039 await overviewPage . sourceRow ( 'Bank Loan' ) . click ( ) ;
10431040 // aria-pressed updates from URL state change before the server response
@@ -1047,8 +1044,7 @@ test.describe('Deselect triggers server refetch', { tag: '@responsive' }, () =>
10471044 // Deselect Equity — new refetch should include both IDs
10481045 const refetchB = page . waitForResponse (
10491046 ( resp ) =>
1050- resp . url ( ) . includes ( '/api/budget/breakdown' ) &&
1051- resp . url ( ) . includes ( 'deselectedSources=' ) ,
1047+ resp . url ( ) . includes ( '/api/budget/breakdown' ) && resp . url ( ) . includes ( 'deselectedSources=' ) ,
10521048 ) ;
10531049 await overviewPage . sourceRow ( 'Equity' ) . click ( ) ;
10541050 // aria-pressed for Equity updates from URL state before server response
@@ -1192,8 +1188,7 @@ test.describe('Cascade hiding via server response', { tag: '@responsive' }, () =
11921188
11931189 const refetchPromise = page . waitForResponse (
11941190 ( resp ) =>
1195- resp . url ( ) . includes ( '/api/budget/breakdown' ) &&
1196- resp . url ( ) . includes ( 'deselectedSources=' ) ,
1191+ resp . url ( ) . includes ( '/api/budget/breakdown' ) && resp . url ( ) . includes ( 'deselectedSources=' ) ,
11971192 ) ;
11981193 await overviewPage . sourceRow ( 'Bank Loan' ) . click ( ) ;
11991194 await expect ( overviewPage . sourceRow ( 'Bank Loan' ) ) . toHaveAttribute ( 'aria-pressed' , 'false' ) ;
@@ -1243,8 +1238,7 @@ test.describe('Cascade hiding via server response', { tag: '@responsive' }, () =
12431238
12441239 const refetchPromise = page . waitForResponse (
12451240 ( resp ) =>
1246- resp . url ( ) . includes ( '/api/budget/breakdown' ) &&
1247- resp . url ( ) . includes ( 'deselectedSources=' ) ,
1241+ resp . url ( ) . includes ( '/api/budget/breakdown' ) && resp . url ( ) . includes ( 'deselectedSources=' ) ,
12481242 ) ;
12491243 await overviewPage . sourceRow ( 'Bank Loan' ) . click ( ) ;
12501244 // aria-pressed updates from URL state change before server response
@@ -1293,8 +1287,7 @@ test.describe('Subsidy oversubscription consistency', () => {
12931287 // Deselect Large Source → triggers server refetch with filtered data
12941288 const refetchPromise = page . waitForResponse (
12951289 ( resp ) =>
1296- resp . url ( ) . includes ( '/api/budget/breakdown' ) &&
1297- resp . url ( ) . includes ( 'deselectedSources=' ) ,
1290+ resp . url ( ) . includes ( '/api/budget/breakdown' ) && resp . url ( ) . includes ( 'deselectedSources=' ) ,
12981291 ) ;
12991292
13001293 await largeRow . click ( ) ;
@@ -1407,8 +1400,7 @@ test.describe('Stale-while-revalidate during refetch', { tag: '@responsive' }, (
14071400 // Register the delayed refetch promise BEFORE clicking
14081401 const refetchPromise = page . waitForResponse (
14091402 ( resp ) =>
1410- resp . url ( ) . includes ( '/api/budget/breakdown' ) &&
1411- resp . url ( ) . includes ( 'deselectedSources=' ) ,
1403+ resp . url ( ) . includes ( '/api/budget/breakdown' ) && resp . url ( ) . includes ( 'deselectedSources=' ) ,
14121404 ) ;
14131405
14141406 // Deselect source — triggers debounced + delayed refetch
@@ -1454,8 +1446,7 @@ test.describe('URL on mount triggers initial filtered fetch', { tag: '@responsiv
14541446 // Register response waiter BEFORE navigation — must catch the initial mount fetch
14551447 const initialFetchPromise = page . waitForResponse (
14561448 ( resp ) =>
1457- resp . url ( ) . includes ( '/api/budget/breakdown' ) &&
1458- resp . url ( ) . includes ( 'deselectedSources=' ) ,
1449+ resp . url ( ) . includes ( '/api/budget/breakdown' ) && resp . url ( ) . includes ( 'deselectedSources=' ) ,
14591450 ) ;
14601451
14611452 // Navigate directly with deselectedSources param
@@ -1578,8 +1569,7 @@ test.describe('Empty state when all sources deselected', { tag: '@responsive' },
15781569
15791570 const refetchPromise = page . waitForResponse (
15801571 ( resp ) =>
1581- resp . url ( ) . includes ( '/api/budget/breakdown' ) &&
1582- resp . url ( ) . includes ( 'deselectedSources=' ) ,
1572+ resp . url ( ) . includes ( '/api/budget/breakdown' ) && resp . url ( ) . includes ( 'deselectedSources=' ) ,
15831573 ) ;
15841574
15851575 await overviewPage . sourceRow ( 'Bank Loan' ) . click ( ) ;
@@ -1618,8 +1608,7 @@ test.describe('Empty state when all sources deselected', { tag: '@responsive' },
16181608 // Deselect to trigger empty state
16191609 const firstRefetch = page . waitForResponse (
16201610 ( resp ) =>
1621- resp . url ( ) . includes ( '/api/budget/breakdown' ) &&
1622- resp . url ( ) . includes ( 'deselectedSources=' ) ,
1611+ resp . url ( ) . includes ( '/api/budget/breakdown' ) && resp . url ( ) . includes ( 'deselectedSources=' ) ,
16231612 ) ;
16241613 await overviewPage . sourceRow ( 'Bank Loan' ) . click ( ) ;
16251614 await firstRefetch ;
@@ -1702,8 +1691,7 @@ test.describe('Rapid debounce coalesces requests', () => {
17021691 // to let the single coalesced request complete.
17031692 const coalescedRefetch = page . waitForResponse (
17041693 ( resp ) =>
1705- resp . url ( ) . includes ( '/api/budget/breakdown' ) &&
1706- resp . url ( ) . includes ( 'deselectedSources=' ) ,
1694+ resp . url ( ) . includes ( '/api/budget/breakdown' ) && resp . url ( ) . includes ( 'deselectedSources=' ) ,
17071695 ) ;
17081696 await coalescedRefetch ;
17091697
@@ -1743,8 +1731,7 @@ test.describe('Available Funds caption', { tag: '@responsive' }, () => {
17431731 // Deselect Bank Loan — triggers refetch
17441732 const refetchPromise = page . waitForResponse (
17451733 ( resp ) =>
1746- resp . url ( ) . includes ( '/api/budget/breakdown' ) &&
1747- resp . url ( ) . includes ( 'deselectedSources=' ) ,
1734+ resp . url ( ) . includes ( '/api/budget/breakdown' ) && resp . url ( ) . includes ( 'deselectedSources=' ) ,
17481735 ) ;
17491736 await overviewPage . sourceRow ( 'Bank Loan' ) . click ( ) ;
17501737 await refetchPromise ;
@@ -1825,8 +1812,7 @@ test.describe('Source detail row columns', { tag: '@responsive' }, () => {
18251812 // Deselect — triggers refetch; wait for it
18261813 const refetchPromise = page . waitForResponse (
18271814 ( resp ) =>
1828- resp . url ( ) . includes ( '/api/budget/breakdown' ) &&
1829- resp . url ( ) . includes ( 'deselectedSources=' ) ,
1815+ resp . url ( ) . includes ( '/api/budget/breakdown' ) && resp . url ( ) . includes ( 'deselectedSources=' ) ,
18301816 ) ;
18311817 await row . click ( ) ;
18321818 await expect ( row ) . toHaveAttribute ( 'aria-pressed' , 'false' ) ;
@@ -1901,8 +1887,7 @@ test.describe('Keyboard navigation', () => {
19011887 // Space deselects (all sources start selected) — triggers refetch
19021888 const deselect = page . waitForResponse (
19031889 ( resp ) =>
1904- resp . url ( ) . includes ( '/api/budget/breakdown' ) &&
1905- resp . url ( ) . includes ( 'deselectedSources=' ) ,
1890+ resp . url ( ) . includes ( '/api/budget/breakdown' ) && resp . url ( ) . includes ( 'deselectedSources=' ) ,
19061891 ) ;
19071892 await page . keyboard . press ( 'Space' ) ;
19081893 await expect ( row ) . toHaveAttribute ( 'aria-pressed' , 'false' ) ;
@@ -1942,8 +1927,7 @@ test.describe('Keyboard navigation', () => {
19421927
19431928 const refetchPromise = page . waitForResponse (
19441929 ( resp ) =>
1945- resp . url ( ) . includes ( '/api/budget/breakdown' ) &&
1946- resp . url ( ) . includes ( 'deselectedSources=' ) ,
1930+ resp . url ( ) . includes ( '/api/budget/breakdown' ) && resp . url ( ) . includes ( 'deselectedSources=' ) ,
19471931 ) ;
19481932 await page . keyboard . press ( 'Enter' ) ;
19491933 await expect ( row ) . toHaveAttribute ( 'aria-pressed' , 'false' ) ;
@@ -1973,8 +1957,7 @@ test.describe('Keyboard navigation', () => {
19731957 // Deselect Bank Loan
19741958 const deselect = page . waitForResponse (
19751959 ( resp ) =>
1976- resp . url ( ) . includes ( '/api/budget/breakdown' ) &&
1977- resp . url ( ) . includes ( 'deselectedSources=' ) ,
1960+ resp . url ( ) . includes ( '/api/budget/breakdown' ) && resp . url ( ) . includes ( 'deselectedSources=' ) ,
19781961 ) ;
19791962 const row = overviewPage . sourceRow ( 'Bank Loan' ) ;
19801963 await row . click ( ) ;
@@ -2053,8 +2036,7 @@ test.describe('Live region', { tag: '@responsive' }, () => {
20532036
20542037 const refetchPromise = page . waitForResponse (
20552038 ( resp ) =>
2056- resp . url ( ) . includes ( '/api/budget/breakdown' ) &&
2057- resp . url ( ) . includes ( 'deselectedSources=' ) ,
2039+ resp . url ( ) . includes ( '/api/budget/breakdown' ) && resp . url ( ) . includes ( 'deselectedSources=' ) ,
20582040 ) ;
20592041 await overviewPage . sourceRow ( 'Bank Loan' ) . click ( ) ;
20602042 await refetchPromise ;
@@ -2091,8 +2073,7 @@ test.describe('No chip toolbar', { tag: '@responsive' }, () => {
20912073 // Select a source to make the UI "active" — toolbar must still not appear
20922074 const refetchPromise = page . waitForResponse (
20932075 ( resp ) =>
2094- resp . url ( ) . includes ( '/api/budget/breakdown' ) &&
2095- resp . url ( ) . includes ( 'deselectedSources=' ) ,
2076+ resp . url ( ) . includes ( '/api/budget/breakdown' ) && resp . url ( ) . includes ( 'deselectedSources=' ) ,
20962077 ) ;
20972078 await overviewPage . sourceRow ( 'Bank Loan' ) . click ( ) ;
20982079 await refetchPromise ;
@@ -2179,8 +2160,7 @@ test.describe('Dark mode: badge color smoke check', { tag: '@responsive' }, () =
21792160
21802161 const refetchPromise = page . waitForResponse (
21812162 ( resp ) =>
2182- resp . url ( ) . includes ( '/api/budget/breakdown' ) &&
2183- resp . url ( ) . includes ( 'deselectedSources=' ) ,
2163+ resp . url ( ) . includes ( '/api/budget/breakdown' ) && resp . url ( ) . includes ( 'deselectedSources=' ) ,
21842164 ) ;
21852165 await row . click ( ) ;
21862166 await expect ( row ) . toHaveAttribute ( 'aria-pressed' , 'false' ) ;
0 commit comments