Browse Source

Fixes #5405 - Checklist feature: inaccessible tickets which are referenced in a checklist are always counted as checked/closed

Mantas 4 months ago
parent
commit
22f74e2b3b

+ 1 - 13
app/assets/javascripts/app/models/checklist.coffee

@@ -14,19 +14,7 @@ class App.Checklist extends App.Model
     App.ChecklistItem.findAll(@sorted_item_ids)
 
   open_items: =>
-    @sorted_items().filter (item) ->
-      if item.ticket_id
-        ticket = App.Ticket.find(item.ticket_id)
-        if ticket
-          if ticket.userGroupAccess('read')
-            ticketState    = App.TicketState.fullLocal(ticket.state_id)
-            ticketState.state_type.name isnt 'closed' && ticketState.state_type.name isnt 'merged'
-          else
-            false # no access
-        else
-          false # no access
-      else
-        !item.checked
+    @sorted_items().filter (item) -> !item.checked
 
   @calculateState: (ticket) ->
     checklist = App.Checklist.find ticket.checklist_id

+ 18 - 0
spec/system/ticket/zoom/checklist_spec.rb

@@ -351,4 +351,22 @@ RSpec.describe 'Ticket zoom > Checklist', authenticated_as: :authenticate, curre
       expect(page).to have_css(".tabsSidebar-tab[data-tab='checklist'] .js-tabCounter", text: ticket.checklist.incomplete)
     end
   end
+
+  # https://github.com/zammad/zammad/issues/5405
+  describe 'Checklist counter shows real state of inaccessible linked tickets' do
+    let(:ticket_link) { create(:ticket, group: create(:group)) }
+    let(:ticket)      { create(:ticket, group: Group.first) }
+    let(:checklist) do
+      create(:checklist, ticket: ticket)
+        .tap { |checklist| checklist.items.last.update(text: "Ticket##{ticket_link.number}") }
+    end
+
+    before { checklist }
+
+    it 'does update for badge when sidebar is not opened and same user updates related tickets' do
+      expect(page)
+        .to have_css(".tabsSidebar-tab[data-tab='checklist'] .js-tabCounter", text: ticket.checklist.incomplete)
+        .and(have_css('.js-checklist-state .ticket-meta-highlighted', text: "#{ticket.checklist.complete} of #{ticket.checklist.total}"))
+    end
+  end
 end