diff --git a/app/assets/stylesheets/application.scss b/app/assets/stylesheets/application.scss index d403b16d5..c24594d38 100644 --- a/app/assets/stylesheets/application.scss +++ b/app/assets/stylesheets/application.scss @@ -23,6 +23,7 @@ $govuk-page-width: 1140px; @import 'govuk_publishing_components/components/lead-paragraph'; @import 'govuk_publishing_components/components/notice'; @import 'govuk_publishing_components/components/previous-and-next-navigation'; +@import 'govuk_publishing_components/components/radio'; @import 'govuk_publishing_components/components/search'; @import 'govuk_publishing_components/components/secondary-navigation'; @import 'govuk_publishing_components/components/select'; diff --git a/app/controllers/artefacts_controller.rb b/app/controllers/artefacts_controller.rb index f4ca8f26f..b022dc5ad 100644 --- a/app/controllers/artefacts_controller.rb +++ b/app/controllers/artefacts_controller.rb @@ -18,10 +18,11 @@ def update artefact = Artefact.find(updatable_params[:id]) if artefact.update_as(current_user, updatable_params) UpdateWorker.perform_async(artefact.latest_edition_id) - flash[:notice] = "Metadata updated" + show_success_message else flash[:danger] = artefact.errors.full_messages.join("\n") end + redirect_to metadata_artefact_path(artefact) end @@ -29,6 +30,14 @@ def update private + def show_success_message + if Flipflop.enabled?("design_system_edit".to_sym) + flash[:success] = "Metadata has successfully updated".html_safe + else + flash[:notice] = "Metadata updated" + end + end + def formats Artefact::FORMATS_BY_DEFAULT_OWNING_APP["publisher"] - Artefact::RETIRED_FORMATS end diff --git a/app/controllers/editions_controller.rb b/app/controllers/editions_controller.rb index ddbb55dd5..4aedee99c 100644 --- a/app/controllers/editions_controller.rb +++ b/app/controllers/editions_controller.rb @@ -1,25 +1,24 @@ -require "edition_duplicator" -require "edition_progressor" - class EditionsController < InheritedResources::Base + include TabbedNavHelper layout "design_system" defaults resource_class: Edition, collection_name: "editions", instance_name: "resource" before_action :setup_view_paths, except: %i[index] + helper_method :locale_to_language + def index redirect_to root_path end def show @artefact = @resource.artefact - render action: "show" - end - def metadata render action: "show" end + alias_method :metadata, :show + def history render action: "show" end @@ -48,4 +47,15 @@ def setup_view_paths_for(publication) prepend_view_path "app/views/editions" prepend_view_path template_folder_for(publication) end + + def locale_to_language(locale) + case locale + when "en" + "English" + when "cy" + "Welsh" + else + "" + end + end end diff --git a/app/helpers/tabbed_nav_helper.rb b/app/helpers/tabbed_nav_helper.rb index e733afd7d..13d95b6e8 100644 --- a/app/helpers/tabbed_nav_helper.rb +++ b/app/helpers/tabbed_nav_helper.rb @@ -1,9 +1,8 @@ module TabbedNavHelper def edition_nav_items(edition) nav_items = [] - items = %w[edit tagging metadata history admin related_external_links unpublish] - items.each do |item| + all_tab_names.each do |item| nav_items << standard_nav_items(item, edition) end @@ -29,4 +28,15 @@ def edit_nav_item(label, href, current) }, ] end + + def current_tab_name + current_tab = (request.path.split("/") & all_tab_names).first + current_tab == "metadata" ? "metadata" : "temp_nav_text" + end + +private + + def all_tab_names + %w[edit tagging metadata history admin related_external_links unpublish] + end end diff --git a/app/views/editions/secondary_nav_tabs/_metadata.html.erb b/app/views/editions/secondary_nav_tabs/_metadata.html.erb new file mode 100644 index 000000000..608688bc2 --- /dev/null +++ b/app/views/editions/secondary_nav_tabs/_metadata.html.erb @@ -0,0 +1,57 @@ +<%= render "govuk_publishing_components/components/heading", { + text: "Metadata", + heading_level: 2, + margin_bottom: 5, +} %> + +<% if Edition::PUBLISHING_API_DRAFT_STATES.include? publication.state %> + <%= form_for(@artefact, :html => { :class => "artefact", :id => "edit_artefact" }) do |f| %> + <%= f.hidden_field :id, value: @artefact.id %> + + <%= render "govuk_publishing_components/components/input", { + label: { + text: "Slug", + }, + hint: "If you change the slug of a published page, the old slug will automatically redirect to the new one.", + name: "artefact[slug]", + value: publication.slug, + heading_level: 3, + heading_size: "m", + } %> + + <%= render "govuk_publishing_components/components/radio", { + heading: "Language", + name: "artefact[language]", + heading_level: 3, + heading_size: "m", + inline: true, + items: [ + { + value: "en", + text: "English", + checked: publication.artefact.language == "en" ? true : false, + }, + { + value: "cy", + text: "Welsh", + checked: publication.artefact.language == "cy" ? true : false, + }, + ], + } %> + <%= render "govuk_publishing_components/components/button", { + text: "Update", + } %> + <% end %> +<% else %> + <% @artefact.attributes.slice("slug", "language").each do |key, value| %> + <%= render "govuk_publishing_components/components/heading", { + text: key.humanize, + heading_level: 3, + font_size: "m", + margin_bottom: 3, + } %> +

