Skip to content

Commit

Permalink
Merge pull request #4353 from sanger/4309-bug-exception-29082024-at-1042
Browse files Browse the repository at this point in the history
4309 bug exception 29082024 at 1042
  • Loading branch information
wendyyang authored Sep 19, 2024
2 parents d361b8d + cc0703d commit 97e4f35
Show file tree
Hide file tree
Showing 2 changed files with 22 additions and 9 deletions.
3 changes: 2 additions & 1 deletion app/models/comment.rb
Original file line number Diff line number Diff line change
Expand Up @@ -36,10 +36,11 @@ def self.counts_for(commentables)
def self.counts_for_requests(requests) # rubocop:todo Metrics/AbcSize
all_commentables = requests.flat_map { |request| [request, request.asset, request.asset&.labware] }
counts = where(commentable: all_commentables.compact).group(:commentable_type, :commentable_id).count

requests.each_with_object({}) do |request, counter_cache|
request_count = counts.fetch(['Request', request.id], 0)
receptacle_count = counts.fetch(['Receptacle', request.asset_id], 0)
labware_count = counts.fetch(['Labware', request.asset.labware_id], 0)
labware_count = counts.fetch(['Labware', request.asset&.labware_id], 0)
counter_cache[request.id] = request_count + receptacle_count + labware_count
end
end
Expand Down
28 changes: 20 additions & 8 deletions spec/models/comment_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -18,17 +18,29 @@
end

describe '#counts_for_requests' do
let(:request) { create :sequencing_request, asset: tube }
let(:tube) { create :multiplexed_library_tube }
context 'when request has asset' do
let(:request) { create :sequencing_request, asset: tube }
let(:tube) { create :multiplexed_library_tube }

before do
create :comment, commentable: tube, description: 'An excellent tube'
create :comment, commentable: tube.receptacle, description: 'A good receptacle'
create :comment, commentable: request, description: 'A reasonable request'
before do
create :comment, commentable: tube, description: 'An excellent tube'
create :comment, commentable: tube.receptacle, description: 'A good receptacle'
create :comment, commentable: request, description: 'A reasonable request'
end

it 'counts comments on requests, their assets and receptacles' do
expect(described_class.counts_for_requests([request])).to eq({ request.id => 3 })
end
end

it 'counts comments on requests, their assets and receptacles' do
expect(described_class.counts_for_requests([request])).to eq({ request.id => 3 })
context 'when request has no asset' do
let(:request) { create :sequencing_request }

before { create :comment, commentable: request, description: 'A reasonable request' }

it 'counts comments on requests only' do
expect(described_class.counts_for_requests([request])).to eq({ request.id => 1 })
end
end
end

Expand Down

0 comments on commit 97e4f35

Please sign in to comment.