diff --git a/app/components/budgets/investments/content_blocks_component.html.erb b/app/components/budgets/investments/content_blocks_component.html.erb new file mode 100644 index 000000000..c6b17c12b --- /dev/null +++ b/app/components/budgets/investments/content_blocks_component.html.erb @@ -0,0 +1,5 @@ + diff --git a/app/components/budgets/investments/content_blocks_component.rb b/app/components/budgets/investments/content_blocks_component.rb new file mode 100644 index 000000000..9750f0968 --- /dev/null +++ b/app/components/budgets/investments/content_blocks_component.rb @@ -0,0 +1,17 @@ +class Budgets::Investments::ContentBlocksComponent < ApplicationComponent + attr_reader :heading + + def initialize(heading) + @heading = heading + end + + def render? + heading&.allow_custom_content && content_blocks.any? + end + + private + + def content_blocks + heading.content_blocks.where(locale: I18n.locale) + end +end diff --git a/app/controllers/budgets/investments_controller.rb b/app/controllers/budgets/investments_controller.rb index 211ffdf20..e2dc790ee 100644 --- a/app/controllers/budgets/investments_controller.rb +++ b/app/controllers/budgets/investments_controller.rb @@ -25,7 +25,6 @@ module Budgets before_action :load_categories, only: :index before_action :set_default_investment_filter, only: :index before_action :set_view, only: :index - before_action :load_content_blocks, only: :index skip_authorization_check only: :json_data @@ -149,10 +148,6 @@ module Budgets @categories = Tag.category.order(:name) end - def load_content_blocks - @heading_content_blocks = @heading.content_blocks.where(locale: I18n.locale) if @heading - end - def tag_cloud TagCloud.new(Budget::Investment, params[:search]) end diff --git a/app/views/budgets/investments/_content_blocks.html.erb b/app/views/budgets/investments/_content_blocks.html.erb deleted file mode 100644 index 53df67d34..000000000 --- a/app/views/budgets/investments/_content_blocks.html.erb +++ /dev/null @@ -1,7 +0,0 @@ -<% if @heading.allow_custom_content %> - -<% end %> diff --git a/app/views/budgets/investments/_sidebar.html.erb b/app/views/budgets/investments/_sidebar.html.erb index 2185e210c..bcd169918 100644 --- a/app/views/budgets/investments/_sidebar.html.erb +++ b/app/views/budgets/investments/_sidebar.html.erb @@ -59,9 +59,7 @@ <% end %> -<% if @heading && !@heading.content_blocks.where(locale: I18n.locale).empty? %> - <%= render "budgets/investments/content_blocks" %> -<% end %> +<%= render Budgets::Investments::ContentBlocksComponent.new(@heading) %> <% if @map_location&.available? %> <%= render "budgets/investments/map" %> diff --git a/spec/components/budgets/investments/content_blocks_component_spec.rb b/spec/components/budgets/investments/content_blocks_component_spec.rb new file mode 100644 index 000000000..89e228e56 --- /dev/null +++ b/spec/components/budgets/investments/content_blocks_component_spec.rb @@ -0,0 +1,46 @@ +require "rails_helper" + +describe Budgets::Investments::ContentBlocksComponent do + it "is not rendered without a heading" do + render_inline Budgets::Investments::ContentBlocksComponent.new(nil) + + expect(page).not_to be_rendered + end + + it "is not rendered with a heading without custom blocks" do + heading = Budget::Heading.new(allow_custom_content: true) + + render_inline Budgets::Investments::ContentBlocksComponent.new(heading) + + expect(page).not_to be_rendered + end + + it "is not rendered with a heading with custom blocks in other languages" do + heading = create(:budget_heading, allow_custom_content: true) + create(:heading_content_block, heading: heading, locale: :es) + + render_inline Budgets::Investments::ContentBlocksComponent.new(heading) + + expect(page).not_to be_rendered + end + + it "is not rendered with a heading not allowing custom content" do + heading = create(:budget_heading, allow_custom_content: false) + create(:heading_content_block, heading: heading, locale: :en) + + render_inline Budgets::Investments::ContentBlocksComponent.new(heading) + + expect(page).not_to be_rendered + end + + it "renders content blocks for the current language" do + heading = create(:budget_heading, allow_custom_content: true) + create(:heading_content_block, heading: heading, locale: :en, body: "
  • Heading block
  • ") + + render_inline Budgets::Investments::ContentBlocksComponent.new(heading) + + page.find("ul") do |list| + expect(page).to have_css "li", exact_text: "Heading block" + end + end +end diff --git a/spec/system/budgets/ballots_spec.rb b/spec/system/budgets/ballots_spec.rb index 872ced135..35e1a8fc8 100644 --- a/spec/system/budgets/ballots_spec.rb +++ b/spec/system/budgets/ballots_spec.rb @@ -160,13 +160,16 @@ describe "Ballots" do end end - scenario "the Map shoud be visible before and after" do + scenario "map and content block shoud be visible before and after" do create(:budget_investment, :selected, heading: new_york, price: 10000, title: "More bridges") + create(:heading_content_block, heading: new_york, body: "
  • New Block
  • ") + new_york.update!(allow_custom_content: true) visit budget_investments_path(budget, heading_id: new_york) within("#sidebar") do expect(page).to have_content "OpenStreetMap" + expect(page).to have_content "New Block" end add_to_ballot("More bridges") @@ -174,6 +177,7 @@ describe "Ballots" do within("#sidebar") do expect(page).to have_content "More bridges" expect(page).to have_content "OpenStreetMap" + expect(page).to have_content "New Block" end within(".budget-investment", text: "More bridges") do @@ -183,6 +187,7 @@ describe "Ballots" do within("#sidebar") do expect(page).not_to have_content "More bridges" expect(page).to have_content "OpenStreetMap" + expect(page).to have_content "New Block" end end end