From be0642f751400d0937b4b5891bd8a6e8b7a53bc5 Mon Sep 17 00:00:00 2001 From: Keith Lawrence Date: Thu, 5 Sep 2024 11:23:52 +0100 Subject: [PATCH] Add TakePartController - add view and helpers - convert test suite to RSpec on move --- app/controllers/take_part_controller.rb | 7 ++++ .../machine_readable_metadata_helper.rb | 6 +++ app/helpers/title_helper.rb | 10 +++++ app/views/take_part/show.html.erb | 37 +++++++++++++++++++ config/routes.rb | 7 +++- spec/system/take_part_spec.rb | 24 ++++++++++++ 6 files changed, 90 insertions(+), 1 deletion(-) create mode 100644 app/controllers/take_part_controller.rb create mode 100644 app/helpers/machine_readable_metadata_helper.rb create mode 100644 app/helpers/title_helper.rb create mode 100644 app/views/take_part/show.html.erb create mode 100644 spec/system/take_part_spec.rb diff --git a/app/controllers/take_part_controller.rb b/app/controllers/take_part_controller.rb new file mode 100644 index 0000000000..a979431ca1 --- /dev/null +++ b/app/controllers/take_part_controller.rb @@ -0,0 +1,7 @@ +class TakePartController < ContentItemsController + helper_method :view_context + + def content_item_slug + request.path + end +end diff --git a/app/helpers/machine_readable_metadata_helper.rb b/app/helpers/machine_readable_metadata_helper.rb new file mode 100644 index 0000000000..9c35a2af1c --- /dev/null +++ b/app/helpers/machine_readable_metadata_helper.rb @@ -0,0 +1,6 @@ +module MachineReadableMetadataHelper + def machine_readable_metadata(content_item, args) + locals = { content_item: content_item.to_h }.merge(args) + render("govuk_publishing_components/components/machine_readable_metadata", locals) + end +end diff --git a/app/helpers/title_helper.rb b/app/helpers/title_helper.rb new file mode 100644 index 0000000000..5f2ebd9f34 --- /dev/null +++ b/app/helpers/title_helper.rb @@ -0,0 +1,10 @@ +module TitleHelper + def title_and_context(title, document_type, view_context) + { + title:, + context: I18n.t("content_item.schema_name.#{document_type}", count: 1), + context_locale: view_context.t_locale_fallback("content_item.schema_name.#{document_type}", count: 1), + average_title_length: "long", + } + end +end diff --git a/app/views/take_part/show.html.erb b/app/views/take_part/show.html.erb new file mode 100644 index 0000000000..d6a0b33c4f --- /dev/null +++ b/app/views/take_part/show.html.erb @@ -0,0 +1,37 @@ +<% content_for :title do %> + <%= @content_item.title %> - GOV.UK +<% end %> + +<% content_for :extra_head_content do %> + <%= machine_readable_metadata(@content_item, schema: :article) %> +<% end %> + +
+
+ <%= render 'govuk_publishing_components/components/title', title_and_context(@content_item.title, @content_item.document_type, view_context).except(:average_title_length) %> + <%= render 'govuk_publishing_components/components/lead_paragraph', text: @content_item.description %> +
+ + <%= render 'shared/translations' %> +
+ +
+
+
+ <%= render 'components/figure', + src: @content_item.image["url"], + alt: @content_item.image["alt_text"], + credit: @content_item.image["credit"], + caption: @content_item.image["caption"] if @content_item.image %> + + <%= render "govuk_publishing_components/components/govspeak", { + direction: page_text_direction + } do %> + <%= raw(@content_item.body) %> + <% end %> +
+
+ <%= render 'shared/sidebar_navigation' %> +
+ +<%= render 'shared/footer_navigation' %> diff --git a/config/routes.rb b/config/routes.rb index 413826a98f..6b6ea20d18 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -98,7 +98,12 @@ get "/media/:id/:filename/preview", to: "csv_preview#show", filename: /[^\/]+/ - get "/government/placeholder", to: "placeholder#show" + scope "/government" do + get "/placeholder", to: "placeholder#show" + scope "/get-involved" do + get "/take-part/:slug", to: "take_part#show" + end + end # route API errors to the error handler constraints ApiErrorRoutingConstraint.new do diff --git a/spec/system/take_part_spec.rb b/spec/system/take_part_spec.rb new file mode 100644 index 0000000000..f848706c1e --- /dev/null +++ b/spec/system/take_part_spec.rb @@ -0,0 +1,24 @@ +RSpec.describe "TakePart" do + before do + content_store_has_example_item("/government/get-involved/take-part/tp1", schema: :take_part) + end + + context "/government/get-involved/take-part/:slug" do + it "displays the take_part page" do + visit "/government/get-involved/take-part/tp1" + + expect(page).to have_title("Become a councillor - GOV.UK") + + expect(page).to have_css("h1", text: "Become a councillor") + expect(page).to have_text("All councils are led by democratically elected councillors who set the vision and direction, and represent their local community.") + + assert page.has_text?("There are roughly 20,000 local councillors in England. Councillors are elected to the local council to represent their own local community, so they must either live or work in the area.") + end + + it "does not display a single page notification button" do + visit "/government/get-involved/take-part/tp1" + + expect(page).not_to have_css(".gem-c-single-page-notification-button") + end + end +end