Skip to content
Snippets Groups Projects
Commit a2aaa0c3 authored by pabois's avatar pabois
Browse files

change async method

parent 743a5d65
No related branches found
No related tags found
No related merge requests found
class Communication::CleanWebsitesJob < ApplicationJob
queue_as :default
def perform(websites_ids)
websites = Communication::Website.where(id: websites_ids)
websites.each do |website|
website.destroy_obsolete_connections
website.destroy_obsolete_git_files
end
end
end
\ No newline at end of file
......@@ -32,7 +32,7 @@ module WithDependencies
snapshot_direct_sources.each do |direct_source|
direct_source.sync_with_git
end
clean_websites(Communication::Website.where(id: website_ids))
clean_websites(website_ids)
# TODO: Actuellement, on ne nettoie pas les références
# Exemple : Quand on supprime un auteur, il n'est pas nettoyé dans le static de ses anciens posts.
# Un save du website le fera en nocturne pour l'instant.
......@@ -114,18 +114,14 @@ module WithDependencies
# puts " missing_dependencies_after_save #{ missing_dependencies_after_save }"
# puts
if missing_dependencies_after_save.any? || unpublished_by_last_save?
clean_websites(websites_to_clean)
clean_websites(websites_to_clean.pluck(:id))
end
end
handle_asynchronously :clean_websites_if_necessary, queue: :default
def clean_websites(websites)
def clean_websites(websites_ids)
# Les objets directs et les objets indirects (et les websites) répondent !
return unless respond_to?(:is_direct_object?)
websites.each do |website|
website.destroy_obsolete_connections
website.destroy_obsolete_git_files
end
Communication::CleanWebsitesJob.perform_later(websites_ids)
end
def websites_to_clean
......
......@@ -28,6 +28,8 @@ require "test_helper"
# rails test test/models/communication/website/connection_test.rb
class Communication::Website::ConnectionTest < ActiveSupport::TestCase
include ActiveJob::TestHelper
def test_unpublish_indirect_does_nothing
page = communication_website_pages(:page_with_no_dependency)
setup_page_connections(page)
......@@ -64,7 +66,10 @@ class Communication::Website::ConnectionTest < ActiveSupport::TestCase
# On supprime le bloc qui contient PA : -2 (parce que PA doit être supprimé aussi)
assert_difference -> { Communication::Website::Connection.count } => -2 do
page.blocks.find_by(position: 2).destroy
assert_enqueued_with(job: Communication::CleanWebsitesJob) do
page.blocks.find_by(position: 2).destroy
end
perform_enqueued_jobs
end
end
......@@ -82,7 +87,10 @@ class Communication::Website::ConnectionTest < ActiveSupport::TestCase
# Suppression d'un objet indirect qui a en dépendance un autre objet utilisé ailleurs (dans le cas précédent si PA était utilisé par une autre source)
# On supprime le bloc qui contient PA : -3 (parce que PA doit être supprimé aussi ainsi que son bloc Organisations mais pas Noesya, toujours connectée via le block 3)
assert_difference -> { Communication::Website::Connection.count } => -3 do
page.blocks.find_by(position: 2).destroy
assert_enqueued_with(job: Communication::CleanWebsitesJob) do
page.blocks.find_by(position: 2).destroy
end
perform_enqueued_jobs
end
end
......@@ -136,7 +144,10 @@ class Communication::Website::ConnectionTest < ActiveSupport::TestCase
# En déconnectant l'école du site, on supprime les connexions créées précédemment
assert_difference -> { Communication::Website::Connection.count } => -6 do
website_with_github.update(about: nil)
assert_enqueued_with(job: Communication::CleanWebsitesJob) do
website_with_github.update(about: nil)
end
perform_enqueued_jobs
end
end
......
......@@ -2,6 +2,8 @@ require "test_helper"
# rails test test/models/communication/website/dependency_test.rb
class Communication::Website::DependencyTest < ActiveSupport::TestCase
include ActiveJob::TestHelper
def test_page_dependencies
# Rien : 0 dépendances
page = communication_website_pages(:page_with_no_dependency)
......@@ -31,7 +33,13 @@ class Communication::Website::DependencyTest < ActiveSupport::TestCase
# On modifie le target du block
Delayed::Job.destroy_all
block.data = "{ \"elements\": [ { \"id\": \"#{olivia.id}\" } ] }"
block.save
# On vérifie qu'on enqueue le job qui clean les websites
assert_enqueued_with(job: Communication::CleanWebsitesJob) do
block.save
end
perform_enqueued_jobs
# On vérifie qu'on appelle bien la méthode destroy_obsolete_git_files sur le site de la page
assert(destroy_obsolete_git_files_job)
......@@ -41,7 +49,13 @@ class Communication::Website::DependencyTest < ActiveSupport::TestCase
# - une tâche pour resynchroniser la page
# - une tâche de nettoyage des git files (dépendances du bloc supprimé)
Delayed::Job.destroy_all
block.destroy
assert_enqueued_with(job: Communication::CleanWebsitesJob) do
block.destroy
end
perform_enqueued_jobs
assert(sync_with_git_job(page))
assert(destroy_obsolete_git_files_job)
......@@ -106,6 +120,10 @@ class Communication::Website::DependencyTest < ActiveSupport::TestCase
find_performable_method_job(:sync_with_git_without_delay, object)
end
def clean_websites_job(object)
find_performable_method_job(:clean_websites_without_delay, object)
end
def destroy_obsolete_git_files_job(website = website_with_github)
find_performable_method_job(:destroy_obsolete_git_files_without_delay, website)
end
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment