escritura de posts mas robusta
no se estaba actualizando la ruta del documento interno de jekyll al cambiar la ruta, lo que llevó a una refactorización de tests e implementación de PostRelation.create :)
This commit is contained in:
parent
2169291c29
commit
8f22215621
3 changed files with 37 additions and 31 deletions
|
@ -160,21 +160,27 @@ class Post < OpenStruct
|
||||||
# Vuelve a leer el post para tomar los cambios
|
# Vuelve a leer el post para tomar los cambios
|
||||||
read
|
read
|
||||||
|
|
||||||
true
|
written?
|
||||||
end
|
end
|
||||||
# rubocop:enable Metrics/CyclomaticComplexity
|
# rubocop:enable Metrics/CyclomaticComplexity
|
||||||
alias save! save
|
alias save! save
|
||||||
|
|
||||||
# Lee el documento a menos que estemos trabajando con un documento en
|
# Actualiza la ruta del documento y lo lee
|
||||||
# blanco
|
|
||||||
def read
|
def read
|
||||||
document.read unless new?
|
return unless written?
|
||||||
|
|
||||||
|
document.path = path.absolute
|
||||||
|
document.read
|
||||||
end
|
end
|
||||||
|
|
||||||
def new?
|
def new?
|
||||||
document.path.blank?
|
document.path.blank?
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def written?
|
||||||
|
File.exist? path.absolute
|
||||||
|
end
|
||||||
|
|
||||||
# Actualizar la ubicación del archivo si cambió de lugar y si no
|
# Actualizar la ubicación del archivo si cambió de lugar y si no
|
||||||
# existe el destino
|
# existe el destino
|
||||||
def update_path!
|
def update_path!
|
||||||
|
|
|
@ -25,6 +25,12 @@ class PostRelation < Array
|
||||||
post
|
post
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def create(**args)
|
||||||
|
post = build(args)
|
||||||
|
post.save
|
||||||
|
post
|
||||||
|
end
|
||||||
|
|
||||||
def find(id)
|
def find(id)
|
||||||
super() do |p|
|
super() do |p|
|
||||||
p.id == id
|
p.id == id
|
||||||
|
|
|
@ -4,15 +4,12 @@ require 'test_helper'
|
||||||
|
|
||||||
class PostTest < ActiveSupport::TestCase
|
class PostTest < ActiveSupport::TestCase
|
||||||
setup do
|
setup do
|
||||||
# Trabajamos con el sitio de sutty porque tiene artículos
|
@site = create :site
|
||||||
#
|
@post = @site.posts.create(title: SecureRandom.hex)
|
||||||
# TODO: Cambiar a skel cuando publiquemos los códigos y privacidad
|
|
||||||
@site = create :site, name: 'sutty.nl'
|
|
||||||
@post = @site.posts.sample
|
|
||||||
end
|
end
|
||||||
|
|
||||||
teardown do
|
teardown do
|
||||||
# @site.destroy
|
@site.destroy
|
||||||
end
|
end
|
||||||
|
|
||||||
test 'se puede acceder a los valores' do
|
test 'se puede acceder a los valores' do
|
||||||
|
@ -28,20 +25,13 @@ class PostTest < ActiveSupport::TestCase
|
||||||
end
|
end
|
||||||
|
|
||||||
test 'se pueden eliminar' do
|
test 'se pueden eliminar' do
|
||||||
# TODO: cuando esté con git, solo aplicar git reset
|
|
||||||
tmp = File.join(Rails.root, 'tmp', 'eliminar.md')
|
|
||||||
FileUtils.cp @post.path.absolute, tmp
|
|
||||||
|
|
||||||
assert @post.destroy
|
assert @post.destroy
|
||||||
assert_not File.exist?(@post.path.absolute)
|
assert_not File.exist?(@post.path.absolute)
|
||||||
assert_not @site.posts.include?(@post)
|
assert_not @site.posts.include?(@post)
|
||||||
|
|
||||||
FileUtils.mv tmp, @post.path.absolute
|
|
||||||
end
|
end
|
||||||
|
|
||||||
test 'se puede ver el contenido completo después de guardar' do
|
test 'se puede ver el contenido completo después de guardar' do
|
||||||
assert @post.save
|
assert @post.save
|
||||||
@post.read
|
|
||||||
|
|
||||||
# Queremos saber si todos los atributos del post terminaron en el
|
# Queremos saber si todos los atributos del post terminaron en el
|
||||||
# archivo
|
# archivo
|
||||||
|
@ -98,6 +88,7 @@ class PostTest < ActiveSupport::TestCase
|
||||||
end
|
end
|
||||||
|
|
||||||
test 'se puede cambiar el slug' do
|
test 'se puede cambiar el slug' do
|
||||||
|
@post.title.value = SecureRandom.hex
|
||||||
assert_equal @post.slug_was, @post.slug.value
|
assert_equal @post.slug_was, @post.slug.value
|
||||||
assert_not @post.slug_changed?
|
assert_not @post.slug_changed?
|
||||||
assert @post.slug.valid?
|
assert @post.slug.valid?
|
||||||
|
@ -128,27 +119,29 @@ class PostTest < ActiveSupport::TestCase
|
||||||
test 'al cambiar slug o fecha cambia el archivo de ubicacion' do
|
test 'al cambiar slug o fecha cambia el archivo de ubicacion' do
|
||||||
hoy = 2.days.from_now.to_time
|
hoy = 2.days.from_now.to_time
|
||||||
path_was = @post.path.absolute
|
path_was = @post.path.absolute
|
||||||
@post.slug.value = 'test'
|
@post.slug.value = title = SecureRandom.hex
|
||||||
@post.date.value = hoy
|
@post.date.value = hoy
|
||||||
|
|
||||||
assert @post.path_changed?
|
assert @post.path_changed?
|
||||||
assert_equal "_es/#{hoy.strftime('%F')}-test.markdown",
|
assert_equal "_es/#{hoy.strftime('%F')}-#{title}.markdown",
|
||||||
@post.path.relative
|
@post.path.relative
|
||||||
|
|
||||||
assert @post.save
|
assert @post.save
|
||||||
assert_equal "_es/#{hoy.strftime('%F')}-test.markdown",
|
assert_equal "_es/#{hoy.strftime('%F')}-#{title}.markdown",
|
||||||
@post.document.relative_path
|
@post.document.relative_path
|
||||||
assert_not File.exist?(path_was)
|
assert_not File.exist?(path_was)
|
||||||
assert File.exist?(@post.path.absolute)
|
assert File.exist?(@post.path.absolute)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
test 'new?' do
|
||||||
|
post = @site.posts.build title: SecureRandom.hex
|
||||||
|
assert post.new?
|
||||||
|
assert post.save
|
||||||
|
assert_not post.new?
|
||||||
|
end
|
||||||
|
|
||||||
test 'no podemos pisar otros archivos' do
|
test 'no podemos pisar otros archivos' do
|
||||||
# Elegir un post al azar que no sea el que usamos
|
post = @site.posts.create title: SecureRandom.hex
|
||||||
# rubocop:disable Lint/Loop
|
|
||||||
begin
|
|
||||||
post = @site.posts.sample
|
|
||||||
end until post != @post
|
|
||||||
# rubocop:enable Lint/Loop
|
|
||||||
|
|
||||||
@post.slug.value = post.slug.value
|
@post.slug.value = post.slug.value
|
||||||
@post.date.value = post.date.value
|
@post.date.value = post.date.value
|
||||||
|
@ -160,8 +153,8 @@ class PostTest < ActiveSupport::TestCase
|
||||||
|
|
||||||
test 'se pueden crear nuevos' do
|
test 'se pueden crear nuevos' do
|
||||||
post = @site.posts.build(layout: :post)
|
post = @site.posts.build(layout: :post)
|
||||||
post.title.value = 'test'
|
post.title.value = SecureRandom.hex
|
||||||
post.content.value = 'test'
|
post.content.value = SecureRandom.hex
|
||||||
|
|
||||||
assert post.new?
|
assert post.new?
|
||||||
assert post.save
|
assert post.save
|
||||||
|
@ -169,10 +162,11 @@ class PostTest < ActiveSupport::TestCase
|
||||||
end
|
end
|
||||||
|
|
||||||
test 'se pueden inicializar con valores' do
|
test 'se pueden inicializar con valores' do
|
||||||
post = @site.posts.build(title: 'test', content: 'test')
|
title = SecureRandom.hex
|
||||||
|
post = @site.posts.build(title: title, content: title)
|
||||||
|
|
||||||
assert_equal 'test', post.title.value
|
assert_equal title, post.title.value
|
||||||
assert_equal 'test', post.content.value
|
assert_equal title, post.content.value
|
||||||
assert post.save
|
assert post.save
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in a new issue