las barcas se pueden abordar o abandonar

This commit is contained in:
fauno 2019-08-03 15:20:40 -03:00
parent e8e38da190
commit 92cf2ea616
No known key found for this signature in database
GPG key ID: 456032D717A4CD9C
5 changed files with 68 additions and 5 deletions

View file

@ -36,6 +36,8 @@ class BarcasController < ApplicationController
# nombre: @string, descripcion: @text }
def create
@barca = Barca.new(barca_params)
# La pirata se une a la barca que crea
@barca.piratas << current_pirata
if @barca.save
render status: :created
@ -53,7 +55,8 @@ class BarcasController < ApplicationController
# @return hash { id: @int, created_at: @date, updated_at: @date,
# nombre: @string, descripcion: @text }
def update
@barca = Barca.find(params[:id])
# Las piratas solo pueden modificar sus propias barcas
@barca = current_pirata.barcas.find(params[:id])
if @barca.update_attributes barca_params
render status: :no_content
@ -70,7 +73,7 @@ class BarcasController < ApplicationController
# @return hash { id: @int, created_at: @date, updated_at: @date,
# nombre: @string, descripcion: @text }
def destroy
@barca = Barca.find(params[:id])
@barca = current_pirata.barcas.find(params[:id])
if @barca.destroy
render status: :no_content
@ -80,9 +83,43 @@ class BarcasController < ApplicationController
end
end
# PUT /barcas/:barca_id/abordar
#
# La pirata actual aborda la barca
def abordar
find_barca
@barca.piratas << current_pirata
if @barca.save
render status: :no_content
else
render json: { errors: @barca.errors.messages },
status: :unprocessable_entity
end
end
# DELETE /barcas/:barca_id/abandonar
#
# La pirata actual abandona la barca!
def abandonar
find_barca
if @barca.tripulaciones.find_by(pirata: current_pirata).destroy
render status: :no_content
else
render json: { errors: @barca.errors.messages },
status: :unprocessable_entity
end
end
private
def barca_params
params.require(:barca).permit(:nombre, :descripcion)
end
def find_barca
@barca = Barca.find(params[:barca_id])
end
end

View file

@ -0,0 +1,3 @@
# frozen_string_literal: true
# empty

View file

@ -0,0 +1,3 @@
# frozen_string_literal: true
# empty

View file

@ -8,6 +8,8 @@ Rails.application.routes.draw do
resources :webpush_subscriptions, only: %i[create]
# Podemos crear barcas y dentro de ellas consensos
resources :barcas, only: %i[index show create update destroy] do
put 'abordar', to: 'barcas#abordar'
delete 'abandonar', to: 'barcas#abandonar'
# Podemos crear consensos pero no modificarlos
resources :consensos, only: %i[index show create destroy] do
# Y solo le podemos agregar posiciones

View file

@ -9,7 +9,7 @@ class BarcasControllerTest < ActionDispatch::IntegrationTest
test 'se pueden ver todas' do
2.times do
create :barca
create :barca, piratas: [@pirata]
end
get barcas_url, as: :json, headers: @auth
@ -33,7 +33,7 @@ class BarcasControllerTest < ActionDispatch::IntegrationTest
end
test 'se pueden editar' do
barca = create :barca
barca = create :barca, piratas: [@pirata]
nombre = SecureRandom.hex
put barca_url(barca), as: :json, headers: @auth,
@ -43,7 +43,7 @@ class BarcasControllerTest < ActionDispatch::IntegrationTest
end
test 'se pueden eliminar' do
barca = create :barca
barca = create :barca, piratas: [@pirata]
delete barca_url(barca), as: :json, headers: @auth
@ -52,4 +52,22 @@ class BarcasControllerTest < ActionDispatch::IntegrationTest
barca.reload
end
end
test 'se pueden abandonar' do
barca = create :barca, piratas: [@pirata]
delete barca_abandonar_url(barca), as: :json, headers: @auth
assert_equal 204, @response.status
assert_not barca.reload.piratas.include?(@pirata)
end
test 'se pueden abordar' do
barca = create :barca
put barca_abordar_url(barca), as: :json, headers: @auth
assert_equal 204, @response.status
assert barca.reload.piratas.include?(@pirata)
end
end