diff --git a/app/models/bot/smooch.rb b/app/models/bot/smooch.rb index 733150193..5f7cd045d 100644 --- a/app/models/bot/smooch.rb +++ b/app/models/bot/smooch.rb @@ -42,13 +42,12 @@ def report_image def get_deduplicated_tipline_requests uids = [] tipline_requests = [] - ProjectMedia.where(id: self.related_items_ids).each do |pm| - pm.tipline_requests.find_each do |tr| - uid = tr.tipline_user_uid - next if uids.include?(uid) - uids << uid - tipline_requests << tr - end + pm_ids = ProjectMedia.where(id: self.related_items_ids).map(&:id) + TiplineRequest.where(associated_type: 'ProjectMedia', associated_id: pm_ids).find_each do |tr| + uid = tr.tipline_user_uid + next if uids.include?(uid) + uids << uid + tipline_requests << tr end tipline_requests end diff --git a/test/models/project_media_8_test.rb b/test/models/project_media_8_test.rb index 9323805f3..4ec1d1d2d 100644 --- a/test/models/project_media_8_test.rb +++ b/test/models/project_media_8_test.rb @@ -40,4 +40,26 @@ def teardown assert_equal 1, pm.annotations('tag').count end + + test "should verify n + 1 for deduplicated TiplineRequest(CV2-5464)" do + t = create_team + pm = create_project_media team: t + pm2 = create_project_media team: t + pm3 = create_project_media team: t + create_relationship source_id: pm.id, target_id: pm2.id, relationship_type: Relationship.confirmed_type + [pm, pm2, pm3].each do |ass| + create_tipline_request team_id: t.id, associated: ass + end + assert_queries(4, '=') { + pm.get_deduplicated_tipline_requests + } + # Should add a new item for related_items_ids and got same queries count + create_relationship source_id: pm.id, target_id: pm3.id, relationship_type: Relationship.confirmed_type + [pm, pm2, pm3].each do |ass| + create_tipline_request team_id: t.id, associated: ass + end + assert_queries(4, '=') { + pm.get_deduplicated_tipline_requests + } + end end