This commit is contained in:
fauno 2019-08-03 13:40:02 -03:00
parent c4003deba3
commit 9dec04fe88
No known key found for this signature in database
GPG key ID: 456032D717A4CD9C
8 changed files with 161 additions and 0 deletions

View 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

View file

@ -0,0 +1,3 @@
# frozen_string_literal: true
json.call(barca, :id, :created_at, :nombre, :descripcion)

View file

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

View file

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

View file

@ -0,0 +1,3 @@
# frozen_string_literal: true
json.barcas @barcas, partial: 'barcas/barca', as: :barca

View file

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

View file

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

View 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