From 73a64a43a73cea1a7e7010729ee51cc356ad4ac6 Mon Sep 17 00:00:00 2001 From: Keith Lawrence Date: Wed, 3 Jul 2024 09:40:48 +0100 Subject: [PATCH] Add system spec replacement for slimmer tests - These tests were previously controller tests that worked by looking for Slimmer header presence. We can't do that in request tests, so we recast as system tests and actually provide the layout elements that slimmer tinkers with to control how search items appear on the final page. This isn't an ideal way to do this, because it requires a bit more knowledge of how slimmer works than you'd hope. If the layouts that are actually used no longer have the #global-header #search and form#search# elements, this test won't catch that they're gone. But that's a wider issue with slimmer/static. --- spec/support/slimmer_templates/wrapper.html | 26 ++++++++++++++ spec/system/service_manual_spec.rb | 38 +++++++++------------ 2 files changed, 43 insertions(+), 21 deletions(-) create mode 100644 spec/support/slimmer_templates/wrapper.html diff --git a/spec/support/slimmer_templates/wrapper.html b/spec/support/slimmer_templates/wrapper.html new file mode 100644 index 0000000000..c0844d8a2b --- /dev/null +++ b/spec/support/slimmer_templates/wrapper.html @@ -0,0 +1,26 @@ + + + Test Template + + + +
Hello!
+ + + + + +
+ + + + \ No newline at end of file diff --git a/spec/system/service_manual_spec.rb b/spec/system/service_manual_spec.rb index 8a16c30f09..4f8ad9f8b6 100644 --- a/spec/system/service_manual_spec.rb +++ b/spec/system/service_manual_spec.rb @@ -1,31 +1,27 @@ +# WARNING: This test won't catch if the actual layouts change in static. It's +# only testing whether we're correctly telling slimmer to process the search +# elements, and slimmer is trying to process the layouts in the way we expect. RSpec.describe("Service Manual", type: :system) do let!(:content_item) { content_store_has_schema_example("service_manual_guide", "service_manual_guide") } let!(:path) { "/#{path_for(content_item)}" } - it "has a search form scoped to the manual" do - visit path - - expect(page).to have_css("input") + before do + html = File.read(Rails.root.join("spec/support/slimmer_templates/wrapper.html")) + allow_any_instance_of(Slimmer::Skin).to receive(:load_template).and_return(html) end - # it "tells slimmer to scope search results to the manual for a service manual guide" do - # content_item = content_store_has_schema_example("service_manual_guide", "service_manual_guide") - - # expect(Slimmer::Processors::SearchParameterInserter).to receive(:new).with(hash_including: { - # Slimmer::Headers::SEARCH_PARAMETERS_HEADER => { filter_manual: "/service-manual" }.to_json, - # }) - # get "/#{path_for(content_item)}" + it "has a search form scoped to the manual" do + content_item = content_store_has_schema_example("service_manual_guide", "service_manual_guide") + visit "/#{path_for(content_item)}" - # # byebug - # # expect(response.body).to have_css("input") - # # assert_select("input[type='hidden'][name='filter_manual'][values='/service-manual']") - # # expect(response.headers[Slimmer::Headers::SEARCH_PARAMETERS_HEADER]).to eq({ filter_manual: "/service-manual" }.to_json) - # end + expect(page).to have_css("#global-header #search") + expect(page).to have_css("form#search input[type=hidden][name=filter_manual][value='/service-manual']", visible: false) + end - # it("tells slimmer not to include a search box in the header for the service manual homepage") do - # content_item = content_store_has_schema_example("service_manual_homepage", "service_manual_homepage") - # get "/#{path_for(content_item)}" + it "does not show a search box for the manual homepage" do + content_item = content_store_has_schema_example("service_manual_homepage", "service_manual_homepage") + visit "/#{path_for(content_item)}" - # expect(response.headers[Slimmer::Headers::REMOVE_SEARCH_HEADER]).to be true - # end + expect(page).not_to have_css("#global-header #search") + end end