diff --git a/app/models/concerns/with_connections.rb b/app/models/concerns/with_connections.rb index 01c9e175561fe752861f4de1039deac54b5a3a17..16f4b84d26c5c5c27450c7375221553a06246411 100644 --- a/app/models/concerns/with_connections.rb +++ b/app/models/concerns/with_connections.rb @@ -15,9 +15,10 @@ module WithConnections # Ce serait super de faire la ligne ci-dessous, mais Rails ne sait pas faire ça avec un objet polymorphe (direct_source) # has_many :direct_sources, through: :connections - after_save :sync_connections - after_touch :sync_connections - after_save :sync_obsolete_dependencies + after_save :sync_connections + after_touch :sync_connections + after_save :sync_obsolete_dependencies + after_destroy :destroy_obsolete_connections end def for_website?(website) @@ -47,7 +48,6 @@ module WithConnections : reference.direct_sources # Récursivité sur les références end - def sync_connections direct_sources.each do |direct_source| direct_source.website.connect self, direct_source @@ -55,6 +55,13 @@ module WithConnections end end + # La suppression d'un objet indirect déclenche le recalcul des connexions de tous les objets directs + def destroy_obsolete_connections + direct_sources.each do |direct_source| + # TODO + end + end + def sync_obsolete_dependencies # TODO: pas ouf de passer par le site, ce serait plus léger en calcul de faire une analyse plus étroite websites.each do |website| diff --git a/test/models/communication/website/connections_test.rb b/test/models/communication/website/connections_test.rb index 845a25096e30a0b57eb1adb00dffc919d623e4cf..497432054cdfa85e8aee71b0354a277420c14d2a 100644 --- a/test/models/communication/website/connections_test.rb +++ b/test/models/communication/website/connections_test.rb @@ -50,7 +50,7 @@ class Communication::Website::ConnectionsTest < ActiveSupport::TestCase # On supprime le bloc qui contient PA : -1 (mais devrait être -2 parce que PA devrait être supprimé aussi, c'est le problème du saumon) # https://developers.osuny.org/docs/admin/communication/sites-web/dependencies/iteration-4/#olivia-et-le-saumon-de-schr%C3%B6dinger - assert_difference -> { Communication::Website::Connection.count } => -1 do + assert_difference -> { Communication::Website::Connection.count } => -2 do page.blocks.find_by(position: 2).destroy end end