diff --git a/lib/extends/commands/decidim/proposals/create_proposal_extends.rb b/lib/extends/commands/decidim/proposals/create_proposal_extends.rb index da64fa8437..6a5c505a7e 100644 --- a/lib/extends/commands/decidim/proposals/create_proposal_extends.rb +++ b/lib/extends/commands/decidim/proposals/create_proposal_extends.rb @@ -31,6 +31,10 @@ def create_proposal proposal.longitude = form.longitude if form.longitude.present? proposal.add_coauthor(@current_user, user_group:) proposal.save! + # from decidim_awesome + # Update the proposal with the private body, to + # avoid tracebility on private fields. + proposal.update_private_body!(form.private_body) if form.private_body.present? @attached_to = proposal proposal end diff --git a/spec/commands/decidim/proposals/create_proposal_spec.rb b/spec/commands/decidim/proposals/create_proposal_spec.rb index 3b2cbc5e01..0321655635 100644 --- a/spec/commands/decidim/proposals/create_proposal_spec.rb +++ b/spec/commands/decidim/proposals/create_proposal_spec.rb @@ -157,6 +157,46 @@ module Proposals end end + context "with a private body" do + let(:form_params) do + { + title: "A reasonable proposal title", + body: "A reasonable proposal body", + user_group_id: user_group.try(:id), + private_body: "A valid private proposal body" + } + end + let(:proposal) { Decidim::Proposals::Proposal.last } + + it "broadcasts :ok and creates a private_body" do + expect { command.call }.to broadcast(:ok) + expect(proposal.title["en"]).to eq("A reasonable proposal title") + expect(proposal.body["en"]).to eq("A reasonable proposal body") + expect(proposal.private_body).to eq("A valid private proposal body") + expect(proposal.extra_fields.private_body).to eq("A valid private proposal body") + end + end + + context "with no private body" do + let(:form_params) do + { + title: "A reasonable proposal title", + body: "A reasonable proposal body", + user_group_id: user_group.try(:id), + private_body: nil + } + end + let(:proposal) { Decidim::Proposals::Proposal.last } + + it "broadcasts :ok and creates a private_body" do + expect { command.call }.to broadcast(:ok) + expect(proposal.title["en"]).to eq("A reasonable proposal title") + expect(proposal.body["en"]).to eq("A reasonable proposal body") + expect(proposal.private_body).to be_nil + expect(proposal.extra_fields).to be_nil + end + end + describe "the proposal limit excludes withdrawn proposals" do let(:component) do create(:proposal_component, settings: { "proposal_limit" => 1 })