From 8c9bd3863e1bfb44ca8aa7cbec2c27ee62e95727 Mon Sep 17 00:00:00 2001 From: Thomas Randolph Date: Tue, 15 Jul 2025 18:01:45 -0600 Subject: [PATCH 1/7] Auto collapse a line discussion if all threads on line are resolved Changelog: added --- .../notes/store/legacy_notes/actions.js | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/app/assets/javascripts/notes/store/legacy_notes/actions.js b/app/assets/javascripts/notes/store/legacy_notes/actions.js index 8d6814cc38e7e9..44a32fc129b59d 100644 --- a/app/assets/javascripts/notes/store/legacy_notes/actions.js +++ b/app/assets/javascripts/notes/store/legacy_notes/actions.js @@ -22,6 +22,7 @@ import { convertToGraphQLId } from '~/graphql_shared/utils'; import { TYPENAME_NOTE } from '~/graphql_shared/constants'; import { useBatchComments } from '~/batch_comments/store'; import { uuids } from '~/lib/utils/uuids'; +import { useLegacyDiffs } from '../../../diffs/stores/legacy_diffs'; import notesEventHub from '../../event_hub'; import promoteTimelineEvent from '../../graphql/promote_timeline_event.mutation.graphql'; @@ -411,6 +412,7 @@ export function resolveDiscussion({ discussionId }) { } export function toggleResolveNote({ endpoint, isResolved, discussion }) { + const discussionIdMatch = (endpoint || '').match(/discussions\/([^/]+)\/resolve$/); const method = isResolved ? constants.UNRESOLVE_NOTE_METHOD_NAME : constants.RESOLVE_NOTE_METHOD_NAME; @@ -422,6 +424,23 @@ export function toggleResolveNote({ endpoint, isResolved, discussion }) { this.updateResolvableDiscussionsCounts(); this.updateMergeRequestWidget(); + + if (!isResolved && discussion && discussionIdMatch) { + const discussions = this.discussions || []; + const discussionId = discussionIdMatch[1]; + const actualDiscussion = discussions.find((d) => d.id === discussionId); + const currentLineCode = actualDiscussion.line_code; + const lineDiscussions = discussions.filter((d) => d.line_code === currentLineCode); + const allLineDiscussionsResolved = lineDiscussions.every((d) => d.resolved); + + if (allLineDiscussionsResolved && currentLineCode && lineDiscussions.length > 0) { + useLegacyDiffs().toggleLineDiscussions({ + lineCode: actualDiscussion.line_code, + fileHash: actualDiscussion.diff_file?.file_hash, + expanded: false, + }); + } + } }); } -- GitLab From 7b082511748de3c6a9793005dc3779591fa52f5e Mon Sep 17 00:00:00 2001 From: Thomas Randolph Date: Tue, 15 Jul 2025 21:37:43 -0600 Subject: [PATCH 2/7] Add tests for updated notes action --- .../notes/store/legacy_notes/actions_spec.js | 164 +++++++++++++++++- 1 file changed, 163 insertions(+), 1 deletion(-) diff --git a/spec/frontend/notes/store/legacy_notes/actions_spec.js b/spec/frontend/notes/store/legacy_notes/actions_spec.js index 238f7a6dd15b50..1fdbc0ac59b7d4 100644 --- a/spec/frontend/notes/store/legacy_notes/actions_spec.js +++ b/spec/frontend/notes/store/legacy_notes/actions_spec.js @@ -43,7 +43,6 @@ jest.mock('~/alert', () => ({ dismiss: mockAlertDismiss, })), })); - jest.mock('~/vue_shared/plugins/global_toast'); describe('Actions Notes Store', () => { @@ -639,6 +638,169 @@ describe('Actions Notes Store', () => { ], ); }); + + describe('auto-collapse', () => { + let legacyDiffsStore; + let mockToggleLineDiscussions; + + beforeEach(() => { + legacyDiffsStore = useLegacyDiffs(); + mockToggleLineDiscussions = jest.fn(); + legacyDiffsStore.toggleLineDiscussions = mockToggleLineDiscussions; + }); + + it('collapses line discussions when all discussions on the line are resolved', () => { + const localRes = { + resolved: true, + expanded: true, + discussion_id: '1', + id: '1', + }; + + axiosMock.reset(); + axiosMock.onAny().reply(HTTP_STATUS_OK, localRes); + axiosMock.onPut(`${TEST_HOST}/discussions/1/resolve`).replyOnce(200, localRes); + + return testAction( + store.toggleResolveNote, + { endpoint: `${TEST_HOST}/discussions/1/resolve`, isResolved: false, discussion: true }, + { + discussions: [ + { + resolved: true, + discussion_id: '1', + id: '1', + individual_note: true, + notes: [], + line_code: 'abc123', + diff_file: { file_hash: 'file123' }, + }, + { + resolved: true, + discussion_id: '2', + id: '2', + individual_note: true, + notes: [], + line_code: 'abc123', + }, + ], + }, + [ + { + type: store[types.UPDATE_DISCUSSION], + payload: localRes, + }, + ], + [ + { + type: store.updateResolvableDiscussionsCounts, + }, + { + type: store.updateMergeRequestWidget, + }, + ], + ).then(() => { + expect(mockToggleLineDiscussions).toHaveBeenCalledWith({ + lineCode: 'abc123', + fileHash: 'file123', + expanded: false, + }); + }); + }); + + it('does not collapse when there are unresolved discussions on the same line', () => { + return testAction( + store.toggleResolveNote, + { endpoint: `${TEST_HOST}`, isResolved: false, discussion: true }, + { + discussions: [ + { + resolved: true, + discussion_id: 1, + id: 1, + individual_note: true, + notes: [], + line_code: 'abc123', + }, + { + resolved: false, + discussion_id: 2, + id: 2, + individual_note: true, + notes: [], + line_code: 'abc123', + }, + ], + }, + [ + { + type: store[types.UPDATE_DISCUSSION], + payload: res, + }, + ], + [ + { + type: store.updateResolvableDiscussionsCounts, + }, + { + type: store.updateMergeRequestWidget, + }, + ], + ); + }); + + it('does not collapse when unresolving a discussion', () => { + return testAction( + store.toggleResolveNote, + { endpoint: `${TEST_HOST}`, isResolved: true, discussion: true }, + { + discussions: [ + { resolved: false, discussion_id: 1, id: 1, individual_note: true, notes: [] }, + ], + }, + [ + { + type: store[types.UPDATE_DISCUSSION], + payload: res, + }, + ], + [ + { + type: store.updateResolvableDiscussionsCounts, + }, + { + type: store.updateMergeRequestWidget, + }, + ], + ); + }); + + it('does not collapse when discussion parameter is false', () => { + return testAction( + store.toggleResolveNote, + { endpoint: `${TEST_HOST}`, isResolved: false, discussion: false }, + { + discussions: [ + { resolved: true, discussion_id: 1, id: 1, individual_note: true, notes: [] }, + ], + }, + [ + { + type: store[types.UPDATE_NOTE], + payload: res, + }, + ], + [ + { + type: store.updateResolvableDiscussionsCounts, + }, + { + type: store.updateMergeRequestWidget, + }, + ], + ); + }); + }); }); }); -- GitLab From 85d7b7b663450f0e1703e0cfc8192e2e966a7193 Mon Sep 17 00:00:00 2001 From: Thomas Randolph Date: Tue, 15 Jul 2025 23:51:35 -0600 Subject: [PATCH 3/7] Remove circular legacy diffs import --- app/assets/javascripts/notes/store/legacy_notes/actions.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/assets/javascripts/notes/store/legacy_notes/actions.js b/app/assets/javascripts/notes/store/legacy_notes/actions.js index 44a32fc129b59d..1824cf0792b6ca 100644 --- a/app/assets/javascripts/notes/store/legacy_notes/actions.js +++ b/app/assets/javascripts/notes/store/legacy_notes/actions.js @@ -22,7 +22,6 @@ import { convertToGraphQLId } from '~/graphql_shared/utils'; import { TYPENAME_NOTE } from '~/graphql_shared/constants'; import { useBatchComments } from '~/batch_comments/store'; import { uuids } from '~/lib/utils/uuids'; -import { useLegacyDiffs } from '../../../diffs/stores/legacy_diffs'; import notesEventHub from '../../event_hub'; import promoteTimelineEvent from '../../graphql/promote_timeline_event.mutation.graphql'; @@ -434,7 +433,8 @@ export function toggleResolveNote({ endpoint, isResolved, discussion }) { const allLineDiscussionsResolved = lineDiscussions.every((d) => d.resolved); if (allLineDiscussionsResolved && currentLineCode && lineDiscussions.length > 0) { - useLegacyDiffs().toggleLineDiscussions({ + // tryStore only used for migration, refactor the store to avoid using this helper + this.tryStore('legacyDiffs').toggleLineDiscussions({ lineCode: actualDiscussion.line_code, fileHash: actualDiscussion.diff_file?.file_hash, expanded: false, -- GitLab From f3f58e29eb4586525f0714f625b6f344b222a2fc Mon Sep 17 00:00:00 2001 From: Thomas Randolph Date: Mon, 21 Jul 2025 20:38:14 -0600 Subject: [PATCH 4/7] Expand collapsed discussions before checking for applied status --- qa/qa/page/merge_request/show.rb | 29 +++++++ .../suggestions/batch_suggestion_spec.rb | 2 + .../custom_commit_suggestion_spec.rb | 2 + .../user_suggests_changes_on_diff_spec.rb | 10 +++ .../helpers/merge_request_diff_helpers.rb | 83 +++++++++++++++++++ 5 files changed, 126 insertions(+) diff --git a/qa/qa/page/merge_request/show.rb b/qa/qa/page/merge_request/show.rb index d558bf58514de8..5030f81156939d 100644 --- a/qa/qa/page/merge_request/show.rb +++ b/qa/qa/page/merge_request/show.rb @@ -551,6 +551,35 @@ def has_exposed_artifact_with_name?(name) has_link?(name) end + def has_collapsed_discussions?(scope: nil, wait_time: 2) + if scope + within(scope) do + has_css?('.js-diff-comment-avatar', wait: wait_time) + end + else + has_css?('.js-diff-comment-avatar', wait: wait_time) + end + rescue Selenium::WebDriver::Error::StaleElementReferenceError + # Element became stale, assume no collapsed discussions + false + end + + def expand_collapsed_discussions + return unless has_collapsed_discussions? + + retries = 0 + max_retries = 3 + + begin + all('.js-diff-comment-avatar', minimum: 1).first.click + wait_for_requests + sleep 0.5 + rescue Selenium::WebDriver::Error::StaleElementReferenceError + retries += 1 + retry if retries <= max_retries + end + end + private def submit_commit diff --git a/qa/qa/specs/features/browser_ui/3_create/merge_request/suggestions/batch_suggestion_spec.rb b/qa/qa/specs/features/browser_ui/3_create/merge_request/suggestions/batch_suggestion_spec.rb index abc5b51c53b801..aa9eb3d8a1d060 100644 --- a/qa/qa/specs/features/browser_ui/3_create/merge_request/suggestions/batch_suggestion_spec.rb +++ b/qa/qa/specs/features/browser_ui/3_create/merge_request/suggestions/batch_suggestion_spec.rb @@ -42,6 +42,8 @@ module QA 4.times { merge_request.add_suggestion_to_batch } merge_request.apply_suggestion_with_message("Custom commit message") + merge_request.expand_collapsed_discussions if merge_request.has_collapsed_discussions? + expect(merge_request).to have_suggestions_applied(4) end end diff --git a/qa/qa/specs/features/browser_ui/3_create/merge_request/suggestions/custom_commit_suggestion_spec.rb b/qa/qa/specs/features/browser_ui/3_create/merge_request/suggestions/custom_commit_suggestion_spec.rb index 6bd1c7d226edb9..8bbce7926d306e 100644 --- a/qa/qa/specs/features/browser_ui/3_create/merge_request/suggestions/custom_commit_suggestion_spec.rb +++ b/qa/qa/specs/features/browser_ui/3_create/merge_request/suggestions/custom_commit_suggestion_spec.rb @@ -38,6 +38,8 @@ module QA merge_request.click_diffs_tab merge_request.apply_suggestion_with_message(commit_message) + merge_request.expand_collapsed_discussions if merge_request.has_collapsed_discussions? + expect(merge_request).to have_suggestions_applied merge_request.click_commits_tab diff --git a/spec/features/merge_request/user_suggests_changes_on_diff_spec.rb b/spec/features/merge_request/user_suggests_changes_on_diff_spec.rb index dd9dc31c2d4f6a..7cfc000d05aec8 100644 --- a/spec/features/merge_request/user_suggests_changes_on_diff_spec.rb +++ b/spec/features/merge_request/user_suggests_changes_on_diff_spec.rb @@ -105,6 +105,9 @@ def expect_suggestion_has_content(element, expected_changing_content, expected_s click_button('Apply suggestion') click_button('Apply') wait_for_requests + sleep 0.2 # Allow auto-collapse to complete + + expand_collapsed_discussions_if_present expect(page).to have_content('Applied') end @@ -210,6 +213,9 @@ def hash(path) wait_for_requests end + sleep 0.2 # Allow auto-collapse to complete + expand_all_collapsed_discussions + expect(page).to have_content('Applied').twice end end @@ -393,6 +399,8 @@ def hash(path) click_button('Apply') wait_for_requests + expand_collapsed_discussions_if_present + expect(page).to have_content('Applied') end end @@ -405,6 +413,8 @@ def hash(path) click_button('Apply') wait_for_requests + expand_collapsed_discussions_if_present + expect(page).to have_content('Reopen thread') end end diff --git a/spec/support/helpers/merge_request_diff_helpers.rb b/spec/support/helpers/merge_request_diff_helpers.rb index bbd9382fcc2def..fca87ea4571ee2 100644 --- a/spec/support/helpers/merge_request_diff_helpers.rb +++ b/spec/support/helpers/merge_request_diff_helpers.rb @@ -93,4 +93,87 @@ def find_by_scrolling(selector, **options) end element end + + def expand_collapsed_discussions_if_present(scope: nil, wait_time: 5) + return unless has_collapsed_discussions?(scope: scope) + + retries = 0 + max_retries = 3 + + begin + if scope + within(scope) do + find('.js-diff-comment-avatar', match: :first, wait: wait_time).click + end + else + find('.js-diff-comment-avatar', match: :first, wait: wait_time).click + end + + wait_for_requests + sleep 0.2 + + rescue Selenium::WebDriver::Error::StaleElementReferenceError, Capybara::ElementNotFound + retries += 1 + if retries <= max_retries + sleep 0.2 + retry + end + rescue Capybara::Ambiguous + all('.js-diff-comment-avatar', minimum: 1).first.click + wait_for_requests + sleep 0.2 + end + end + + def expand_all_collapsed_discussions(max_attempts: 5, scope: nil) + attempts = 0 + + while has_collapsed_discussions?(scope: scope) && attempts < max_attempts + retries = 0 + max_retries = 2 + + begin + if scope + within(scope) do + find('.js-diff-comment-avatar', match: :first, wait: 2).click + end + else + find('.js-diff-comment-avatar', match: :first, wait: 2).click + end + + wait_for_requests + sleep 0.2 + + rescue Selenium::WebDriver::Error::StaleElementReferenceError + retries += 1 + break unless retries <= max_retries + + sleep 0.2 + retry + + rescue Capybara::ElementNotFound + break + rescue Capybara::Ambiguous + all('.js-diff-comment-avatar', minimum: 1).first.click + wait_for_requests + sleep 0.2 + end + + attempts += 1 + end + end + + private + + def has_collapsed_discussions?(scope: nil, wait_time: 2) + if scope + within(scope) do + has_css?('.js-diff-comment-avatar', wait: wait_time) + end + else + has_css?('.js-diff-comment-avatar', wait: wait_time) + end + rescue Selenium::WebDriver::Error::StaleElementReferenceError + false + end end -- GitLab From 1c09e2da8d85fe5606eed8544ab05c83c67788e0 Mon Sep 17 00:00:00 2001 From: Phil Hughes Date: Wed, 23 Jul 2025 12:12:48 +0100 Subject: [PATCH 5/7] Fixed failing feature specs Attempted fix at QA specs --- qa/qa/page/merge_request/show.rb | 27 +----- .../suggestions/batch_suggestion_spec.rb | 2 +- .../custom_commit_suggestion_spec.rb | 2 +- .../user_suggests_changes_on_diff_spec.rb | 18 ++-- .../helpers/merge_request_diff_helpers.rb | 83 +------------------ 5 files changed, 20 insertions(+), 112 deletions(-) diff --git a/qa/qa/page/merge_request/show.rb b/qa/qa/page/merge_request/show.rb index 5030f81156939d..4570c9ce947be6 100644 --- a/qa/qa/page/merge_request/show.rb +++ b/qa/qa/page/merge_request/show.rb @@ -551,33 +551,8 @@ def has_exposed_artifact_with_name?(name) has_link?(name) end - def has_collapsed_discussions?(scope: nil, wait_time: 2) - if scope - within(scope) do - has_css?('.js-diff-comment-avatar', wait: wait_time) - end - else - has_css?('.js-diff-comment-avatar', wait: wait_time) - end - rescue Selenium::WebDriver::Error::StaleElementReferenceError - # Element became stale, assume no collapsed discussions - false - end - def expand_collapsed_discussions - return unless has_collapsed_discussions? - - retries = 0 - max_retries = 3 - - begin - all('.js-diff-comment-avatar', minimum: 1).first.click - wait_for_requests - sleep 0.5 - rescue Selenium::WebDriver::Error::StaleElementReferenceError - retries += 1 - retry if retries <= max_retries - end + find_all('.js-diff-comment-avatar').each(&:click) end private diff --git a/qa/qa/specs/features/browser_ui/3_create/merge_request/suggestions/batch_suggestion_spec.rb b/qa/qa/specs/features/browser_ui/3_create/merge_request/suggestions/batch_suggestion_spec.rb index aa9eb3d8a1d060..5cd78fa717b433 100644 --- a/qa/qa/specs/features/browser_ui/3_create/merge_request/suggestions/batch_suggestion_spec.rb +++ b/qa/qa/specs/features/browser_ui/3_create/merge_request/suggestions/batch_suggestion_spec.rb @@ -42,7 +42,7 @@ module QA 4.times { merge_request.add_suggestion_to_batch } merge_request.apply_suggestion_with_message("Custom commit message") - merge_request.expand_collapsed_discussions if merge_request.has_collapsed_discussions? + merge_request.expand_collapsed_discussions expect(merge_request).to have_suggestions_applied(4) end diff --git a/qa/qa/specs/features/browser_ui/3_create/merge_request/suggestions/custom_commit_suggestion_spec.rb b/qa/qa/specs/features/browser_ui/3_create/merge_request/suggestions/custom_commit_suggestion_spec.rb index 8bbce7926d306e..ac9c8640460e25 100644 --- a/qa/qa/specs/features/browser_ui/3_create/merge_request/suggestions/custom_commit_suggestion_spec.rb +++ b/qa/qa/specs/features/browser_ui/3_create/merge_request/suggestions/custom_commit_suggestion_spec.rb @@ -38,7 +38,7 @@ module QA merge_request.click_diffs_tab merge_request.apply_suggestion_with_message(commit_message) - merge_request.expand_collapsed_discussions if merge_request.has_collapsed_discussions? + merge_request.expand_collapsed_discussions expect(merge_request).to have_suggestions_applied diff --git a/spec/features/merge_request/user_suggests_changes_on_diff_spec.rb b/spec/features/merge_request/user_suggests_changes_on_diff_spec.rb index 7cfc000d05aec8..9a2ec37d5b3b37 100644 --- a/spec/features/merge_request/user_suggests_changes_on_diff_spec.rb +++ b/spec/features/merge_request/user_suggests_changes_on_diff_spec.rb @@ -105,10 +105,11 @@ def expect_suggestion_has_content(element, expected_changing_content, expected_s click_button('Apply suggestion') click_button('Apply') wait_for_requests - sleep 0.2 # Allow auto-collapse to complete + end - expand_collapsed_discussions_if_present + expand_collapsed_discussions + page.within('.diff-discussions') do expect(page).to have_content('Applied') end end @@ -213,7 +214,6 @@ def hash(path) wait_for_requests end - sleep 0.2 # Allow auto-collapse to complete expand_all_collapsed_discussions expect(page).to have_content('Applied').twice @@ -278,7 +278,11 @@ def hash(path) all('button', text: 'Apply suggestion').first.click click_button('Apply') wait_for_requests + end + expand_collapsed_discussions + + page.within(container) do expect(page).to have_content('Applied').once expect(page).to have_button('Apply suggestion').once @@ -398,9 +402,11 @@ def hash(path) click_button('Apply suggestion') click_button('Apply') wait_for_requests + end - expand_collapsed_discussions_if_present + expand_collapsed_discussions + page.within("[id='#{hash}']") do expect(page).to have_content('Applied') end end @@ -412,9 +418,11 @@ def hash(path) click_button('Apply suggestion') click_button('Apply') wait_for_requests + end - expand_collapsed_discussions_if_present + expand_collapsed_discussions + page.within("[id='#{hash}']") do expect(page).to have_content('Reopen thread') end end diff --git a/spec/support/helpers/merge_request_diff_helpers.rb b/spec/support/helpers/merge_request_diff_helpers.rb index fca87ea4571ee2..dd296bba31bda8 100644 --- a/spec/support/helpers/merge_request_diff_helpers.rb +++ b/spec/support/helpers/merge_request_diff_helpers.rb @@ -94,86 +94,11 @@ def find_by_scrolling(selector, **options) element end - def expand_collapsed_discussions_if_present(scope: nil, wait_time: 5) - return unless has_collapsed_discussions?(scope: scope) - - retries = 0 - max_retries = 3 - - begin - if scope - within(scope) do - find('.js-diff-comment-avatar', match: :first, wait: wait_time).click - end - else - find('.js-diff-comment-avatar', match: :first, wait: wait_time).click - end - - wait_for_requests - sleep 0.2 - - rescue Selenium::WebDriver::Error::StaleElementReferenceError, Capybara::ElementNotFound - retries += 1 - if retries <= max_retries - sleep 0.2 - retry - end - rescue Capybara::Ambiguous - all('.js-diff-comment-avatar', minimum: 1).first.click - wait_for_requests - sleep 0.2 - end + def expand_collapsed_discussions + first('.js-diff-comment-avatar').click end - def expand_all_collapsed_discussions(max_attempts: 5, scope: nil) - attempts = 0 - - while has_collapsed_discussions?(scope: scope) && attempts < max_attempts - retries = 0 - max_retries = 2 - - begin - if scope - within(scope) do - find('.js-diff-comment-avatar', match: :first, wait: 2).click - end - else - find('.js-diff-comment-avatar', match: :first, wait: 2).click - end - - wait_for_requests - sleep 0.2 - - rescue Selenium::WebDriver::Error::StaleElementReferenceError - retries += 1 - break unless retries <= max_retries - - sleep 0.2 - retry - - rescue Capybara::ElementNotFound - break - rescue Capybara::Ambiguous - all('.js-diff-comment-avatar', minimum: 1).first.click - wait_for_requests - sleep 0.2 - end - - attempts += 1 - end - end - - private - - def has_collapsed_discussions?(scope: nil, wait_time: 2) - if scope - within(scope) do - has_css?('.js-diff-comment-avatar', wait: wait_time) - end - else - has_css?('.js-diff-comment-avatar', wait: wait_time) - end - rescue Selenium::WebDriver::Error::StaleElementReferenceError - false + def expand_all_collapsed_discussions + all('.js-diff-comment-avatar').each(&:click) end end -- GitLab From d5119ecbe669b7cc71418fa5a758a6a1772c673d Mon Sep 17 00:00:00 2001 From: Jay McCure Date: Thu, 24 Jul 2025 11:15:45 +1000 Subject: [PATCH 6/7] Apply 1 suggestion(s) to 1 file(s) --- qa/qa/page/merge_request/show.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/qa/qa/page/merge_request/show.rb b/qa/qa/page/merge_request/show.rb index 4570c9ce947be6..d33f81d7215eeb 100644 --- a/qa/qa/page/merge_request/show.rb +++ b/qa/qa/page/merge_request/show.rb @@ -552,7 +552,7 @@ def has_exposed_artifact_with_name?(name) end def expand_collapsed_discussions - find_all('.js-diff-comment-avatar').each(&:click) + all_elements('.js-diff-comment-avatar', minimum: 1).each(&:click) end private -- GitLab From db96f84f5a98ce8043879b7dfa67830a9c2697e8 Mon Sep 17 00:00:00 2001 From: Jay McCure Date: Thu, 24 Jul 2025 13:06:51 +1000 Subject: [PATCH 7/7] Apply 1 suggestion(s) to 1 file(s) --- qa/qa/page/merge_request/show.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/qa/qa/page/merge_request/show.rb b/qa/qa/page/merge_request/show.rb index d33f81d7215eeb..e5ea16be682e2c 100644 --- a/qa/qa/page/merge_request/show.rb +++ b/qa/qa/page/merge_request/show.rb @@ -552,7 +552,7 @@ def has_exposed_artifact_with_name?(name) end def expand_collapsed_discussions - all_elements('.js-diff-comment-avatar', minimum: 1).each(&:click) + all_elements('left-discussions', minimum: 1).each(&:click) end private -- GitLab