diff --git a/app/jobs/deploy_job.rb b/app/jobs/deploy_job.rb index e5e051c7..f1ceca9e 100644 --- a/app/jobs/deploy_job.rb +++ b/app/jobs/deploy_job.rb @@ -10,7 +10,7 @@ class DeployJob < ApplicationJob @site = Site.find(site) # Si ya hay una tarea corriendo, aplazar esta - if @site.status == 'building' + if @site.building? DeployJob.perform_in(60, site, notify) return end diff --git a/app/models/site.rb b/app/models/site.rb index 7a8b4b4b..7aeb8a9b 100644 --- a/app/models/site.rb +++ b/app/models/site.rb @@ -315,14 +315,25 @@ class Site < ApplicationRecord # Poner en la cola de compilación def enqueue! - !enqueued? && update_attribute(:status, 'enqueued') + waiting? && update(status: 'enqueued') end # Está en la cola de compilación? + # + # TODO: definir todos estos métodos dinámicamente, aunque todavía no + # tenemos una máquina de estados propiamente dicha. def enqueued? status == 'enqueued' end + def waiting? + status == 'waiting' + end + + def building? + status == 'building' + end + # Cargar el sitio Jekyll # # TODO: En lugar de leer todo junto de una vez, extraer la carga de diff --git a/test/controllers/sites_controller_test.rb b/test/controllers/sites_controller_test.rb index 5f67092a..a7e2f68b 100644 --- a/test/controllers/sites_controller_test.rb +++ b/test/controllers/sites_controller_test.rb @@ -102,6 +102,13 @@ class SitesControllerTest < ActionDispatch::IntegrationTest 'index.html')) end + test 'no se pueden encolar varias veces seguidas' do + assert_enqueued_jobs 2 do + post site_enqueue_url(@site), headers: @authorization + post site_enqueue_url(@site), headers: @authorization + end + end + test 'se pueden actualizar' do name = SecureRandom.hex design = Design.all.where.not(id: @site.design_id).sample