From c7764d3ed58df60f0971bf0b91cf78309b5ea0f8 Mon Sep 17 00:00:00 2001 From: Kyle Drake Date: Wed, 3 Jan 2024 17:03:27 -0600 Subject: [PATCH] unfollow sites when blocked --- models/site.rb | 13 +++++++++++++ tests/acceptance/site_tests.rb | 29 +++++++++++++++++++++++++++++ 2 files changed, 42 insertions(+) diff --git a/models/site.rb b/models/site.rb index 12aeedb3..30971a84 100644 --- a/models/site.rb +++ b/models/site.rb @@ -627,10 +627,23 @@ class Site < Sequel::Model @blocking_site_ids ||= blockings_dataset.select(:site_id).all.collect {|s| s.site_id} end + def unfollow_blocked_sites! + blockings.each do |blocking| + follows.each do |follow| + follow.destroy if follow.actioning_site_id == blocking.site_id + end + + followings.each do |following| + following.destroy if following.site_id == blocking.site_id + end + end + end + def block!(site) block = blockings_dataset.filter(site_id: site.id).first return true if block add_blocking site: site + unfollow_blocked_sites! end def unblock!(site) diff --git a/tests/acceptance/site_tests.rb b/tests/acceptance/site_tests.rb index 6f547448..5c9d58be 100644 --- a/tests/acceptance/site_tests.rb +++ b/tests/acceptance/site_tests.rb @@ -104,6 +104,35 @@ describe 'site page' do visit "/browse?tag=#{@tag}" _(page.find('.website-Gallery .username a')['href']).must_match /\/site\/#{@blocked_site.username}/ end + + it 'removes follows/followings when blocking' do + site = Fabricate :site + not_blocked_site = Fabricate :site + blocked_site = Fabricate :site + + site.add_follow actioning_site: not_blocked_site + site.add_following site: not_blocked_site + + site.add_follow actioning_site: blocked_site + site.add_following site: blocked_site + + _(site.follows.count).must_equal 2 + _(site.followings.count).must_equal 2 + + page.set_rack_session id: site.id + + visit "/site/#{blocked_site.username}" + + click_link 'Block' + click_button 'Block Site' + + _(site.follows.count).must_equal 1 + _(site.followings.count).must_equal 1 + + _(site.follows.count {|s| s.actioning_site == blocked_site}).must_equal 0 + _(site.followings.count {|s| s.site == blocked_site}).must_equal 0 + + end end it '404s if site is banned' do