Browse Source

Fixes #3853 - Displayed ticket counter for overviews with subscribe condition differs from number of shown tickets.

Florian Liebe 2 years ago
parent
commit
a6b68eedbe
2 changed files with 35 additions and 4 deletions
  1. 1 1
      app/models/ticket/overviews.rb
  2. 34 3
      spec/models/ticket/overviews_spec.rb

+ 1 - 1
app/models/ticket/overviews.rb

@@ -97,7 +97,7 @@ returns
         }
       end
 
-      count = TicketPolicy::OverviewScope.new(user).resolve
+      count = scope.new(user).resolve
         .distinct
         .where(db_query_params.query_condition, *db_query_params.bind_condition)
         .joins(db_query_params.tables)

+ 34 - 3
spec/models/ticket/overviews_spec.rb

@@ -72,9 +72,40 @@ RSpec.describe Ticket::Overviews do
       result = described_class.index(user)
       result = result.select { |x| x[:overview][:name] == overview.name }
 
-      expect(result.count).to be == 1
-      expect(result[0][:count]).to be == 2
-      expect(result[0][:tickets].count).to be == 2
+      expect(result.count).to eq(1)
+      expect(result[0][:count]).to eq(2)
+      expect(result[0][:tickets].count).to eq(2)
+    end
+
+    # https://github.com/zammad/zammad/issues/3853
+    context 'with specific group permissions' do
+      let(:group_read)      { create(:group) }
+      let(:group_overview)  { create(:group) }
+      let(:user)            { create(:agent) }
+      let(:ticket_read)     { create(:ticket, group: group_read) }
+      let(:ticket_overview) { create(:ticket, group: group_overview) }
+
+      before do
+        user.group_names_access_map = {
+          group_read.name     => %w[read],
+          group_overview.name => %w[read overview],
+        }
+
+        create(:mention, mentionable: ticket_read, user: user)
+        create(:mention, mentionable: ticket_overview, user: user)
+      end
+
+      it 'displays the correct amount of tickets in the sidebar' do
+        result = described_class.index(user, ['my_subscribed_tickets'])
+
+        expect(result.first[:count]).to eq(2)
+      end
+
+      it 'displays the correct amount of tickets in the list' do
+        result = described_class.index(user, ['my_subscribed_tickets'])
+
+        expect(result.first[:tickets].pluck(:id)).to eq([ticket_read.id, ticket_overview.id])
+      end
     end
   end