@@ -137,6 +137,14 @@ def test_renders_an_icon_filter_button
137137 assert_selector ( ".SubHeader-leftPane .Button--iconOnly .octicon-filter" )
138138 end
139139
140+ def test_filter_button_uses_invisible_scheme
141+ render_inline ( Primer ::OpenProject ::SubHeader . new ) do |component |
142+ component . with_filter_button { "Filter" }
143+ end
144+
145+ assert_selector ( ".SubHeader .Button--invisible" )
146+ end
147+
140148 def test_renders_a_custom_filter_button
141149 render_inline ( Primer ::OpenProject ::SubHeader . new ) do |component |
142150 component . with_filter_component do
@@ -229,8 +237,8 @@ def test_does_not_render_input_events_when_show_clear_button_is_not_set
229237 assert_no_selector ( ".FormControl-input-trailingAction[data-action=\" click:primer-text-field#clearContents\" ]" )
230238 end
231239
232- def test_renders_collapsed_search
233- render_inline ( Primer ::OpenProject ::SubHeader . new ( collapsed_search : true ) ) do |component |
240+ def test_renders_collapsed_search_per_default
241+ render_inline ( Primer ::OpenProject ::SubHeader . new ) do |component |
234242 component . with_filter_input ( name : "filter" , label : "Filter" )
235243 end
236244
@@ -243,7 +251,7 @@ def test_renders_collapsed_search
243251 end
244252
245253 def test_collapsed_search_trigger_visible_on_all_screen_sizes
246- render_inline ( Primer ::OpenProject ::SubHeader . new ( collapsed_search : true ) ) do |component |
254+ render_inline ( Primer ::OpenProject ::SubHeader . new ) do |component |
247255 component . with_filter_input ( name : "filter" , label : "Filter" )
248256 end
249257
@@ -252,8 +260,8 @@ def test_collapsed_search_trigger_visible_on_all_screen_sizes
252260 assert_no_selector ( "[data-action='click:sub-header#expandFilterInput'].d-md-none" )
253261 end
254262
255- def test_default_search_trigger_hidden_on_desktop
256- render_inline ( Primer ::OpenProject ::SubHeader . new ) do |component |
263+ def test_expanded_search_trigger_hidden_on_desktop
264+ render_inline ( Primer ::OpenProject ::SubHeader . new ( collapsed_search : false ) ) do |component |
257265 component . with_filter_input ( name : "filter" , label : "Filter" )
258266 end
259267
@@ -387,4 +395,29 @@ def test_sort_and_group_are_not_hidden_on_mobile_when_multiple_quick_filters
387395 assert_no_selector ( ".d-none.d-md-flex .SortFilter" )
388396 assert_no_selector ( ".d-none.d-md-flex .GroupFilter" )
389397 end
398+
399+ def test_collapsed_search_auto_enabled_when_quick_filter_present
400+ render_inline ( Primer ::OpenProject ::SubHeader . new ) do |component |
401+ component . with_filter_input ( name : "filter" , label : "Filter" )
402+ component . with_quick_filter { "<span class='MyQuickFilter'>Status</span>" . html_safe }
403+ end
404+
405+ # Filter container is hidden (collapsed_search auto-detected as true)
406+ assert_selector ( ".SubHeader-filterContainer.d-none" )
407+ assert_no_selector ( ".SubHeader-filterContainer.d-md-flex" )
408+ # Trigger is visible on all screen sizes (no d-sm-none)
409+ assert_no_selector ( "[data-action='click:sub-header#expandFilterInput'].d-md-none" )
410+ end
411+
412+ def test_explicit_collapsed_search_false_overrides_auto_collapse
413+ render_inline ( Primer ::OpenProject ::SubHeader . new ( collapsed_search : false ) ) do |component |
414+ component . with_filter_input ( name : "filter" , label : "Filter" )
415+ component . with_quick_filter { "<span class='MyQuickFilter'>Status</span>" . html_safe }
416+ end
417+
418+ # Filter container is NOT hidden despite quick_filter being present
419+ assert_selector ( ".SubHeader-filterContainer.d-md-flex" )
420+ # Trigger is mobile-only (d-sm-none) since collapsed_search is false
421+ assert_selector ( "[data-action='click:sub-header#expandFilterInput'].d-md-none" )
422+ end
390423end
0 commit comments