From a21193774401f60178c3b76b680360d800069aa9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sen=C3=A9n=20Rodero=20Rodr=C3=ADguez?= Date: Wed, 25 Nov 2020 10:59:55 +0100 Subject: [PATCH] Add SDG page to update local targets --- .../local_targets/form_component.rb | 6 +++- .../local_targets/index_component.html.erb | 1 + .../local_targets/index_component.rb | 7 +++++ .../local_targets_controller.rb | 14 +++++++++ .../local_targets/edit.html.erb | 1 + config/locales/en/sdg_management.yml | 4 +++ config/locales/es/sdg_management.yml | 4 +++ config/routes/sdg_management.rb | 2 +- .../sdg_management/local_targets_spec.rb | 29 +++++++++++++++++-- 9 files changed, 64 insertions(+), 4 deletions(-) create mode 100644 app/views/sdg_management/local_targets/edit.html.erb diff --git a/app/components/sdg_management/local_targets/form_component.rb b/app/components/sdg_management/local_targets/form_component.rb index 2d54e1ecd..933e70bd1 100644 --- a/app/components/sdg_management/local_targets/form_component.rb +++ b/app/components/sdg_management/local_targets/form_component.rb @@ -13,7 +13,11 @@ class SDGManagement::LocalTargets::FormComponent < ApplicationComponent private def title - t("sdg_management.local_targets.new.title") + if local_target.persisted? + t("sdg_management.local_targets.edit.title") + else + t("sdg_management.local_targets.new.title") + end end def form_url diff --git a/app/components/sdg_management/local_targets/index_component.html.erb b/app/components/sdg_management/local_targets/index_component.html.erb index cb6804b87..0512c531b 100644 --- a/app/components/sdg_management/local_targets/index_component.html.erb +++ b/app/components/sdg_management/local_targets/index_component.html.erb @@ -31,6 +31,7 @@ <%= local_target.title %> + <%= actions(local_target) %> <% end %> diff --git a/app/components/sdg_management/local_targets/index_component.rb b/app/components/sdg_management/local_targets/index_component.rb index 38d767b8d..44a2ea46b 100644 --- a/app/components/sdg_management/local_targets/index_component.rb +++ b/app/components/sdg_management/local_targets/index_component.rb @@ -20,4 +20,11 @@ class SDGManagement::LocalTargets::IndexComponent < ApplicationComponent def header_id(object) "#{dom_id(object)}_header" end + + def actions(local_target) + render Admin::TableActionsComponent.new( + local_target, + actions: [:edit], + edit_path: edit_sdg_management_local_target_path(local_target)) + end end diff --git a/app/controllers/sdg_management/local_targets_controller.rb b/app/controllers/sdg_management/local_targets_controller.rb index ba9e4cfe6..3d03fd812 100644 --- a/app/controllers/sdg_management/local_targets_controller.rb +++ b/app/controllers/sdg_management/local_targets_controller.rb @@ -21,6 +21,20 @@ class SDGManagement::LocalTargetsController < SDGManagement::BaseController end end + def edit + @local_target = LocalTarget.find(params[:id]) + end + + def update + @local_target = LocalTarget.find(params[:id]) + + if @local_target.update(local_target_params) + redirect_to sdg_management_local_targets_path, notice: t("sdg_management.local_targets.update.notice") + else + render :edit + end + end + private def local_target_params diff --git a/app/views/sdg_management/local_targets/edit.html.erb b/app/views/sdg_management/local_targets/edit.html.erb new file mode 100644 index 000000000..07818dd63 --- /dev/null +++ b/app/views/sdg_management/local_targets/edit.html.erb @@ -0,0 +1 @@ +<%= render SDGManagement::LocalTargets::FormComponent.new(@local_target) %> diff --git a/config/locales/en/sdg_management.yml b/config/locales/en/sdg_management.yml index 8652a0b07..f5b4ae58a 100644 --- a/config/locales/en/sdg_management.yml +++ b/config/locales/en/sdg_management.yml @@ -7,6 +7,8 @@ en: local_targets: create: notice: "Local target created successfully" + edit: + title: "Edit local target" form: code: "Code must start with the selected target code followed by a dot" description: "This description will be shown as help to users." @@ -14,3 +16,5 @@ en: new: "Create local target" new: title: "New local target" + update: + notice: "Local target updated successfully" diff --git a/config/locales/es/sdg_management.yml b/config/locales/es/sdg_management.yml index a26748835..7fa86f5bf 100644 --- a/config/locales/es/sdg_management.yml +++ b/config/locales/es/sdg_management.yml @@ -7,6 +7,8 @@ es: local_targets: create: notice: "Meta localizada creada correctamente" + edit: + title: "Editar meta localizada" form: code: "El código debe comenzar por el código de la meta seleccionada seguida de un '.'" description: "Este texto ser mostrará como ayuda para los usuarios." @@ -14,3 +16,5 @@ es: new: "Crear meta localizada" new: title: "Nueva meta localizada" + update: + notice: "Meta localizada asctualizada correctamente" diff --git a/config/routes/sdg_management.rb b/config/routes/sdg_management.rb index 5ca450cf3..0aa11ab32 100644 --- a/config/routes/sdg_management.rb +++ b/config/routes/sdg_management.rb @@ -3,5 +3,5 @@ namespace :sdg_management do resources :goals, only: [:index] resources :targets, only: [:index] - resources :local_targets, only: [:index, :new, :create] + resources :local_targets, only: [:index, :new, :create, :edit, :update] end diff --git a/spec/system/sdg_management/local_targets_spec.rb b/spec/system/sdg_management/local_targets_spec.rb index 61f042552..5430ed721 100644 --- a/spec/system/sdg_management/local_targets_spec.rb +++ b/spec/system/sdg_management/local_targets_spec.rb @@ -14,8 +14,10 @@ describe "Local Targets", :js do click_link "Local Targets" expect(page).to have_title "SDG content - Local Targets" - within("table") { expect(page).to have_content "Affordable food for everyone" } - expect(page).to have_link "Create local target", href: new_sdg_management_local_target_path + within("table tr", text: "Affordable food") do + expect(page).to have_link "Edit" + end + expect(page).to have_link "Create local target" end scenario "Show local targets grouped by target" do @@ -59,4 +61,27 @@ describe "Local Targets", :js do expect(page).to have_select("Target", selected: code_and_title) end end + + describe "Update" do + let!(:local_target) { create(:sdg_local_target, code: "1.1.1") } + + scenario "Shows succesful notice when form is fullfilled correctly" do + visit edit_sdg_management_local_target_path(local_target) + + fill_in "Title", with: "Local target title update" + click_button "Update local target" + + expect(page).to have_content("Local target updated successfully") + expect(page).to have_content("Local target title update") + end + + scenario "Shows form errors when changes are not valid" do + visit edit_sdg_management_local_target_path(local_target) + + fill_in "Title", with: "" + click_button "Update local target" + + expect(page).to have_content("1 error prevented this local target from being saved.") + end + end end