diff --git a/app/components/budgets/budget_component.html.erb b/app/components/budgets/budget_component.html.erb index 232d5da75..d0855c9db 100644 --- a/app/components/budgets/budget_component.html.erb +++ b/app/components/budgets/budget_component.html.erb @@ -33,13 +33,7 @@ <% end %> <%= render Budgets::SupportsInfoComponent.new(budget) %> - - <% unless budget.informing? %> -
-

<%= t("budgets.index.map") %>

- <%= render_map(nil, "budgets", false, nil, coordinates) %> -
- <% end %> + <%= render Budgets::MapComponent.new(budget) %> diff --git a/app/components/budgets/budget_component.rb b/app/components/budgets/budget_component.rb index 83536cfd6..e7ed09c47 100644 --- a/app/components/budgets/budget_component.rb +++ b/app/components/budgets/budget_component.rb @@ -1,22 +1,8 @@ class Budgets::BudgetComponent < ApplicationComponent - delegate :wysiwyg, :auto_link_already_sanitized_html, :render_map, to: :helpers + delegate :wysiwyg, :auto_link_already_sanitized_html, to: :helpers attr_reader :budget def initialize(budget) @budget = budget end - - private - - def coordinates - return unless budget.present? - - if budget.publishing_prices_or_later? && budget.investments.selected.any? - investments = budget.investments.selected - else - investments = budget.investments - end - - MapLocation.where(investment_id: investments).map(&:json_data) - end end diff --git a/app/components/budgets/map_component.html.erb b/app/components/budgets/map_component.html.erb new file mode 100644 index 000000000..733ce56af --- /dev/null +++ b/app/components/budgets/map_component.html.erb @@ -0,0 +1,4 @@ +
+

<%= t("budgets.index.map") %>

+ <%= render_map(nil, "budgets", false, nil, coordinates) %> +
diff --git a/app/components/budgets/map_component.rb b/app/components/budgets/map_component.rb new file mode 100644 index 000000000..be83fcce4 --- /dev/null +++ b/app/components/budgets/map_component.rb @@ -0,0 +1,26 @@ +class Budgets::MapComponent < ApplicationComponent + delegate :render_map, to: :helpers + attr_reader :budget + + def initialize(budget) + @budget = budget + end + + def render? + !budget.informing? + end + + private + + def coordinates + return unless budget.present? + + if budget.publishing_prices_or_later? && budget.investments.selected.any? + investments = budget.investments.selected + else + investments = budget.investments + end + + MapLocation.where(investment_id: investments).map(&:json_data) + end +end diff --git a/spec/components/budgets/map_component_spec.rb b/spec/components/budgets/map_component_spec.rb new file mode 100644 index 000000000..662507bb1 --- /dev/null +++ b/spec/components/budgets/map_component_spec.rb @@ -0,0 +1,23 @@ +require "rails_helper" + +describe Budgets::MapComponent do + let(:budget) { build(:budget) } + + describe "#render?" do + it "is rendered after the informing phase" do + budget.phase = "accepting" + + render_inline Budgets::MapComponent.new(budget) + + expect(page.first("div.map")).to have_content "located geographically" + end + + it "is not rendered during the informing phase" do + budget.phase = "informing" + + render_inline Budgets::MapComponent.new(budget) + + expect(page).not_to be_rendered + end + end +end diff --git a/spec/system/budgets/budgets_spec.rb b/spec/system/budgets/budgets_spec.rb index b0a8ce7f9..0ba94c64c 100644 --- a/spec/system/budgets/budgets_spec.rb +++ b/spec/system/budgets/budgets_spec.rb @@ -100,8 +100,6 @@ describe "Budgets" do expect(page).not_to have_link("List of all investment projects") expect(page).not_to have_link("List of all unfeasible investment projects") expect(page).not_to have_link("List of all investment projects not selected for balloting") - - expect(page).not_to have_css("div.map") end end @@ -114,8 +112,6 @@ describe "Budgets" do within("#budget_info") do expect(page).not_to have_link heading.name expect(page).to have_content "#{heading.name}\n€1,000,000" - - expect(page).to have_css("div.map") end end @@ -342,7 +338,7 @@ describe "Budgets" do } end - allow_any_instance_of(Budgets::BudgetComponent).to receive(:coordinates).and_return(coordinates) + allow_any_instance_of(Budgets::MapComponent).to receive(:coordinates).and_return(coordinates) visit budgets_path