From 3a8e12200d2ae09141cce97e2407fb4d60d56991 Mon Sep 17 00:00:00 2001 From: Wendy Yang Date: Thu, 19 Sep 2024 14:05:38 +0100 Subject: [PATCH] add test --- app/models/comment.rb | 6 +++--- spec/models/comment_spec.rb | 26 +++++++++++++++++++------- 2 files changed, 22 insertions(+), 10 deletions(-) diff --git a/app/models/comment.rb b/app/models/comment.rb index 329d221530..c792088dbc 100644 --- a/app/models/comment.rb +++ b/app/models/comment.rb @@ -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 diff --git a/spec/models/comment_spec.rb b/spec/models/comment_spec.rb index 153ea85bee..97b52c8206 100644 --- a/spec/models/comment_spec.rb +++ b/spec/models/comment_spec.rb @@ -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