@@ -45,20 +45,20 @@ test.describe("[command-palette] presets and actions", () => {
4545 test ( "shows contextual empty message for has-vulnerabilities preset" , async ( { page } ) => {
4646 await page . locator ( ".range-preset" ) . filter ( { hasText : i18n . preset_has_vulnerabilities } ) . click ( ) ;
4747
48- await expect ( page . locator ( ".empty-state" ) ) . toHaveText ( i18n . preset_empty_has_vulnerabilities ) ;
48+ await expect ( page . locator ( ".dialog . empty-state" ) ) . toHaveText ( i18n . preset_empty_has_vulnerabilities ) ;
4949 } ) ;
5050
5151 test ( "shows contextual empty message for deprecated preset" , async ( { page } ) => {
5252 await page . locator ( ".range-preset" ) . filter ( { hasText : i18n . preset_deprecated } ) . click ( ) ;
5353
54- await expect ( page . locator ( ".empty-state" ) ) . toHaveText ( i18n . preset_empty_deprecated ) ;
54+ await expect ( page . locator ( ".dialog . empty-state" ) ) . toHaveText ( i18n . preset_empty_deprecated ) ;
5555 } ) ;
5656
5757 test ( "shows generic empty message when a manual filter yields no results" , async ( { page } ) => {
5858 await page . locator ( "#cmd-input" ) . fill ( "flag:hasBannedFile" ) ;
5959 await page . keyboard . press ( "Enter" ) ;
6060
61- await expect ( page . locator ( ".empty-state" ) ) . toHaveText ( i18n . empty_after_filter ) ;
61+ await expect ( page . locator ( ".dialog . empty-state" ) ) . toHaveText ( i18n . empty_after_filter ) ;
6262 } ) ;
6363
6464 test ( "clicking the theme action closes the palette and toggles the theme" , async ( { page } ) => {
@@ -90,3 +90,110 @@ test.describe("[command-palette] presets and actions", () => {
9090 await expect ( page . locator ( ".backdrop" ) ) . not . toBeVisible ( ) ;
9191 } ) ;
9292} ) ;
93+
94+ test . describe ( "[command-palette] ignore flags and warnings" , ( ) => {
95+ let i18n ;
96+
97+ test . beforeEach ( async ( { page } ) => {
98+ await page . goto ( "/" ) ;
99+ await page . waitForSelector ( `[data-menu="network--view"].active` ) ;
100+
101+ i18n = await page . evaluate ( ( ) => {
102+ const lang = document . getElementById ( "lang" ) . dataset . lang ;
103+ const activeLang = lang in window . i18n ? lang : "english" ;
104+
105+ return window . i18n [ activeLang ] . search_command ;
106+ } ) ;
107+
108+ await page . locator ( "body" ) . click ( ) ;
109+ await page . keyboard . press ( "Control+k" ) ;
110+
111+ await expect ( page . locator ( ".backdrop" ) ) . toBeVisible ( ) ;
112+ } ) ;
113+
114+ test ( "renders the ignore flags section" , async ( { page } ) => {
115+ await expect ( page . locator ( ".section" ) . filter ( { hasText : i18n . section_ignore_flags } ) ) . toBeVisible ( ) ;
116+ } ) ;
117+
118+ test ( "renders the ignore warnings section" , async ( { page } ) => {
119+ await expect ( page . locator ( ".section" ) . filter ( { hasText : i18n . section_ignore_warnings } ) ) . toBeVisible ( ) ;
120+ } ) ;
121+
122+ test ( "renders all six ignorable flag chips" , async ( { page } ) => {
123+ const ignoreFlagsSection = page . locator ( ".section" ) . filter ( { hasText : i18n . section_ignore_flags } ) ;
124+
125+ await expect ( ignoreFlagsSection . locator ( ".flag-chip" ) ) . toHaveCount ( 6 ) ;
126+ } ) ;
127+
128+ test ( "renders at least one warning chip" , async ( { page } ) => {
129+ const ignoreWarningsSection = page . locator ( ".section" ) . filter ( { hasText : i18n . section_ignore_warnings } ) ;
130+
131+ expect ( await ignoreWarningsSection . locator ( ".flag-chip" ) . count ( ) ) . toBeGreaterThan ( 0 ) ;
132+ } ) ;
133+
134+ test ( "clicking a flag chip marks it as ignored" , async ( { page } ) => {
135+ const ignoreFlagsSection = page . locator ( ".section" ) . filter ( { hasText : i18n . section_ignore_flags } ) ;
136+ const chip = ignoreFlagsSection . locator ( ".flag-chip[title='isOutdated']" ) ;
137+
138+ const isInitiallyIgnored = await page . evaluate (
139+ ( ) => window . settings . config . ignore . flags . has ( "isOutdated" )
140+ ) ;
141+ if ( isInitiallyIgnored ) {
142+ await chip . click ( ) ;
143+ await expect ( chip ) . not . toContainClass ( "flag-active" ) ;
144+ }
145+
146+ await chip . click ( ) ;
147+
148+ await expect ( chip ) . toContainClass ( "flag-active" ) ;
149+ const ignoredFlags = await page . evaluate ( ( ) => [ ...window . settings . config . ignore . flags ] ) ;
150+ expect ( ignoredFlags ) . toContain ( "isOutdated" ) ;
151+ } ) ;
152+
153+ test ( "clicking an active flag chip removes it from ignored" , async ( { page } ) => {
154+ const ignoreFlagsSection = page . locator ( ".section" ) . filter ( { hasText : i18n . section_ignore_flags } ) ;
155+ const chip = ignoreFlagsSection . locator ( ".flag-chip[title='isOutdated']" ) ;
156+
157+ const isInitiallyIgnored = await page . evaluate (
158+ ( ) => window . settings . config . ignore . flags . has ( "isOutdated" )
159+ ) ;
160+ if ( ! isInitiallyIgnored ) {
161+ await chip . click ( ) ;
162+ await expect ( chip ) . toContainClass ( "flag-active" ) ;
163+ }
164+
165+ await chip . click ( ) ;
166+
167+ await expect ( chip ) . not . toContainClass ( "flag-active" ) ;
168+ const ignoredFlags = await page . evaluate ( ( ) => [ ...window . settings . config . ignore . flags ] ) ;
169+ expect ( ignoredFlags ) . not . toContain ( "isOutdated" ) ;
170+ } ) ;
171+
172+ test ( "clicking a warning chip marks it as ignored" , async ( { page } ) => {
173+ const ignoreWarningsSection = page . locator ( ".section" ) . filter ( { hasText : i18n . section_ignore_warnings } ) ;
174+ const chip = ignoreWarningsSection . locator ( ".flag-chip" ) . first ( ) ;
175+ const warningValue = await chip . getAttribute ( "title" ) ;
176+
177+ const isInitiallyIgnored = await page . evaluate (
178+ ( id ) => window . settings . config . ignore . warnings . has ( id ) ,
179+ warningValue
180+ ) ;
181+ if ( isInitiallyIgnored ) {
182+ await chip . click ( ) ;
183+ await expect ( chip ) . not . toContainClass ( "flag-active" ) ;
184+ }
185+
186+ await chip . click ( ) ;
187+
188+ await expect ( chip ) . toContainClass ( "flag-active" ) ;
189+ const ignoredWarnings = await page . evaluate ( ( ) => [ ...window . settings . config . ignore . warnings ] ) ;
190+ expect ( ignoredWarnings ) . toContain ( warningValue ) ;
191+ } ) ;
192+
193+ test ( "ignore sections are hidden when a filter is active" , async ( { page } ) => {
194+ await page . locator ( "#cmd-input" ) . fill ( "flag:" ) ;
195+
196+ await expect ( page . locator ( ".section" ) . filter ( { hasText : i18n . section_ignore_flags } ) ) . not . toBeVisible ( ) ;
197+ await expect ( page . locator ( ".section" ) . filter ( { hasText : i18n . section_ignore_warnings } ) ) . not . toBeVisible ( ) ;
198+ } ) ;
199+ } ) ;
0 commit comments