barcas
This commit is contained in:
parent
c4003deba3
commit
9dec04fe88
8 changed files with 161 additions and 0 deletions
88
app/controllers/barcas_controller.rb
Normal file
88
app/controllers/barcas_controller.rb
Normal file
|
@ -0,0 +1,88 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
# API de Barcas
|
||||
class BarcasController < ApplicationController
|
||||
before_action :authenticate!
|
||||
|
||||
# GET /barcas
|
||||
#
|
||||
# Devuelve todas las barcas
|
||||
#
|
||||
# @return Array [ barcas ]
|
||||
def index
|
||||
@barcas = Barca.all
|
||||
end
|
||||
|
||||
# GET /barcas/:id
|
||||
#
|
||||
# Ver los detalles de una barca
|
||||
#
|
||||
# @param :id [Integer] El ID de la barca
|
||||
# @return Hash { id: @int, created_at: @date, updated_at: @date,
|
||||
# nombre: @string, descripcion: @text }
|
||||
def show
|
||||
@barca = Barca.find(params[:id])
|
||||
return if @barca
|
||||
|
||||
render json: {}, status: :not_found
|
||||
end
|
||||
|
||||
# POST /barcas
|
||||
#
|
||||
# Crear una barca
|
||||
#
|
||||
# @param barca [Hash] { barca: { nombre: @string, descripcion: @text } }
|
||||
# @return Hash { id: @int, created_at: @date, updated_at: @date,
|
||||
# nombre: @string, descripcion: @text }
|
||||
def create
|
||||
@barca = Barca.new(barca_params)
|
||||
|
||||
if @barca.save
|
||||
render status: :created
|
||||
else
|
||||
render json: { errors: @barca.errors.messages },
|
||||
status: :unprocessable_entity
|
||||
end
|
||||
end
|
||||
|
||||
# PUT /barcas/:id
|
||||
#
|
||||
# Actualizar una barca
|
||||
#
|
||||
# @param barca [Hash] { barca: { nombre: @string, descripcion: @text } }
|
||||
# @return hash { id: @int, created_at: @date, updated_at: @date,
|
||||
# nombre: @string, descripcion: @text }
|
||||
def update
|
||||
@barca = Barca.find(params[:id])
|
||||
|
||||
if @barca.update_attributes barca_params
|
||||
render status: :no_content
|
||||
else
|
||||
render json: { errors: @barca.errors.messages },
|
||||
status: :unprocessable_entity
|
||||
end
|
||||
end
|
||||
|
||||
# DELETE /barcas/:id
|
||||
#
|
||||
# Elimina una barca y su tripulación
|
||||
#
|
||||
# @return hash { id: @int, created_at: @date, updated_at: @date,
|
||||
# nombre: @string, descripcion: @text }
|
||||
def destroy
|
||||
@barca = Barca.find(params[:id])
|
||||
|
||||
if @barca.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
|
||||
end
|
3
app/views/barcas/_barca.json.jbuilder
Normal file
3
app/views/barcas/_barca.json.jbuilder
Normal file
|
@ -0,0 +1,3 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
json.call(barca, :id, :created_at, :nombre, :descripcion)
|
3
app/views/barcas/create.json.jbuilder
Normal file
3
app/views/barcas/create.json.jbuilder
Normal file
|
@ -0,0 +1,3 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
json.partial! @barca, as: :barca
|
3
app/views/barcas/destroy.json.jbuilder
Normal file
3
app/views/barcas/destroy.json.jbuilder
Normal file
|
@ -0,0 +1,3 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
json.partial! @barca, as: :barca
|
3
app/views/barcas/index.json.jbuilder
Normal file
3
app/views/barcas/index.json.jbuilder
Normal file
|
@ -0,0 +1,3 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
json.barcas @barcas, partial: 'barcas/barca', as: :barca
|
3
app/views/barcas/show.json.jbuilder
Normal file
3
app/views/barcas/show.json.jbuilder
Normal file
|
@ -0,0 +1,3 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
json.partial! @barca, as: :barca
|
3
app/views/barcas/update.json.jbuilder
Normal file
3
app/views/barcas/update.json.jbuilder
Normal file
|
@ -0,0 +1,3 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
json.partial! @barca, as: :barca
|
55
test/controllers/barcas_controller_test.rb
Normal file
55
test/controllers/barcas_controller_test.rb
Normal file
|
@ -0,0 +1,55 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
class BarcasControllerTest < ActionDispatch::IntegrationTest
|
||||
setup do
|
||||
@pirata = create :pirata
|
||||
@auth = { Authorization: ActionController::HttpAuthentication::Basic
|
||||
.encode_credentials(@pirata.email, @pirata.password) }
|
||||
end
|
||||
|
||||
test 'se pueden ver todas' do
|
||||
2.times do
|
||||
create :barca
|
||||
end
|
||||
|
||||
get barcas_url, as: :json, headers: @auth
|
||||
|
||||
body = JSON.parse(@response.body)
|
||||
|
||||
assert_equal 200, @response.status
|
||||
assert_equal 2, body['barcas'].size
|
||||
end
|
||||
|
||||
test 'se pueden crear' do
|
||||
nombre = SecureRandom.hex
|
||||
post barcas_url, as: :json, headers: @auth,
|
||||
params: { barca: { nombre: nombre, descripcion: nombre } }
|
||||
|
||||
body = JSON.parse(@response.body)
|
||||
|
||||
assert_equal 201, @response.status
|
||||
assert_equal nombre, body['nombre']
|
||||
assert_equal nombre, body['descripcion']
|
||||
end
|
||||
|
||||
test 'se pueden editar' do
|
||||
barca = create :barca
|
||||
nombre = SecureRandom.hex
|
||||
|
||||
put barca_url(barca), as: :json, headers: @auth,
|
||||
params: { barca: { id: barca.id, nombre: nombre, descripcion: nombre } }
|
||||
|
||||
assert_equal 204, @response.status
|
||||
end
|
||||
|
||||
test 'se pueden eliminar' do
|
||||
barca = create :barca
|
||||
|
||||
delete barca_url(barca), as: :json, headers: @auth
|
||||
|
||||
assert_equal 204, @response.status
|
||||
assert_raise ActiveRecord::RecordNotFound do
|
||||
barca.reload
|
||||
end
|
||||
end
|
||||
end
|
Loading…
Reference in a new issue