eliminar consensos si están vacíos

This commit is contained in:
fauno 2019-04-20 17:53:23 -03:00
parent ebc41a9b77
commit d4a7a2466a
No known key found for this signature in database
GPG key ID: 456032D717A4CD9C
4 changed files with 47 additions and 1 deletions

View file

@ -50,4 +50,27 @@ class ConsensosController < ApplicationController
status: :unprocessable_entity status: :unprocessable_entity
end end
end end
# DELETE /consensos/:id
#
# Eliminar un consenso, solo si no tiene posiciones!
#
# @param :id [Integer] El ID del consenso a eliminar
# @return [Hash] { id: @int, created_at: @date,
# titulo: @string, texto: @string,
# posiciones: [] }
def destroy
begin
@consenso = Consenso.find(params[:id])
rescue ActiveRecord::RecordNotFound
render json: {}, status: :not_found
return
end
if @consenso.posiciones.empty? && @consenso.destroy
render status: :ok
else
render json: {}, status: :unprocessable_entity
end
end
end end

View file

@ -0,0 +1,3 @@
# frozen_string_literal: true
json.partial! @consenso, as: :consenso

View file

@ -4,7 +4,7 @@ Rails.application.routes.draw do
# No queremos un índice de piratas # No queremos un índice de piratas
resources :piratas, only: %i[create] resources :piratas, only: %i[create]
# Podemos crear consensos pero no modificarlos # Podemos crear consensos pero no modificarlos
resources :consensos, only: %i[index show create] do resources :consensos, only: %i[index show create destroy] do
# Y solo le podemos agregar posiciones # Y solo le podemos agregar posiciones
resources :posiciones, only: %i[create] resources :posiciones, only: %i[create]
end end

View file

@ -43,4 +43,24 @@ class ConsensosControllerTest < ActionDispatch::IntegrationTest
assert_equal 'hola', consenso.titulo assert_equal 'hola', consenso.titulo
assert_equal 'chau', consenso.texto assert_equal 'chau', consenso.texto
end end
test 'se pueden borrar si están vacíos' do
consenso = create :consenso
delete consenso_url(consenso), as: :json, headers: @auth
assert_equal 200, @response.status
body = JSON.parse(@response.body)
assert_raise(ActiveRecord::RecordNotFound) { Consenso.find(body['id']) }
end
test 'no se pueden borrar si no están vacíos' do
consenso = create :consenso
create :posicion, consenso: consenso
delete consenso_url(consenso), as: :json, headers: @auth
assert_equal 422, @response.status
end
end end