Skip to content

Commit

Permalink
add test
Browse files Browse the repository at this point in the history
  • Loading branch information
wendyyang committed Sep 19, 2024
1 parent 1de84b2 commit 3a8e122
Show file tree
Hide file tree
Showing 2 changed files with 22 additions and 10 deletions.
6 changes: 3 additions & 3 deletions app/models/comment.rb
Original file line number Diff line number Diff line change
Expand Up @@ -34,13 +34,13 @@ def self.counts_for(commentables)
# @return [Hash] Hash of counts indexed by request_id
#
def self.counts_for_requests(requests) # rubocop:todo Metrics/AbcSize
all_commentables = requests.flat_map { |request| [request, request.try(:asset), request.try(:asset).try(:labware)] }
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.try(:asset_id)], 0)
labware_count = counts.fetch(['Labware', request.try(:asset).try(:labware_id)], 0)
receptacle_count = counts.fetch(['Receptacle', request.asset_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
26 changes: 19 additions & 7 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(:request1) { 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'
let(:request2) { create :sequencing_request }

context 'when request has asset' do
before do
create :comment, commentable: tube, description: 'An excellent tube'
create :comment, commentable: tube.receptacle, description: 'A good receptacle'
create :comment, commentable: request1, description: 'A reasonable request1'
end

it 'counts comments on requests, their assets and receptacles' do
expect(described_class.counts_for_requests([request1])).to eq({ request1.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
before { create :comment, commentable: request2, description: 'A reasonable request2' }

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

Expand Down

0 comments on commit 3a8e122

Please sign in to comment.