diff --git a/app/assets/stylesheets/sdg/related_list_selector.scss b/app/assets/stylesheets/sdg/related_list_selector.scss index a60cd57cf..75fb5c433 100644 --- a/app/assets/stylesheets/sdg/related_list_selector.scss +++ b/app/assets/stylesheets/sdg/related_list_selector.scss @@ -1,4 +1,6 @@ .sdg-related-list-selector { + @include grid-column-gutter; + clear: both; .amsify-suggestags-area .amsify-select-tag { color: $white; diff --git a/app/assets/stylesheets/sdg_management/relations/edit.scss b/app/assets/stylesheets/sdg_management/relations/edit.scss new file mode 100644 index 000000000..a719b4336 --- /dev/null +++ b/app/assets/stylesheets/sdg_management/relations/edit.scss @@ -0,0 +1,6 @@ +.sdg-relations-edit { + + .sdg-related-list-selector { + padding: 0; + } +} diff --git a/app/components/sdg/related_list_selector_component.rb b/app/components/sdg/related_list_selector_component.rb index 42584fdad..b183765de 100644 --- a/app/components/sdg/related_list_selector_component.rb +++ b/app/components/sdg/related_list_selector_component.rb @@ -28,6 +28,10 @@ class SDG::RelatedListSelectorComponent < ApplicationComponent } end + def render? + SDG::ProcessEnabled.new(f.object).enabled? + end + private def goals diff --git a/app/components/sdg_management/relations/edit_component.html.erb b/app/components/sdg_management/relations/edit_component.html.erb index 3cb8350f4..de0b351d1 100644 --- a/app/components/sdg_management/relations/edit_component.html.erb +++ b/app/components/sdg_management/relations/edit_component.html.erb @@ -1,6 +1,6 @@ <%= header %> -<%= form_for record, url: update_path do |f| %> +<%= form_for record, url: update_path, html: { class: "sdg-relations-edit" } do |f| %> <%= render SDG::RelatedListSelectorComponent.new(f) %> <%= f.submit %> diff --git a/app/controllers/admin/legislation/processes_controller.rb b/app/controllers/admin/legislation/processes_controller.rb index 6f9f5c1c2..46144207d 100644 --- a/app/controllers/admin/legislation/processes_controller.rb +++ b/app/controllers/admin/legislation/processes_controller.rb @@ -69,6 +69,7 @@ class Admin::Legislation::ProcessesController < Admin::Legislation::BaseControll :custom_list, :background_color, :font_color, + :sdg_related_list, translation_params(::Legislation::Process), documents_attributes: [:id, :title, :attachment, :cached_attachment, :user_id, :_destroy], image_attributes: image_attributes diff --git a/app/controllers/admin/poll/polls_controller.rb b/app/controllers/admin/poll/polls_controller.rb index 75fae91ff..8bf2b75f7 100644 --- a/app/controllers/admin/poll/polls_controller.rb +++ b/app/controllers/admin/poll/polls_controller.rb @@ -76,7 +76,7 @@ class Admin::Poll::PollsController < Admin::Poll::BaseController end def poll_params - attributes = [:name, :starts_at, :ends_at, :geozone_restricted, :budget_id, + attributes = [:name, :starts_at, :ends_at, :geozone_restricted, :budget_id, :sdg_related_list, geozone_ids: [], image_attributes: image_attributes] params.require(:poll).permit(*attributes, *report_attributes, translation_params(Poll)) diff --git a/app/controllers/budgets/investments_controller.rb b/app/controllers/budgets/investments_controller.rb index f3e41f3ae..a876af8f6 100644 --- a/app/controllers/budgets/investments_controller.rb +++ b/app/controllers/budgets/investments_controller.rb @@ -132,8 +132,8 @@ module Budgets end def investment_params - attributes = [:heading_id, :tag_list, - :organization_name, :location, :terms_of_service, :skip_map, + attributes = [:heading_id, :tag_list, :organization_name, :location, + :terms_of_service, :skip_map, :sdg_related_list, image_attributes: image_attributes, documents_attributes: [:id, :title, :attachment, :cached_attachment, :user_id, :_destroy], map_location_attributes: [:latitude, :longitude, :zoom]] diff --git a/app/controllers/debates_controller.rb b/app/controllers/debates_controller.rb index a4898e5c4..89ef3d725 100644 --- a/app/controllers/debates_controller.rb +++ b/app/controllers/debates_controller.rb @@ -55,7 +55,7 @@ class DebatesController < ApplicationController private def debate_params - attributes = [:tag_list, :terms_of_service] + attributes = [:tag_list, :terms_of_service, :sdg_related_list] params.require(:debate).permit(attributes, translation_params(Debate)) end diff --git a/app/controllers/proposals_controller.rb b/app/controllers/proposals_controller.rb index 6f2d7e10b..544a939cc 100644 --- a/app/controllers/proposals_controller.rb +++ b/app/controllers/proposals_controller.rb @@ -98,8 +98,8 @@ class ProposalsController < ApplicationController private def proposal_params - attributes = [:video_url, :responsible_name, :tag_list, - :terms_of_service, :geozone_id, :skip_map, + attributes = [:video_url, :responsible_name, :tag_list, :terms_of_service, + :geozone_id, :skip_map, :sdg_related_list, image_attributes: image_attributes, documents_attributes: [:id, :title, :attachment, :cached_attachment, :user_id, :_destroy], diff --git a/app/views/admin/legislation/processes/_form.html.erb b/app/views/admin/legislation/processes/_form.html.erb index 267414ee9..b5ad0b23a 100644 --- a/app/views/admin/legislation/processes/_form.html.erb +++ b/app/views/admin/legislation/processes/_form.html.erb @@ -190,6 +190,10 @@ <% end %> +
+ <%= render SDG::RelatedListSelectorComponent.new(f) %> +
+
<%= f.submit(class: "button success expanded", value: t("admin.legislation.processes.#{admin_submit_action(@process)}.submit_button")) %> diff --git a/app/views/admin/legislation/processes/index.html.erb b/app/views/admin/legislation/processes/index.html.erb index 159f553c7..c32ce9d6d 100644 --- a/app/views/admin/legislation/processes/index.html.erb +++ b/app/views/admin/legislation/processes/index.html.erb @@ -20,6 +20,8 @@ <%= t("admin.legislation.processes.process.start_date") %> <%= t("admin.legislation.processes.process.end_date") %> <%= t("admin.legislation.processes.process.comments") %> + <%= SDG::Goal.model_name.human(count: :other).upcase_first %> + <%= SDG::Target.model_name.human(count: :other).upcase_first %> <%= t("admin.actions.actions") %> @@ -32,6 +34,8 @@ <%= I18n.l process.start_date %> <%= I18n.l process.end_date %> <%= process.total_comments %> + <%= process.sdg_goal_list %> + <%= process.sdg_target_list %> <%= render Admin::TableActionsComponent.new(process) %> <% end %> diff --git a/app/views/admin/poll/polls/_form.html.erb b/app/views/admin/poll/polls/_form.html.erb index 4011ab4ec..cb542612d 100644 --- a/app/views/admin/poll/polls/_form.html.erb +++ b/app/views/admin/poll/polls/_form.html.erb @@ -55,6 +55,10 @@
+
+ <%= render SDG::RelatedListSelectorComponent.new(f) %> +
+
diff --git a/app/views/admin/poll/polls/_poll.html.erb b/app/views/admin/poll/polls/_poll.html.erb index e367d7708..eb77fdd4f 100644 --- a/app/views/admin/poll/polls/_poll.html.erb +++ b/app/views/admin/poll/polls/_poll.html.erb @@ -1,13 +1,9 @@ - - <%= poll.name %> - - - <%= l poll.starts_at.to_date %> - - - <%= l poll.ends_at.to_date %> - + <%= poll.name %> + <%= l poll.starts_at.to_date %> + <%= l poll.ends_at.to_date %> + <%= poll.sdg_goal_list %> + <%= poll.sdg_target_list %> <%= render Admin::TableActionsComponent.new(poll, destroy_confirmation: t("admin.polls.destroy.alert") diff --git a/app/views/admin/poll/polls/index.html.erb b/app/views/admin/poll/polls/index.html.erb index b305a7b73..2d55a37f9 100644 --- a/app/views/admin/poll/polls/index.html.erb +++ b/app/views/admin/poll/polls/index.html.erb @@ -14,6 +14,8 @@ <%= t("admin.polls.index.name") %> <%= t("admin.polls.index.start_date") %> <%= t("admin.polls.index.closing_date") %> + <%= SDG::Goal.model_name.human(count: :other).upcase_first %> + <%= SDG::Target.model_name.human(count: :other).upcase_first %> <%= t("admin.actions.actions") %> diff --git a/app/views/budgets/investments/_form.html.erb b/app/views/budgets/investments/_form.html.erb index 3eff59f72..2156b9d60 100644 --- a/app/views/budgets/investments/_form.html.erb +++ b/app/views/budgets/investments/_form.html.erb @@ -86,6 +86,8 @@ data: { js_url: suggest_tags_path } %>
+ <%= render SDG::RelatedListSelectorComponent.new(f) %> + <% unless current_user.manager? %>
diff --git a/app/views/debates/_form.html.erb b/app/views/debates/_form.html.erb index 155bb7da5..ac9a0f84a 100644 --- a/app/views/debates/_form.html.erb +++ b/app/views/debates/_form.html.erb @@ -32,6 +32,9 @@ data: { js_url: suggest_tags_path }, class: "tag-autocomplete" %>
+ + <%= render SDG::RelatedListSelectorComponent.new(f) %> +
<% if @debate.new_record? %> <%= f.check_box :terms_of_service, diff --git a/app/views/proposals/_form.html.erb b/app/views/proposals/_form.html.erb index eba35f60d..60cc80f84 100644 --- a/app/views/proposals/_form.html.erb +++ b/app/views/proposals/_form.html.erb @@ -93,6 +93,8 @@
<% end %> + <%= render SDG::RelatedListSelectorComponent.new(f) %> +
<% if @proposal.new_record? %> <%= f.check_box :terms_of_service, diff --git a/spec/components/sdg/related_list_selector_component_spec.rb b/spec/components/sdg/related_list_selector_component_spec.rb index ca0db193e..7326400e0 100644 --- a/spec/components/sdg/related_list_selector_component_spec.rb +++ b/spec/components/sdg/related_list_selector_component_spec.rb @@ -5,6 +5,27 @@ describe SDG::RelatedListSelectorComponent, type: :component do let(:form) { ConsulFormBuilder.new(:debate, debate, ActionView::Base.new, {}) } let(:component) { SDG::RelatedListSelectorComponent.new(form) } + before do + Setting["feature.sdg"] = true + Setting["sdg.process.debates"] = true + end + + it "does not render when the feature is disabled" do + Setting["feature.sdg"] = false + + render_inline component + + expect(page).not_to have_css ".sdg-related-list-selector" + end + + it "does not render when the SDG process feature is disabled" do + Setting["sdg.process.debates"] = false + + render_inline component + + expect(page).not_to have_css ".sdg-related-list-selector" + end + it "renders sdg_related_list field" do render_inline component diff --git a/spec/support/common_actions.rb b/spec/support/common_actions.rb index ab84b1500..9c9f267cc 100644 --- a/spec/support/common_actions.rb +++ b/spec/support/common_actions.rb @@ -43,4 +43,14 @@ module CommonActions allow_any_instance_of(Officing::BaseController). to receive(:current_booth).and_return(booth) end + + def click_sdg_goal(code) + find("li[data-code='#{code}']").click + end + + def remove_sdg_goal_or_target_tag(code) + within "span[data-val='#{code}']" do + click_button "Remove" + end + end end diff --git a/spec/system/admin/legislation/processes_spec.rb b/spec/system/admin/legislation/processes_spec.rb index 5e69b60b0..2c88b0140 100644 --- a/spec/system/admin/legislation/processes_spec.rb +++ b/spec/system/admin/legislation/processes_spec.rb @@ -330,4 +330,42 @@ describe "Admin collaborative legislation", :admin do expect(page).not_to have_link "Remove language" end end + + context "SDG related list" do + before do + Setting["feature.sdg"] = true + Setting["sdg.process.legislation"] = true + end + + scenario "create Collaborative Legislation with sdg related list", :js do + visit new_admin_legislation_process_path + fill_in "Process Title", with: "Legislation process with SDG related content" + within_fieldset "Process" do + fill_in "Start", with: 2.days.ago + fill_in "End", with: 1.day.from_now + end + + click_sdg_goal(17) + click_button "Create process" + visit admin_legislation_processes_path + + within("tr", text: "Legislation process with SDG related content") do + expect(page).to have_css "td", exact_text: "17" + end + end + + scenario "edit Collaborative Legislation with sdg related list", :js do + process = create(:legislation_process, title: "Legislation process with SDG related content") + process.sdg_goals = [SDG::Goal[1], SDG::Goal[17]] + visit edit_admin_legislation_process_path(process) + + remove_sdg_goal_or_target_tag(1) + click_button "Save changes" + visit admin_legislation_processes_path + + within("tr", text: "Legislation process with SDG related content") do + expect(page).to have_css "td", exact_text: "17" + end + end + end end diff --git a/spec/system/admin/poll/polls_spec.rb b/spec/system/admin/poll/polls_spec.rb index c60ade14b..5d5baf257 100644 --- a/spec/system/admin/poll/polls_spec.rb +++ b/spec/system/admin/poll/polls_spec.rb @@ -521,4 +521,42 @@ describe "Admin polls", :admin do end end end + + context "SDG related list" do + before do + Setting["feature.sdg"] = true + Setting["sdg.process.polls"] = true + end + + scenario "create poll with sdg related list", :js do + visit new_admin_poll_path + fill_in "Name", with: "Upcoming poll with SDG related content" + fill_in "Start Date", with: 1.week.from_now + fill_in "Closing Date", with: 2.weeks.from_now + fill_in "Summary", with: "Upcoming poll's summary. This poll..." + fill_in "Description", with: "Upcomming poll's description. This poll..." + + click_sdg_goal(17) + click_button "Create poll" + visit admin_polls_path + + within("tr", text: "Upcoming poll with SDG related content") do + expect(page).to have_css "td", exact_text: "17" + end + end + + scenario "edit poll with sdg related list", :js do + poll = create(:poll, name: "Upcoming poll with SDG related content") + poll.sdg_goals = [SDG::Goal[1], SDG::Goal[17]] + visit edit_admin_poll_path(poll) + + remove_sdg_goal_or_target_tag(1) + click_button "Update poll" + visit admin_polls_path + + within("tr", text: "Upcoming poll with SDG related content") do + expect(page).to have_css "td", exact_text: "17" + end + end + end end diff --git a/spec/system/budgets/investments_spec.rb b/spec/system/budgets/investments_spec.rb index 8382b7f05..10a6f7a4b 100644 --- a/spec/system/budgets/investments_spec.rb +++ b/spec/system/budgets/investments_spec.rb @@ -1933,4 +1933,41 @@ describe "Budget Investments" do end end end + + describe "SDG related list" do + before do + Setting["feature.sdg"] = true + Setting["sdg.process.budgets"] = true + budget.update!(phase: "accepting") + end + + scenario "create budget investment with sdg related list", :js do + login_as(author) + visit new_budget_investment_path(budget) + select heading.name, from: "Heading" + fill_in "Title", with: "A title for a budget investment related with SDG related content" + fill_in_ckeditor "Description", with: "I want to live in a high tower over the clouds" + click_sdg_goal(1) + check "budget_investment_terms_of_service" + + click_button "Create Investment" + + within(".sdg-goal-tag-list") { expect(page).to have_link "1. No Poverty" } + end + + scenario "edit budget investment with sdg related list", :js do + investment = create(:budget_investment, heading: heading, author: author) + investment.sdg_goals = [SDG::Goal[1], SDG::Goal[2]] + login_as(author) + visit edit_budget_investment_path(budget, investment) + + remove_sdg_goal_or_target_tag(1) + click_button "Update Investment" + + within(".sdg-goal-tag-list") do + expect(page).not_to have_link "1. No Poverty" + expect(page).to have_link "2. Zero Hunger" + end + end + end end diff --git a/spec/system/debates_spec.rb b/spec/system/debates_spec.rb index 2f97dffa3..9844c926e 100644 --- a/spec/system/debates_spec.rb +++ b/spec/system/debates_spec.rb @@ -1115,4 +1115,41 @@ describe "Debates" do expect(page).not_to have_content("Featured") end end + + describe "SDG related list" do + let(:user) { create(:user) } + + before do + Setting["feature.sdg"] = true + Setting["sdg.process.debates"] = true + end + + scenario "create debate with sdg related list", :js do + login_as(user) + visit new_debate_path + fill_in "Debate title", with: "A title for a debate related with SDG related content" + fill_in_ckeditor "Initial debate text", with: "This is very important because..." + click_sdg_goal(1) + check "debate_terms_of_service" + + click_button "Start a debate" + + within(".sdg-goal-tag-list") { expect(page).to have_link "1. No Poverty" } + end + + scenario "edit debate with sdg related list", :js do + debate = create(:debate, author: user) + debate.sdg_goals = [SDG::Goal[1], SDG::Goal[2]] + login_as(user) + visit edit_debate_path(debate) + + remove_sdg_goal_or_target_tag(1) + click_button "Save changes" + + within(".sdg-goal-tag-list") do + expect(page).not_to have_link "1. No Poverty" + expect(page).to have_link "2. Zero Hunger" + end + end + end end diff --git a/spec/system/proposals_spec.rb b/spec/system/proposals_spec.rb index b42cd0a41..4376b6d92 100644 --- a/spec/system/proposals_spec.rb +++ b/spec/system/proposals_spec.rb @@ -1907,4 +1907,42 @@ describe "Successful proposals" do expect(page).to have_content "Proposal created successfully." end end + + describe "SDG related list" do + let(:user) { create(:user) } + + before do + Setting["feature.sdg"] = true + Setting["sdg.process.proposals"] = true + end + + scenario "create proposal with sdg related list", :js do + login_as(user) + visit new_proposal_path + fill_in "Proposal title", with: "A title for a proposal related with SDG related content" + fill_in "Proposal summary", with: "In summary, what we want is..." + fill_in "proposal_responsible_name", with: "Isabel Garcia" + click_sdg_goal(1) + check "proposal_terms_of_service" + + click_button "Create proposal" + + within(".sdg-goal-tag-list") { expect(page).to have_link "1. No Poverty" } + end + + scenario "edit proposal with sdg related list", :js do + proposal = create(:proposal, author: user) + proposal.sdg_goals = [SDG::Goal[1], SDG::Goal[2]] + login_as(user) + visit edit_proposal_path(proposal) + + remove_sdg_goal_or_target_tag(1) + click_button "Save changes" + + within(".sdg-goal-tag-list") do + expect(page).not_to have_link "1. No Poverty" + expect(page).to have_link "2. Zero Hunger" + end + end + end end diff --git a/spec/system/sdg_management/relations_spec.rb b/spec/system/sdg_management/relations_spec.rb index 8f477db2b..83791a9a6 100644 --- a/spec/system/sdg_management/relations_spec.rb +++ b/spec/system/sdg_management/relations_spec.rb @@ -218,13 +218,8 @@ describe "SDG Relations", :js do visit sdg_management_edit_legislation_process_path(process) - within "span[data-val='2']" do - click_button "Remove" - end - - within "span[data-val='3.3']" do - click_button "Remove" - end + remove_sdg_goal_or_target_tag(2) + remove_sdg_goal_or_target_tag(3.3) click_button "Update Process" @@ -293,7 +288,7 @@ describe "SDG Relations", :js do process = create(:legislation_process, title: "SDG process") visit sdg_management_edit_legislation_process_path(process) - find("li[data-code='1']").click + click_sdg_goal(1) click_button "Update Process" click_link "Marked as reviewed" @@ -307,7 +302,7 @@ describe "SDG Relations", :js do process.sdg_goals = [SDG::Goal[1], SDG::Goal[2]] visit sdg_management_edit_legislation_process_path(process) - find("li[data-code='1']").click + click_sdg_goal(1) click_button "Update Process" click_link "Marked as reviewed" @@ -322,7 +317,7 @@ describe "SDG Relations", :js do process = create(:legislation_process, title: "SDG process") visit sdg_management_edit_legislation_process_path(process) - find("li[data-code='1']").click + click_sdg_goal(1) expect(find("li[data-code='1']")["aria-checked"]).to eq "true" end @@ -333,15 +328,11 @@ describe "SDG Relations", :js do process.sdg_targets = [SDG::Target[1.1]] visit sdg_management_edit_legislation_process_path(process) - within "span[data-val='1']" do - click_button "Remove" - end + remove_sdg_goal_or_target_tag(1) expect(find("li[data-code='1']")["aria-checked"]).to eq "true" - within "span[data-val='1.1']" do - click_button "Remove" - end + remove_sdg_goal_or_target_tag(1.1) expect(find("li[data-code='1']")["aria-checked"]).to eq "false" end @@ -352,7 +343,7 @@ describe "SDG Relations", :js do process = create(:legislation_process, title: "SDG process") visit sdg_management_edit_legislation_process_path(process) - find("li[data-code='1']").click + click_sdg_goal(1) within(".help-section") { expect(page).to have_content "No Poverty" } end @@ -365,9 +356,7 @@ describe "SDG Relations", :js do within(".help-section") { expect(page).to have_content "No Poverty" } - within "span[data-val='1']" do - click_button "Remove" - end + remove_sdg_goal_or_target_tag(1) expect(page).not_to have_content "No Poverty" end