testear subida de imagenes

This commit is contained in:
f 2019-08-22 16:13:21 -03:00
parent 0a1cbb9fc2
commit b4aebb9fe2
No known key found for this signature in database
GPG key ID: 2AE5A13E321F953D
4 changed files with 63 additions and 7 deletions

View file

@ -5,19 +5,42 @@
class MetadataImage < MetadataTemplate class MetadataImage < MetadataTemplate
# Una ruta vacía a la imagen con una descripción vacía # Una ruta vacía a la imagen con una descripción vacía
def default_value def default_value
{ 'path' => '', 'description' => '' } { 'path' => nil, 'description' => nil }
end end
def empty? def empty?
value == default_value value == default_value
end end
def validate
super
errors << I18n.t('metadata.image.path_required') if path_missing?
errors.compact!
errors.empty?
end
# Determina si necesitamos la imagen pero no la tenemos
def path_missing?
required && !value['path'].blank?
end
# Determina si el archivo ya fue subido
def uploaded?
value['path'].is_a?(String)
end
# Determina si la ruta es opcional pero deja pasar si la ruta se
# especifica
def path_optional?
!required && value['path'].blank?
end
# Asociar la imagen subida al sitio y obtener la ruta # Asociar la imagen subida al sitio y obtener la ruta
# rubocop:disable Metrics/CyclomaticComplexity
def save def save
return true if !required && value['path'].blank? return true if uploaded?
return false if required && value['path'].blank? return true if path_optional?
return true if value['path'].is_a? String
return false unless hardlink.zero? return false unless hardlink.zero?
# Modificar el valor actual # Modificar el valor actual
@ -25,7 +48,6 @@ class MetadataImage < MetadataTemplate
true true
end end
# rubocop:enable Metrics/CyclomaticComplexity
def to_param def to_param
{ name => %i[description path] } { name => %i[description path] }
@ -36,7 +58,7 @@ class MetadataImage < MetadataTemplate
# #
# @return ActiveStorage::Attachment # @return ActiveStorage::Attachment
def static_file def static_file
if value['path'].is_a? String if uploaded?
blob = ActiveStorage::Blob.find_by(key: key_from_path) blob = ActiveStorage::Blob.find_by(key: key_from_path)
@static_file ||= site.static_files.find_by(blob_id: blob.id) @static_file ||= site.static_files.find_by(blob_id: blob.id)
else else

View file

@ -16,6 +16,8 @@ es:
cant_be_empty: 'El campo no puede estar vacío' cant_be_empty: 'El campo no puede estar vacío'
image: image:
cant_be_empty: 'El campo no puede estar vacío' cant_be_empty: 'El campo no puede estar vacío'
not_an_image: 'No es una imagen'
path_required: 'Se necesita un archivo de imagen'
exceptions: exceptions:
post: post:
site_missing: 'Necesita una instancia de Site' site_missing: 'Necesita una instancia de Site'

View file

@ -85,3 +85,10 @@ Entonces:
## Dependencias ## Dependencias
Usamos VIPS para procesar imágenes con bajo consumo de recursos Usamos VIPS para procesar imágenes con bajo consumo de recursos
## TODO
* Crear una vista de galería
* Poder elegir imágenes desde la galería
* Optimizar las imágenes subidas
* Crear un paquete de oxipng para Alpine

View file

@ -92,4 +92,29 @@ class PostsControllerTest < ActionDispatch::IntegrationTest
assert_equal I18n.t('post_service.destroyed', title: @post.title.value), assert_equal I18n.t('post_service.destroyed', title: @post.title.value),
@site.repository.rugged.head.target.message @site.repository.rugged.head.target.message
end end
test 'se pueden subir imágenes' do
patch site_post_url(@site, @post.id),
headers: @authorization,
params: {
post: {
image: {
path: fixture_file_upload('files/logo.png', 'image/png'),
description: 'hola'
}
}
}
assert_equal 302, response.status
@site = Site.find(@site.id)
# TODO: Implementar reload
@post = @site.posts.find(@post.id)
Dir.chdir(@site.path) do
assert File.exist?(@post.image.value['path'])
end
assert_equal 'hola', @post.image.value['description']
end
end end