diff --git a/app/lib/plugin_initializers/assigned_reminder_exclude_solved.rb b/app/lib/plugin_initializers/assigned_reminder_exclude_solved.rb index f3aa8f8..848536e 100644 --- a/app/lib/plugin_initializers/assigned_reminder_exclude_solved.rb +++ b/app/lib/plugin_initializers/assigned_reminder_exclude_solved.rb @@ -27,4 +27,14 @@ module DiscourseSolved end end end + + class AssignedCountForUserQuery < PluginInitializer + def apply_plugin_api + plugin.register_modifier(:assigned_count_for_user_query) do |query, user| + next query if !SiteSetting.ignore_solved_topics_in_assigned_reminder + next query if SiteSetting.assignment_status_on_solve.blank? + query.where.not(status: SiteSetting.assignment_status_on_solve) + end + end + end end diff --git a/plugin.rb b/plugin.rb index dc8f32b..2930ac9 100644 --- a/plugin.rb +++ b/plugin.rb @@ -47,6 +47,7 @@ after_initialize do require_relative "app/lib/plugin_initializers/assigned_reminder_exclude_solved" DiscourseSolved::AssignsReminderForTopicsQuery.new(self).apply_plugin_api + DiscourseSolved::AssignedCountForUserQuery.new(self).apply_plugin_api module ::DiscourseSolved def self.accept_answer!(post, acting_user, topic: nil) topic ||= post.topic diff --git a/spec/integration/solved_spec.rb b/spec/integration/solved_spec.rb index 75e4a90..e4120e0 100644 --- a/spec/integration/solved_spec.rb +++ b/spec/integration/solved_spec.rb @@ -532,6 +532,27 @@ RSpec.describe "Managing Posts solved status" do expect(topics).to include(other_topic) end end + + describe "assigned count for user" do + it "does not count solved topics using assignment_status_on_solve status" do + SiteSetting.ignore_solved_topics_in_assigned_reminder = true + + other_topic = Fabricate(:topic, title: "Topic that should be there") + post = Fabricate(:post, topic: other_topic, user: user) + + other_topic2 = Fabricate(:topic, title: "Topic that should be there2") + post2 = Fabricate(:post, topic: other_topic2, user: user) + + Assigner.new(post.topic, user).assign(user) + Assigner.new(post2.topic, user).assign(user) + + reminder = PendingAssignsReminder.new + expect(reminder.send(:assigned_count_for, user)).to eq(2) + + DiscourseSolved.accept_answer!(post2, Discourse.system_user) + expect(reminder.send(:assigned_count_for, user)).to eq(1) + end + end end end