Add edit_image and update_image action to budget/investments controller.
This commit is contained in:
@@ -80,6 +80,18 @@ module Budgets
|
||||
super
|
||||
end
|
||||
|
||||
def edit_image
|
||||
end
|
||||
|
||||
def update_image
|
||||
if @investment.update(investment_params)
|
||||
redirect_to budget_investment_path(@investment.budget, @investment),
|
||||
notice: t("flash.actions.update_image.budget_investment")
|
||||
else
|
||||
render :edit_image
|
||||
end
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def resource_model
|
||||
|
||||
@@ -55,6 +55,9 @@ module Abilities
|
||||
can :suggest, Budget::Investment, budget: { phase: "accepting" }
|
||||
can :destroy, Budget::Investment, budget: { phase: ["accepting", "reviewing"] }, author_id: user.id
|
||||
can :vote, Budget::Investment, budget: { phase: "selecting" }
|
||||
can :edit_image, Budget::Investment, author_id: user.id
|
||||
can :update_image, Budget::Investment, author_id: user.id
|
||||
|
||||
can [:show, :create], Budget::Ballot, budget: { phase: "balloting" }
|
||||
can [:create, :destroy], Budget::Ballot::Line, budget: { phase: "balloting" }
|
||||
|
||||
|
||||
29
app/views/budgets/investments/_image_form.html.erb
Normal file
29
app/views/budgets/investments/_image_form.html.erb
Normal file
@@ -0,0 +1,29 @@
|
||||
<%= form_for([@investment.budget, @investment], url: update_image_budget_investment_path(@investment.budget, @investment), multipart: true, method: :put) do |f| %>
|
||||
<%= render 'shared/errors', resource: @investment %>
|
||||
|
||||
<div class="row">
|
||||
|
||||
<div class="small-12 column">
|
||||
<span class="note-marked">
|
||||
<%= t("budgets.investments.edit_image.note", title: @investment.title) %></p>
|
||||
</span>
|
||||
</div>
|
||||
|
||||
<div class="small-12 column">
|
||||
<%= image_tag @investment.image.url(:large) %>
|
||||
</div>
|
||||
|
||||
<div class="small-12 column">
|
||||
<%= f.file_field :image, accept: 'image/jpeg' %>
|
||||
</div>
|
||||
|
||||
<div class="small-12 column">
|
||||
<%= f.label :image_title, t("budgets.investments.edit_image.form.image_title") %>
|
||||
<%= f.text_field :image_title, placeholder: t("budgets.investments.edit_image.form.image_title"), label: false %>
|
||||
</div>
|
||||
|
||||
<div class="actions small-12 column">
|
||||
<%= f.submit(class: "button", value: t("budgets.investments.edit_image.form.submit_button")) %>
|
||||
</div>
|
||||
</div>
|
||||
<% end %>
|
||||
@@ -10,6 +10,12 @@
|
||||
class: 'button hollow float-right' %>
|
||||
<% end %>
|
||||
|
||||
<% if author_of?(investment, current_user) %>
|
||||
<%= link_to t("budgets.investments.show.edit_image"),
|
||||
edit_image_budget_investment_path(investment.budget, investment),
|
||||
class: 'button hollow float-right' %>
|
||||
<% end %>
|
||||
|
||||
<h1><%= investment.title %></h1>
|
||||
|
||||
<div class="budget-investment-info">
|
||||
|
||||
10
app/views/budgets/investments/edit_image.html.erb
Normal file
10
app/views/budgets/investments/edit_image.html.erb
Normal file
@@ -0,0 +1,10 @@
|
||||
<div class="budget-investment-image-edit row">
|
||||
|
||||
<div class="small-12 column">
|
||||
<%= render "shared/back_link" %>
|
||||
|
||||
<h1><%= t("budgets.investments.edit_image.title") %></h1>
|
||||
|
||||
<%= render "image_form" %>
|
||||
</div>
|
||||
</div>
|
||||
@@ -105,7 +105,7 @@ en:
|
||||
location: "Location"
|
||||
organization_name: "If you are proposing in the name of a collective/organization, write its name"
|
||||
image: "Proposal descriptive image"
|
||||
image_title: "Image description"
|
||||
image_title: "Image title"
|
||||
budget/investment/milestone:
|
||||
title: "Title"
|
||||
description: "Description"
|
||||
|
||||
@@ -108,6 +108,13 @@ en:
|
||||
milestones_tab: Milestones
|
||||
no_milestones: Don't have defined milestones
|
||||
milestone_publish_date: "Published %{publish_date}"
|
||||
edit_image: Edit image
|
||||
edit_image:
|
||||
title: Change your investment project image
|
||||
note: 'You are changing investment project image of: %{title}'
|
||||
form:
|
||||
image_title: Image title
|
||||
submit_button: Save image
|
||||
wrong_price_format: Only integer numbers
|
||||
investment:
|
||||
add: Vote
|
||||
|
||||
@@ -25,6 +25,8 @@ en:
|
||||
spending_proposal: "Investment project updated succesfully."
|
||||
budget_investment: "Investment project updated succesfully."
|
||||
topic: "Topic updated successfully."
|
||||
update_image:
|
||||
budget_investment: "Investment project image updated succesfully."
|
||||
destroy:
|
||||
spending_proposal: "Spending proposal deleted succesfully."
|
||||
budget_investment: "Investment project deleted succesfully."
|
||||
|
||||
@@ -100,7 +100,7 @@ es:
|
||||
location: "Ubicación"
|
||||
organization_name: "Si estás proponiendo en nombre de una organización o colectivo, escribe su nombre"
|
||||
image: "Imagen descriptiva de la propueta"
|
||||
image_title: "Texto descriptivo de la imagen"
|
||||
image_title: "Título de la imagen"
|
||||
comment:
|
||||
body: "Comentario"
|
||||
user: "Usuario"
|
||||
|
||||
@@ -108,6 +108,13 @@ es:
|
||||
milestones_tab: Seguimiento
|
||||
no_milestones: No hay hitos definidos
|
||||
milestone_publish_date: "Publicado el %{publish_date}"
|
||||
edit_image: Editar imagen
|
||||
edit_image:
|
||||
title: Cambia la imagen de tu proyecto de inversión
|
||||
note: 'Estas cambiando la imagen del proyecto de inversión: %{title}'
|
||||
form:
|
||||
image_title: 'Título de la imagen'
|
||||
submit_button: Guardar imagen
|
||||
wrong_price_format: Solo puede incluir caracteres numéricos
|
||||
investment:
|
||||
add: Votar
|
||||
|
||||
@@ -25,6 +25,8 @@ es:
|
||||
spending_proposal: "Propuesta de inversión actualizada correctamente."
|
||||
budget_investment: "Propuesta de inversión actualizada correctamente"
|
||||
topic: "Tema actualizado correctamente."
|
||||
update_image:
|
||||
budget_investment: "La imagen de la propuesta de inversión se ha actualizado correctamente."
|
||||
destroy:
|
||||
spending_proposal: "Propuesta de inversión eliminada."
|
||||
budget_investment: "Propuesta de inversión eliminada."
|
||||
|
||||
@@ -78,7 +78,11 @@ Rails.application.routes.draw do
|
||||
resources :budgets, only: [:show, :index] do
|
||||
resources :groups, controller: "budgets/groups", only: [:show]
|
||||
resources :investments, controller: "budgets/investments", only: [:index, :new, :create, :show, :destroy] do
|
||||
member { post :vote }
|
||||
member do
|
||||
post :vote
|
||||
get :edit_image
|
||||
put :update_image
|
||||
end
|
||||
collection { get :suggest }
|
||||
end
|
||||
resource :ballot, only: :show, controller: "budgets/ballots" do
|
||||
|
||||
@@ -387,6 +387,70 @@ feature 'Budget Investments' do
|
||||
expect(page).to have_link "Go back", href: budget_investments_path(budget, heading_id: investment.heading)
|
||||
end
|
||||
|
||||
context "Edit image button" do
|
||||
scenario "should not be shown for anonymous users" do
|
||||
investment = create(:budget_investment, heading: heading)
|
||||
visit budget_investment_path(budget, investment)
|
||||
|
||||
expect(page).not_to have_link "Edit image", href: edit_image_budget_investment_path(budget, investment)
|
||||
end
|
||||
|
||||
scenario "should not be shown when current user is not investment author" do
|
||||
investment = create(:budget_investment, heading: heading)
|
||||
visit budget_investment_path(budget, investment)
|
||||
|
||||
expect(page).not_to have_link "Edit image", href: edit_image_budget_investment_path(budget, investment)
|
||||
end
|
||||
|
||||
scenario "should be shown when current user is investment author" do
|
||||
investment = create(:budget_investment, heading: heading, author: author)
|
||||
login_as(author)
|
||||
visit budget_investment_path(budget, investment)
|
||||
|
||||
expect(page).to have_link "Edit image", href: edit_image_budget_investment_path(budget, investment)
|
||||
end
|
||||
end
|
||||
|
||||
scenario "edit page should not be accesible when there is no logged user" do
|
||||
investment = create(:budget_investment, heading: heading, author: author)
|
||||
visit edit_image_budget_investment_path(budget, investment)
|
||||
|
||||
expect(page).to have_content "You must sign in or register to continue"
|
||||
end
|
||||
|
||||
scenario "edit page should redirect to investment show page if logged user is not the author" do
|
||||
other_author = create(:user, :level_two, username: 'Manuel')
|
||||
investment = create(:budget_investment, heading: heading, author: author)
|
||||
login_as(other_author)
|
||||
visit edit_image_budget_investment_path(budget, investment)
|
||||
|
||||
expect(page).to have_content "You do not have permission to carry out the action 'edit_image' on budget/investment."
|
||||
end
|
||||
|
||||
scenario "Update image should not be posible if logged user is not the author" do
|
||||
other_author = create(:user, :level_two, username: 'Manuel')
|
||||
investment = create(:budget_investment, heading: heading, author: author)
|
||||
login_as(other_author)
|
||||
|
||||
visit edit_image_budget_investment_path(investment.budget, investment)
|
||||
expect(current_path).not_to eq(edit_image_budget_investment_path(investment.budget, investment))
|
||||
expect(page).to have_content 'You do not have permission'
|
||||
end
|
||||
|
||||
scenario "Update image should be posible for authors" do
|
||||
investment = create(:budget_investment, heading: heading, author: author)
|
||||
login_as(author)
|
||||
|
||||
visit edit_image_budget_investment_path(investment.budget, investment)
|
||||
fill_in :budget_investment_image_title, with: "New image title"
|
||||
attach_file :budget_investment_image, "spec/fixtures/files/logo_header.jpg"
|
||||
click_on "Save image"
|
||||
within ".budget-investment-show" do
|
||||
expect(page).to have_css("img[src*='logo_header.jpg']")
|
||||
end
|
||||
expect(page).to have_content 'Investment project image updated succesfully. '
|
||||
end
|
||||
|
||||
context "Show (feasible budget investment)" do
|
||||
let(:investment) do
|
||||
create(:budget_investment,
|
||||
|
||||
@@ -235,6 +235,24 @@ describe "Abilities::Common" do
|
||||
it { should_not be_able_to(:create, ballot_in_accepting_budget) }
|
||||
it { should_not be_able_to(:create, ballot_in_selecting_budget) }
|
||||
it { should be_able_to(:create, ballot_in_balloting_budget) }
|
||||
|
||||
it { should be_able_to(:edit_image, own_investment_in_accepting_budget) }
|
||||
it { should be_able_to(:edit_image, own_investment_in_reviewing_budget) }
|
||||
it { should be_able_to(:edit_image, own_investment_in_selecting_budget) }
|
||||
it { should be_able_to(:edit_image, own_investment_in_balloting_budget) }
|
||||
it { should be_able_to(:update_image, own_investment_in_accepting_budget) }
|
||||
it { should be_able_to(:update_image, own_investment_in_reviewing_budget) }
|
||||
it { should be_able_to(:update_image, own_investment_in_selecting_budget) }
|
||||
it { should be_able_to(:update_image, own_investment_in_balloting_budget) }
|
||||
|
||||
it { should_not be_able_to(:edit_image, investment_in_accepting_budget) }
|
||||
it { should_not be_able_to(:edit_image, investment_in_reviewing_budget) }
|
||||
it { should_not be_able_to(:edit_image, investment_in_selecting_budget) }
|
||||
it { should_not be_able_to(:edit_image, investment_in_balloting_budget) }
|
||||
it { should_not be_able_to(:update_image, investment_in_accepting_budget) }
|
||||
it { should_not be_able_to(:update_image, investment_in_reviewing_budget) }
|
||||
it { should_not be_able_to(:update_image, investment_in_selecting_budget) }
|
||||
it { should_not be_able_to(:update_image, investment_in_balloting_budget) }
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
Reference in New Issue
Block a user