responder con un error cuando la barca no esta abordada closes #13
This commit is contained in:
parent
9018c30e90
commit
e5fdacc03e
4 changed files with 24 additions and 19 deletions
|
@ -3,6 +3,7 @@
|
||||||
# API de Barcas
|
# API de Barcas
|
||||||
class BarcasController < ApplicationController
|
class BarcasController < ApplicationController
|
||||||
before_action :authenticate!
|
before_action :authenticate!
|
||||||
|
before_action :find_barca, only: %i[abordar abandonar]
|
||||||
|
|
||||||
# GET /barcas
|
# GET /barcas
|
||||||
#
|
#
|
||||||
|
@ -98,8 +99,6 @@ class BarcasController < ApplicationController
|
||||||
#
|
#
|
||||||
# La pirata actual aborda la barca
|
# La pirata actual aborda la barca
|
||||||
def abordar
|
def abordar
|
||||||
find_barca
|
|
||||||
|
|
||||||
@barca.piratas << current_pirata
|
@barca.piratas << current_pirata
|
||||||
|
|
||||||
if @barca.save
|
if @barca.save
|
||||||
|
@ -115,15 +114,16 @@ class BarcasController < ApplicationController
|
||||||
#
|
#
|
||||||
# La pirata actual abandona la barca!
|
# La pirata actual abandona la barca!
|
||||||
def abandonar
|
def abandonar
|
||||||
find_barca
|
if @barca.tripulaciones.find_by!(pirata: current_pirata).destroy
|
||||||
|
|
||||||
if @barca.tripulaciones.find_by(pirata: current_pirata).try :destroy
|
|
||||||
notify(subject: :abandonar, urgency: :'very-low', ttl: 1.day)
|
notify(subject: :abandonar, urgency: :'very-low', ttl: 1.day)
|
||||||
render status: :no_content
|
render status: :no_content
|
||||||
else
|
else
|
||||||
render json: { errors: @barca.errors.messages },
|
render status: :unprocessable_entity,
|
||||||
status: :unprocessable_entity
|
json: { errors: @barca.errors.messages }
|
||||||
end
|
end
|
||||||
|
rescue ActiveRecord::RecordNotFound
|
||||||
|
render status: :unprocessable_entity,
|
||||||
|
json: { errors: [I18n.t('barcas.abandonar.no_tripulada')] }
|
||||||
end
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
|
@ -23,6 +23,7 @@ en:
|
||||||
abandonar:
|
abandonar:
|
||||||
subject: '%{barca}'
|
subject: '%{barca}'
|
||||||
message: '%{nick} left the ship!'
|
message: '%{nick} left the ship!'
|
||||||
|
no_tripulada: "You're not on this ship"
|
||||||
destroy:
|
destroy:
|
||||||
subject: '%{barca}'
|
subject: '%{barca}'
|
||||||
message: '%{nick} sunk the ship!'
|
message: '%{nick} sunk the ship!'
|
||||||
|
|
|
@ -23,6 +23,7 @@ es:
|
||||||
abandonar:
|
abandonar:
|
||||||
subject: '%{barca}'
|
subject: '%{barca}'
|
||||||
message: '¡%{nick} abandonó la barca!'
|
message: '¡%{nick} abandonó la barca!'
|
||||||
|
no_tripulada: 'No estás en esa barca'
|
||||||
destroy:
|
destroy:
|
||||||
subject: '%{barca}'
|
subject: '%{barca}'
|
||||||
message: '¡%{nick} hundió la barca!'
|
message: '¡%{nick} hundió la barca!'
|
||||||
|
|
|
@ -16,9 +16,9 @@ class BarcasControllerTest < ActionDispatch::IntegrationTest
|
||||||
|
|
||||||
get barcas_todas_url, as: :json, headers: @auth
|
get barcas_todas_url, as: :json, headers: @auth
|
||||||
|
|
||||||
body = JSON.parse(@response.body)
|
body = JSON.parse(response.body)
|
||||||
|
|
||||||
assert_equal 200, @response.status
|
assert_equal 200, response.status
|
||||||
assert_equal 3, body['barcas'].size
|
assert_equal 3, body['barcas'].size
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -31,9 +31,9 @@ class BarcasControllerTest < ActionDispatch::IntegrationTest
|
||||||
|
|
||||||
get barcas_url, as: :json, headers: @auth
|
get barcas_url, as: :json, headers: @auth
|
||||||
|
|
||||||
body = JSON.parse(@response.body)
|
body = JSON.parse(response.body)
|
||||||
|
|
||||||
assert_equal 200, @response.status
|
assert_equal 200, response.status
|
||||||
assert_equal 2, body['barcas'].size
|
assert_equal 2, body['barcas'].size
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -42,9 +42,9 @@ class BarcasControllerTest < ActionDispatch::IntegrationTest
|
||||||
post barcas_url, as: :json, headers: @auth,
|
post barcas_url, as: :json, headers: @auth,
|
||||||
params: { barca: { nombre: nombre, descripcion: nombre } }
|
params: { barca: { nombre: nombre, descripcion: nombre } }
|
||||||
|
|
||||||
body = JSON.parse(@response.body)
|
body = JSON.parse(response.body)
|
||||||
|
|
||||||
assert_equal 201, @response.status
|
assert_equal 201, response.status
|
||||||
assert_equal nombre, body['nombre']
|
assert_equal nombre, body['nombre']
|
||||||
assert_equal nombre, body['descripcion']
|
assert_equal nombre, body['descripcion']
|
||||||
end
|
end
|
||||||
|
@ -61,7 +61,7 @@ class BarcasControllerTest < ActionDispatch::IntegrationTest
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
assert_equal 204, @response.status
|
assert_equal 204, response.status
|
||||||
end
|
end
|
||||||
|
|
||||||
test 'se pueden eliminar' do
|
test 'se pueden eliminar' do
|
||||||
|
@ -69,7 +69,7 @@ class BarcasControllerTest < ActionDispatch::IntegrationTest
|
||||||
|
|
||||||
delete barca_url(barca), as: :json, headers: @auth
|
delete barca_url(barca), as: :json, headers: @auth
|
||||||
|
|
||||||
assert_equal 204, @response.status
|
assert_equal 204, response.status
|
||||||
assert_raise ActiveRecord::RecordNotFound do
|
assert_raise ActiveRecord::RecordNotFound do
|
||||||
barca.reload
|
barca.reload
|
||||||
end
|
end
|
||||||
|
@ -81,7 +81,7 @@ class BarcasControllerTest < ActionDispatch::IntegrationTest
|
||||||
|
|
||||||
delete barca_url(barca), as: :json, headers: @auth
|
delete barca_url(barca), as: :json, headers: @auth
|
||||||
|
|
||||||
assert_equal 422, @response.status
|
assert_equal 422, response.status
|
||||||
assert barca.reload
|
assert barca.reload
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -90,7 +90,7 @@ class BarcasControllerTest < ActionDispatch::IntegrationTest
|
||||||
|
|
||||||
delete barca_abandonar_url(barca), as: :json, headers: @auth
|
delete barca_abandonar_url(barca), as: :json, headers: @auth
|
||||||
|
|
||||||
assert_equal 204, @response.status
|
assert_equal 204, response.status
|
||||||
assert_not barca.reload.piratas.include?(@pirata)
|
assert_not barca.reload.piratas.include?(@pirata)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -99,7 +99,10 @@ class BarcasControllerTest < ActionDispatch::IntegrationTest
|
||||||
|
|
||||||
delete barca_abandonar_url(barca), as: :json, headers: @auth
|
delete barca_abandonar_url(barca), as: :json, headers: @auth
|
||||||
|
|
||||||
|
body = JSON.parse(response.body)
|
||||||
|
|
||||||
assert_response :unprocessable_entity
|
assert_response :unprocessable_entity
|
||||||
|
assert body['errors'].include?(I18n.t('barcas.abandonar.no_tripulada'))
|
||||||
end
|
end
|
||||||
|
|
||||||
test 'se pueden abordar' do
|
test 'se pueden abordar' do
|
||||||
|
@ -107,7 +110,7 @@ class BarcasControllerTest < ActionDispatch::IntegrationTest
|
||||||
|
|
||||||
put barca_abordar_url(barca), as: :json, headers: @auth
|
put barca_abordar_url(barca), as: :json, headers: @auth
|
||||||
|
|
||||||
assert_equal 204, @response.status
|
assert_equal 204, response.status
|
||||||
assert barca.reload.piratas.include?(@pirata)
|
assert barca.reload.piratas.include?(@pirata)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -117,7 +120,7 @@ class BarcasControllerTest < ActionDispatch::IntegrationTest
|
||||||
|
|
||||||
get barcas_todas_url, as: :json, headers: @auth
|
get barcas_todas_url, as: :json, headers: @auth
|
||||||
|
|
||||||
body = JSON.parse @response.body
|
body = JSON.parse response.body
|
||||||
assert body['barcas'].first['abordada']
|
assert body['barcas'].first['abordada']
|
||||||
assert_equal 1, body['barcas'].first['tripulacion']
|
assert_equal 1, body['barcas'].first['tripulacion']
|
||||||
assert_not body['barcas'].last['abordada']
|
assert_not body['barcas'].last['abordada']
|
||||||
|
|
Loading…
Reference in a new issue