diff --git a/plugin.rb b/plugin.rb index c71d4495..ba8c9e1e 100644 --- a/plugin.rb +++ b/plugin.rb @@ -872,6 +872,15 @@ module ::DiscourseAssign end end + on(:group_destroyed) do |group, user_ids| + user_ids.each do |user_id| + user = User.find(user_id) + user.notifications.for_assignment(group.assignments.select(:id)).destroy_all if user + end + + Assignment.active_for_group(group).destroy_all + end + register_search_advanced_filter(/in:assigned/) do |posts| posts.where(<<~SQL) if @guardian.can_assign? topics.id IN ( diff --git a/spec/plugin_spec.rb b/spec/plugin_spec.rb index fd69debb..01d40b4b 100644 --- a/spec/plugin_spec.rb +++ b/spec/plugin_spec.rb @@ -146,5 +146,33 @@ expect_job_enqueued(job: Jobs::AssignNotification, args: { assignment_id: assignment.id }) end end + + describe "on 'group_destroyed'" do + let(:group) { Fabricate(:group) } + let(:user) { Fabricate(:user) } + let(:first_assignment) { Fabricate(:topic_assignment, assigned_to: group) } + let(:second_assignment) { Fabricate(:post_assignment, assigned_to: group) } + + before do + group.users << user + Fabricate( + :notification, + notification_type: Notification.types[:assigned], + user: user, + data: { assignment_id: first_assignment.id }.to_json, + ) + Fabricate( + :notification, + notification_type: Notification.types[:assigned], + user: user, + data: { assignment_id: second_assignment.id }.to_json, + ) + end + + it "removes user's notifications related to group assignments" do + + expect { group.destroy }.to change { user.notifications.assigned.count }.by(-2) + end + end end end