testear subida de imagenes
This commit is contained in:
parent
0a1cbb9fc2
commit
b4aebb9fe2
4 changed files with 63 additions and 7 deletions
|
@ -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
|
||||||
|
|
|
@ -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'
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
Loading…
Reference in a new issue