+ <%= key.eql?("slug") ? value : locale_to_language(value) %> +

+ <% end %> +<% end %> diff --git a/app/views/editions/secondary_nav_tabs/_temp_nav_text.html.erb b/app/views/editions/secondary_nav_tabs/_temp_nav_text.html.erb new file mode 100644 index 000000000..58e0b9c8a --- /dev/null +++ b/app/views/editions/secondary_nav_tabs/_temp_nav_text.html.erb @@ -0,0 +1 @@ +

Work in progress

diff --git a/app/views/editions/show.html.erb b/app/views/editions/show.html.erb index 2f0c0fedb..3335165bc 100644 --- a/app/views/editions/show.html.erb +++ b/app/views/editions/show.html.erb @@ -26,4 +26,8 @@
<%= render partial: "secondary_navigation" %>
+ +
+ <%= render partial: "secondary_nav_tabs/#{current_tab_name}", :locals => { :publication => @resource } %> +
diff --git a/test/functional/editions_controller_test.rb b/test/functional/editions_controller_test.rb index 6fee5ee07..1f60e6fe8 100644 --- a/test/functional/editions_controller_test.rb +++ b/test/functional/editions_controller_test.rb @@ -26,14 +26,14 @@ class EditionsControllerTest < ActionController::TestCase context "#show" do setup do - artefact2 = FactoryBot.create( + artefact = FactoryBot.create( :artefact, slug: "test2", kind: "guide", name: "test", owning_app: "publisher", ) - @guide = GuideEdition.create!(title: "test", slug: "test2", panopticon_id: artefact2.id) + @guide = GuideEdition.create!(title: "test", slug: "test2", panopticon_id: artefact.id) end should "requesting a publication that doesn't exist returns a 404" do @@ -47,4 +47,21 @@ class EditionsControllerTest < ActionController::TestCase assert_not_nil assigns(:resource) end end + + context "#metadata" do + setup do + artefact = FactoryBot.create( + :artefact, + slug: "test2", + kind: "guide", + name: "test", + owning_app: "publisher", + ) + @guide = GuideEdition.create!(title: "test", slug: "test2", panopticon_id: artefact.id) + end + + should "alias to show method" do + assert_equal EditionsController.new.method(:metadata).super_method.name, :show + end + end end diff --git a/test/integration/edit_artefact_test.rb b/test/integration/edit_artefact_test.rb index 4ead24b8c..b6a270241 100644 --- a/test/integration/edit_artefact_test.rb +++ b/test/integration/edit_artefact_test.rb @@ -5,6 +5,8 @@ class EditArtefactTest < LegacyIntegrationTest setup_users stub_linkables stub_holidays_used_by_fact_check + test_strategy = Flipflop::FeatureSet.current.test! + test_strategy.switch!(:design_system_edit, false) end should "edit a draft artefact" do diff --git a/test/integration/edition_edit_test.rb b/test/integration/edition_edit_test.rb index ee5a529dc..0d06654f2 100644 --- a/test/integration/edition_edit_test.rb +++ b/test/integration/edition_edit_test.rb @@ -8,31 +8,90 @@ class EditionEditTest < IntegrationTest stub_linkables end - should "show document summary and title" do - edition = FactoryBot.create(:guide_edition, title: "Edit page title", state: "draft") - visit edition_path(edition) - - assert page.has_title?("Edit page title") - - row = find_all(".govuk-summary-list__row") - assert row[0].has_content?("Assigned to") - assert row[1].has_text?("Content type") - assert row[1].has_text?("Guide") - assert row[2].has_text?("Edition") - assert row[2].has_text?("1") - assert row[2].has_text?("Draft") + context "when edition is draft" do + setup do + edition = FactoryBot.create(:guide_edition, title: "Edit page title", state: "draft") + visit edition_path(edition) + end + + should "show document summary and title" do + assert page.has_title?("Edit page title") + + row = find_all(".govuk-summary-list__row") + assert row[0].has_content?("Assigned to") + assert row[1].has_text?("Content type") + assert row[1].has_text?("Guide") + assert row[2].has_text?("Edition") + assert row[2].has_text?("1") + assert row[2].has_text?("Draft") + end + + should "show all the tabs for the edit" do + assert page.has_text?("Edit") + assert page.has_text?("Tagging") + assert page.has_text?("Metadata") + assert page.has_text?("History and notes") + assert page.has_text?("Admin") + assert page.has_text?("Related external links") + assert page.has_text?("Unpublish") + end + + context "metadata tab" do + setup do + click_link("Metadata") + end + + should "show 'Metadata' header and an update button" do + within :css, ".gem-c-heading" do + assert page.has_text?("Metadata") + end + assert page.has_button?("Update") + end + + should "show slug input box prefilled" do + assert page.has_text?("Slug") + assert page.has_text?("If you change the slug of a published page, the old slug will automatically redirect to the new one.") + assert page.has_field?("artefact[slug]", with: /slug/) + end + + should "update and show success message" do + fill_in "artefact[slug]", with: "changed-slug" + choose("Welsh") + click_button("Update") + + assert find(".gem-c-radio input[value='cy']").checked? + assert page.has_text?("Metadata has successfully updated") + assert page.has_field?("artefact[slug]", with: "changed-slug") + end + end end - should "show all the tabs for the edit" do - edition = FactoryBot.create(:guide_edition, title: "Edit page title", state: "draft") - visit edition_path(edition) - - assert page.has_text?("Edit") - assert page.has_text?("Tagging") - assert page.has_text?("Metadata") - assert page.has_text?("History and notes") - assert page.has_text?("Admin") - assert page.has_text?("Related external links") - assert page.has_text?("Unpublish") + context "when edition is published" do + context "metadata tab" do + setup do + edition = FactoryBot.create( + :completed_transaction_edition, + panopticon_id: FactoryBot.create( + :artefact, + slug: "can-i-get-a-driving-licence", + ).id, + state: "published", + slug: "can-i-get-a-driving-licence", + ) + + visit edition_path(edition) + click_link("Metadata") + end + + should "show un-editable current value for slug and language" do + assert page.has_no_field?("artefact[slug]") + assert page.has_no_field?("artefact[language]") + + assert page.has_text?("Slug") + assert page.has_text?(/can-i-get-a-driving-licence/) + assert page.has_text?("Language") + assert page.has_text?(/English/) + end + end end end