Si ya existía algo en el mismo lugar no se puede cambiar el nombre

This commit is contained in:
f 2021-08-14 20:26:42 -03:00
parent b20b15317b
commit 3e76ffe4c4
2 changed files with 25 additions and 0 deletions

View file

@ -36,6 +36,9 @@ class Deploy < ApplicationRecord
validates :hostname, uniqueness: true
# Cada deploy puede implementar su propia validación
validates :hostname, hostname: true, unless: :implements_hostname_validation?
# Verificar que se puede cambiar de lugar el destino y no hay nada
# preexistente.
validate :destination_can_change?, if: :destination_changed?
# Retrocompatibilidad: Encuentra el site_name a partir del hostname.
#
@ -204,6 +207,19 @@ class Deploy < ApplicationRecord
ad.deploy if ad.persisted?
end
# Devuelve un error si el destino ya existe. No debería fallar si ya
# pasamos la validación de cambio de nombres, pero siempre puede haber
# directorios y links sueltos.
def destination_can_change?
return true unless persisted?
remove_destination! if broken?
return true unless exist?
errors.add :hostname, I18n.t('activerecord.errors.models.deploy.attributes.hostname.destination_exist')
end
# Convierte el comando en una versión resumida.
#
# @param [String]

View file

@ -64,4 +64,13 @@ class Site::DeploymentTest < ActiveSupport::TestCase
assert_equal q, site.deploys.count
end
test 'no se puede cambiar el nombre si ya existía un archivo en el mismo lugar' do
assert site.deploy_local.deploy
new_name = "test-#{SecureRandom.hex}"
FileUtils.mkdir File.join(Rails.root, '_deploy', "#{new_name}.#{Site.domain}")
assert_not site.update(name: new_name)
end
end