From 7d35b905225259402217774448ef2c07d3399eb3 Mon Sep 17 00:00:00 2001 From: Stan Hu Date: Thu, 21 Aug 2025 22:54:14 -0700 Subject: [PATCH 01/16] Bump Chrome in CI to v138 Chrome v123 is over a year old, and some of the new frontend work requires an updated Chrome. --- .gitlab/ci/version.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitlab/ci/version.yml b/.gitlab/ci/version.yml index b27315b73c1b8e..45f9c859d880bf 100644 --- a/.gitlab/ci/version.yml +++ b/.gitlab/ci/version.yml @@ -1,6 +1,6 @@ variables: BUILD_OS: "debian" - CHROME_VERSION: "123" + CHROME_VERSION: "138" DOCKER_VERSION: "27.4.1" EXIFTOOL_VERSION: "12.60" GCLOUD_VERSION: "413" -- GitLab From 182c17457088cca75706f4121a629a7a0f28958f Mon Sep 17 00:00:00 2001 From: Kushal Pandya Date: Mon, 25 Aug 2025 16:26:28 -0400 Subject: [PATCH 02/16] Bump Chrome for QA specs to 138 --- qa/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/qa/Dockerfile b/qa/Dockerfile index 63d08e6468175e..91efe55a9bd3c5 100644 --- a/qa/Dockerfile +++ b/qa/Dockerfile @@ -1,5 +1,5 @@ ARG BUILD_OS=debian -ARG CHROME_VERSION=123 +ARG CHROME_VERSION=138 ARG DOCKER_VERSION=24.0.5 ARG GCLOUD_VERSION=413 ARG GIT_VERSION=2.45 -- GitLab From 9fcf334cb1e26ddefa2fd6067cbecf149713c9b0 Mon Sep 17 00:00:00 2001 From: Kushal Pandya Date: Mon, 25 Aug 2025 16:28:30 -0400 Subject: [PATCH 03/16] Isolate Chrome data directory per process --- spec/support/capybara.rb | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/spec/support/capybara.rb b/spec/support/capybara.rb index 10bf75f577f0f8..2c5997bef87ffb 100644 --- a/spec/support/capybara.rb +++ b/spec/support/capybara.rb @@ -64,7 +64,10 @@ options.add_argument("disable-dev-shm-usage") if ENV['CI'] || ENV['CI_SERVER'] # Explicitly set user-data-dir to prevent crashes. See https://gitlab.com/gitlab-org/gitlab-foss/issues/58882#note_179811508 - options.add_argument("user-data-dir=/tmp/chrome") if ENV['CI'] || ENV['CI_SERVER'] + if ENV['CI'] || ENV['CI_SERVER'] + unique_dir = "/tmp/chrome_#{Process.pid}" + options.add_argument("user-data-dir=#{unique_dir}") + end # Set chrome default download path if ENV['DEFAULT_CHROME_DOWNLOAD_PATH'] -- GitLab From be05b897fd198ef88e4806f2958d5654ed53c15c Mon Sep 17 00:00:00 2001 From: Mark Florian Date: Tue, 26 Aug 2025 11:48:25 +0100 Subject: [PATCH 04/16] Try an earlier version of Chome See https://github.com/teamcapybara/capybara/issues/2800 --- .gitlab/ci/version.yml | 2 +- qa/Dockerfile | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.gitlab/ci/version.yml b/.gitlab/ci/version.yml index 45f9c859d880bf..58665cf08f15c9 100644 --- a/.gitlab/ci/version.yml +++ b/.gitlab/ci/version.yml @@ -1,6 +1,6 @@ variables: BUILD_OS: "debian" - CHROME_VERSION: "138" + CHROME_VERSION: "133" DOCKER_VERSION: "27.4.1" EXIFTOOL_VERSION: "12.60" GCLOUD_VERSION: "413" diff --git a/qa/Dockerfile b/qa/Dockerfile index 91efe55a9bd3c5..e0f3f5047dd0d7 100644 --- a/qa/Dockerfile +++ b/qa/Dockerfile @@ -1,5 +1,5 @@ ARG BUILD_OS=debian -ARG CHROME_VERSION=138 +ARG CHROME_VERSION=133 ARG DOCKER_VERSION=24.0.5 ARG GCLOUD_VERSION=413 ARG GIT_VERSION=2.45 -- GitLab From 66b0ce77891b94dab0de1011790ed65e7ff04c62 Mon Sep 17 00:00:00 2001 From: Stan Hu Date: Sun, 31 Aug 2025 18:44:40 -0700 Subject: [PATCH 05/16] Bump Git version to 2.51 --- .gitlab/ci/version.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitlab/ci/version.yml b/.gitlab/ci/version.yml index 58665cf08f15c9..751f8821216c61 100644 --- a/.gitlab/ci/version.yml +++ b/.gitlab/ci/version.yml @@ -4,7 +4,7 @@ variables: DOCKER_VERSION: "27.4.1" EXIFTOOL_VERSION: "12.60" GCLOUD_VERSION: "413" - GIT_VERSION: "2.49" + GIT_VERSION: "2.51" GO_VERSION: "1.23" GRAPHICSMAGICK_VERSION: "1.3.36" HELM_VERSION: "3.16" -- GitLab From 8e05130dac1f012b80981ccb60bbdd623ceced61 Mon Sep 17 00:00:00 2001 From: Mark Florian Date: Mon, 1 Sep 2025 09:21:34 +0100 Subject: [PATCH 06/16] Try removing user-data-dir option See https://gitlab.com/gitlab-org/gitlab/-/jobs/11199303978 for example failures: ``` Selenium::WebDriver::Error::SessionNotCreatedError: session not created: probably user data directory is already in use, please specify a unique value for --user-data-dir argument, or don't use --user-data-dir ``` --- spec/support/capybara.rb | 6 ------ 1 file changed, 6 deletions(-) diff --git a/spec/support/capybara.rb b/spec/support/capybara.rb index 2c5997bef87ffb..7d58a81ede1577 100644 --- a/spec/support/capybara.rb +++ b/spec/support/capybara.rb @@ -63,12 +63,6 @@ # Disable /dev/shm use in CI. See https://gitlab.com/gitlab-org/gitlab/issues/4252 options.add_argument("disable-dev-shm-usage") if ENV['CI'] || ENV['CI_SERVER'] - # Explicitly set user-data-dir to prevent crashes. See https://gitlab.com/gitlab-org/gitlab-foss/issues/58882#note_179811508 - if ENV['CI'] || ENV['CI_SERVER'] - unique_dir = "/tmp/chrome_#{Process.pid}" - options.add_argument("user-data-dir=#{unique_dir}") - end - # Set chrome default download path if ENV['DEFAULT_CHROME_DOWNLOAD_PATH'] options.add_preference("download.default_directory", ENV['DEFAULT_CHROME_DOWNLOAD_PATH']) -- GitLab From 9ed9a5718276064652befd33739c8a2b880a2361 Mon Sep 17 00:00:00 2001 From: Stan Hu Date: Mon, 1 Sep 2025 14:37:29 -0700 Subject: [PATCH 07/16] Drop Go 1.22 support and add Go 1.25 for Workhorse images --- .gitlab/ci/workhorse.gitlab-ci.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.gitlab/ci/workhorse.gitlab-ci.yml b/.gitlab/ci/workhorse.gitlab-ci.yml index 140d98c7202ef7..54c9821b5ed68a 100644 --- a/.gitlab/ci/workhorse.gitlab-ci.yml +++ b/.gitlab/ci/workhorse.gitlab-ci.yml @@ -46,7 +46,7 @@ workhorse:test go: extends: .workhorse:test parallel: matrix: - - GO_VERSION: ["1.22", "1.23", "1.24"] + - GO_VERSION: ["1.23", "1.24", "1.25"] REDIS_VERSION: ["7.0", "6.2"] script: - make -C workhorse test-coverage @@ -70,7 +70,7 @@ workhorse:test fips: - setup-test-env-fips parallel: matrix: - - GO_VERSION: ["1.22", "1.23", "1.24"] + - GO_VERSION: ["1.23", "1.24", "1.25"] REDIS_VERSION: ["7.0", "6.2"] image: ${REGISTRY_HOST}/${REGISTRY_GROUP}/gitlab-build-images/${BUILD_OS}-${OS_VERSION}-ruby-${RUBY_VERSION}-golang-${GO_VERSION}-rust-${RUST_VERSION}:rubygems-${RUBYGEMS_VERSION}-git-${GIT_VERSION}-exiftool-${EXIFTOOL_VERSION} variables: -- GitLab From 1602ab88a61c9b263aeec88e6d26651b80036a15 Mon Sep 17 00:00:00 2001 From: Stan Hu Date: Mon, 1 Sep 2025 22:10:13 -0700 Subject: [PATCH 08/16] Remove .gitkeep from gitlab-git-test directory `git fsck` now flags these empty .gitkeep files as bad references. --- spec/support/gitlab-git-test.git/refs/heads/.gitkeep | 0 spec/support/gitlab-git-test.git/refs/tags/.gitkeep | 0 2 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 spec/support/gitlab-git-test.git/refs/heads/.gitkeep delete mode 100644 spec/support/gitlab-git-test.git/refs/tags/.gitkeep diff --git a/spec/support/gitlab-git-test.git/refs/heads/.gitkeep b/spec/support/gitlab-git-test.git/refs/heads/.gitkeep deleted file mode 100644 index e69de29bb2d1d6..00000000000000 diff --git a/spec/support/gitlab-git-test.git/refs/tags/.gitkeep b/spec/support/gitlab-git-test.git/refs/tags/.gitkeep deleted file mode 100644 index e69de29bb2d1d6..00000000000000 -- GitLab From 503d8d5ed45f548566639a3c01276d97852928a6 Mon Sep 17 00:00:00 2001 From: Stan Hu Date: Mon, 1 Sep 2025 22:30:26 -0700 Subject: [PATCH 09/16] Update spec/support/generate-seed-repo-rb to reflect Rubocop changes --- spec/support/generate-seed-repo-rb | 64 +++++++++++++++--------------- 1 file changed, 33 insertions(+), 31 deletions(-) diff --git a/spec/support/generate-seed-repo-rb b/spec/support/generate-seed-repo-rb index 59931e900a97f1..22ff8b94255049 100755 --- a/spec/support/generate-seed-repo-rb +++ b/spec/support/generate-seed-repo-rb @@ -43,6 +43,8 @@ end main __END__ +# frozen_string_literal: true + # This file is generated by <%= SCRIPT_NAME %>. Do not edit this file manually. # # Seed repo: @@ -50,58 +52,58 @@ __END__ module SeedRepo module BigCommit - ID = "913c66a37b4a45b9769037c55c2d238bd0942d2e".freeze - PARENT_ID = "cfe32cf61b73a0d5e9f13e774abde7ff789b1660".freeze - MESSAGE = "Files, encoding and much more".freeze - AUTHOR_FULL_NAME = "Dmitriy Zaporozhets".freeze + ID = "913c66a37b4a45b9769037c55c2d238bd0942d2e" + PARENT_ID = "cfe32cf61b73a0d5e9f13e774abde7ff789b1660" + MESSAGE = "Files, encoding and much more" + AUTHOR_FULL_NAME = "Dmitriy Zaporozhets" FILES_COUNT = 2 end module Commit - ID = "570e7b2abdd848b95f2f578043fc23bd6f6fd24d".freeze - PARENT_ID = "6f6d7e7ed97bb5f0054f2b1df789b39ca89b6ff9".freeze - MESSAGE = "Change some files\n\nSigned-off-by: Dmitriy Zaporozhets \n".freeze - AUTHOR_FULL_NAME = "Dmitriy Zaporozhets".freeze + ID = "570e7b2abdd848b95f2f578043fc23bd6f6fd24d" + PARENT_ID = "6f6d7e7ed97bb5f0054f2b1df789b39ca89b6ff9" + MESSAGE = "Change some files\n\nSigned-off-by: Dmitriy Zaporozhets \n" + AUTHOR_FULL_NAME = "Dmitriy Zaporozhets" FILES = ["files/ruby/popen.rb", "files/ruby/regex.rb"].freeze FILES_COUNT = 2 - C_FILE_PATH = "files/ruby".freeze + C_FILE_PATH = "files/ruby" C_FILES = ["popen.rb", "regex.rb", "version_info.rb"].freeze - BLOB_FILE = %{%h3= @key.title\n%hr\n%pre= @key.key\n.actions\n = link_to 'Remove', @key, :confirm => 'Are you sure?', :method => :delete, :class => \"btn danger delete-key\"\n\n\n}.freeze - BLOB_FILE_PATH = "app/views/keys/show.html.haml".freeze + BLOB_FILE = %(%h3= @key.title\n%hr\n%pre= @key.key\n.actions\n = link_to 'Remove', @key, :confirm => 'Are you sure?', :method => :delete, :class => \"btn danger delete-key\"\n\n\n) + BLOB_FILE_PATH = "app/views/keys/show.html.haml" end module EmptyCommit - ID = "b0e52af38d7ea43cf41d8a6f2471351ac036d6c9".freeze - PARENT_ID = "40f4a7a617393735a95a0bb67b08385bc1e7c66d".freeze - MESSAGE = "Empty commit".freeze - AUTHOR_FULL_NAME = "Rémy Coutable".freeze + ID = "b0e52af38d7ea43cf41d8a6f2471351ac036d6c9" + PARENT_ID = "40f4a7a617393735a95a0bb67b08385bc1e7c66d" + MESSAGE = "Empty commit" + AUTHOR_FULL_NAME = "Rémy Coutable" FILES = [].freeze FILES_COUNT = FILES.count end module EncodingCommit - ID = "40f4a7a617393735a95a0bb67b08385bc1e7c66d".freeze - PARENT_ID = "66028349a123e695b589e09a36634d976edcc5e8".freeze - MESSAGE = "Add ISO-8859-encoded file".freeze - AUTHOR_FULL_NAME = "Stan Hu".freeze + ID = "40f4a7a617393735a95a0bb67b08385bc1e7c66d" + PARENT_ID = "66028349a123e695b589e09a36634d976edcc5e8" + MESSAGE = "Add ISO-8859-encoded file" + AUTHOR_FULL_NAME = "Stan Hu" FILES = ["encoding/iso8859.txt"].freeze FILES_COUNT = FILES.count end module FirstCommit - ID = "1a0b36b3cdad1d2ee32457c102a8c0b7056fa863".freeze + ID = "1a0b36b3cdad1d2ee32457c102a8c0b7056fa863" PARENT_ID = nil - MESSAGE = "Initial commit".freeze - AUTHOR_FULL_NAME = "Dmitriy Zaporozhets".freeze + MESSAGE = "Initial commit" + AUTHOR_FULL_NAME = "Dmitriy Zaporozhets" FILES = ["LICENSE", ".gitignore", "README.md"].freeze FILES_COUNT = 3 end module LastCommit - ID = <%= capture!(%w[git show -s --format=%H HEAD], repo).inspect %>.freeze - PARENT_ID = <%= capture!(%w[git show -s --format=%P HEAD], repo).split.last.inspect %>.freeze - MESSAGE = <%= capture!(%w[git show -s --format=%s HEAD], repo).inspect %>.freeze - AUTHOR_FULL_NAME = <%= capture!(%w[git show -s --format=%an HEAD], repo).inspect %>.freeze + ID = <%= capture!(%w[git show -s --format=%H HEAD], repo).inspect %> + PARENT_ID = <%= capture!(%w[git show -s --format=%P HEAD], repo).split.last.inspect %> + MESSAGE = <%= capture!(%w[git show -s --format=%s HEAD], repo).inspect %> + AUTHOR_FULL_NAME = <%= capture!(%w[git show -s --format=%an HEAD], repo).inspect %> FILES = <%= parents = capture!(%w[git show -s --format=%P HEAD], repo).split merge_base = parents.size > 1 ? capture!(%w[git merge-base] + parents, repo) : parents.first @@ -111,7 +113,7 @@ module SeedRepo end module Repo - HEAD = "master".freeze + HEAD = "master" BRANCHES = %w[ <%= capture!(%W[git for-each-ref --format=#{' ' * 3}%(refname:strip=2) refs/heads/], repo) %> ].freeze @@ -121,9 +123,9 @@ module SeedRepo end module RubyBlob - ID = "7e3e39ebb9b2bf433b4ad17313770fbe4051649c".freeze - NAME = "popen.rb".freeze - CONTENT = <<-eos.freeze + ID = "7e3e39ebb9b2bf433b4ad17313770fbe4051649c" + NAME = "popen.rb" + CONTENT = <<-EOS require 'fileutils' require 'open3' @@ -161,6 +163,6 @@ module Popen return @cmd_output, @cmd_status end end - eos + EOS end end -- GitLab From 01bf6c5a8072d022b58c93cd66e70f9b9b585d30 Mon Sep 17 00:00:00 2001 From: Stan Hu Date: Mon, 1 Sep 2025 22:41:31 -0700 Subject: [PATCH 10/16] Revert "Remove .gitkeep from gitlab-git-test directory" This reverts commit e18ba3f036db9bb9c59f2606176cb3ef239474da. --- spec/support/gitlab-git-test.git/refs/heads/.gitkeep | 0 spec/support/gitlab-git-test.git/refs/tags/.gitkeep | 0 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 spec/support/gitlab-git-test.git/refs/heads/.gitkeep create mode 100644 spec/support/gitlab-git-test.git/refs/tags/.gitkeep diff --git a/spec/support/gitlab-git-test.git/refs/heads/.gitkeep b/spec/support/gitlab-git-test.git/refs/heads/.gitkeep new file mode 100644 index 00000000000000..e69de29bb2d1d6 diff --git a/spec/support/gitlab-git-test.git/refs/tags/.gitkeep b/spec/support/gitlab-git-test.git/refs/tags/.gitkeep new file mode 100644 index 00000000000000..e69de29bb2d1d6 -- GitLab From 4641ab7fbb629b93ac8c2bdb8f19bcb37bf4398b Mon Sep 17 00:00:00 2001 From: Stan Hu Date: Mon, 1 Sep 2025 22:42:07 -0700 Subject: [PATCH 11/16] Work around gitlab_git_test failures by disabling git fsck `git fsck` now fails if `refs/heads/.gitkeep` or `ref/tags/.gitkeep` is present. Disable the `git fsck` check for now. --- spec/support/unpack-gitlab-git-test | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/spec/support/unpack-gitlab-git-test b/spec/support/unpack-gitlab-git-test index 5d5f1b7d082953..43457e1024b7a5 100755 --- a/spec/support/unpack-gitlab-git-test +++ b/spec/support/unpack-gitlab-git-test @@ -13,7 +13,9 @@ def main # We want to store the refs in a packed-refs file because if we don't # they can get mangled by filesystems. abort unless system(*GIT, *%w[pack-refs --all]) - abort unless system(*GIT, 'fsck') + # Disable the fsck for now because this fails due to the presence + # of refs/{heads,tags}/.gitkeep + # abort unless system(*GIT, 'fsck') end # We don't want contributors to commit new pack files because those -- GitLab From 3bacb6636b61e3fbe5c77b1cdf4502c8016025fc Mon Sep 17 00:00:00 2001 From: Miguel Rincon Date: Fri, 29 Aug 2025 16:17:50 +0200 Subject: [PATCH 12/16] Use simpler sign_in method in test --- spec/features/group_variables_spec.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec/features/group_variables_spec.rb b/spec/features/group_variables_spec.rb index c2222be1e901e3..189ec46871ec80 100644 --- a/spec/features/group_variables_spec.rb +++ b/spec/features/group_variables_spec.rb @@ -10,7 +10,7 @@ before do group.add_owner(user) - gitlab_sign_in(user) + sign_in(user) visit page_path wait_for_requests -- GitLab From 83da9b54e65ca03724a010e7563bfbba233d2f75 Mon Sep 17 00:00:00 2001 From: Stan Hu Date: Tue, 2 Sep 2025 11:12:43 -0700 Subject: [PATCH 13/16] Simplify spec/features/snippets/user_creates_snippet_spec.rb test Drop `switch_to.alert` because this doesn't work with Chrome v133. --- spec/features/snippets/user_creates_snippet_spec.rb | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/spec/features/snippets/user_creates_snippet_spec.rb b/spec/features/snippets/user_creates_snippet_spec.rb index e49b4707e2ed86..4245839cfd93b4 100644 --- a/spec/features/snippets/user_creates_snippet_spec.rb +++ b/spec/features/snippets/user_creates_snippet_spec.rb @@ -146,9 +146,7 @@ def fill_form # not anymore as requests when they come straight from memory cache. # accept_confirm is needed because of https://gitlab.com/gitlab-org/gitlab/-/issues/262102 reqs = inspect_requests do - visit("#{link}?ran=#{SecureRandom.base64(20)}") do - page.driver.browser.switch_to.alert.accept - end + visit("#{link}?ran=#{SecureRandom.base64(20)}") end expect(reqs.first.status_code).to eq(200) end -- GitLab From 254a390f9b5f13b093a9eb4da4698696c87eeb89 Mon Sep 17 00:00:00 2001 From: Jay McCure Date: Thu, 4 Sep 2025 13:16:32 +1000 Subject: [PATCH 14/16] Test: refind user in work item specs --- ee/spec/features/work_items/detail/work_item_detail_spec.rb | 2 +- .../features/work_items/epics/epic_work_item_detail_spec.rb | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/ee/spec/features/work_items/detail/work_item_detail_spec.rb b/ee/spec/features/work_items/detail/work_item_detail_spec.rb index a4f1d432dd0cce..76b4ed9728f34e 100644 --- a/ee/spec/features/work_items/detail/work_item_detail_spec.rb +++ b/ee/spec/features/work_items/detail/work_item_detail_spec.rb @@ -5,7 +5,7 @@ RSpec.describe 'Work item detail', :js, feature_category: :team_planning do include ListboxHelpers - let_it_be_with_reload(:user) { create(:user) } + let_it_be_with_refind(:user) { create(:user) } let_it_be(:group) { create(:group, :nested) } let_it_be(:root_group) { group.root_ancestor } diff --git a/ee/spec/features/work_items/epics/epic_work_item_detail_spec.rb b/ee/spec/features/work_items/epics/epic_work_item_detail_spec.rb index 4d96aaec99219c..4f930c7cf8cb21 100644 --- a/ee/spec/features/work_items/epics/epic_work_item_detail_spec.rb +++ b/ee/spec/features/work_items/epics/epic_work_item_detail_spec.rb @@ -6,8 +6,8 @@ include DragTo include ListboxHelpers - let_it_be_with_reload(:user) { create(:user) } - let_it_be_with_reload(:user2) { create(:user, name: 'John') } + let_it_be_with_refind(:user) { create(:user) } + let_it_be_with_refind(:user2) { create(:user, name: 'John') } let_it_be(:group) { create(:group, :nested, developers: user) } let_it_be(:label) { create(:group_label, group: group) } -- GitLab From 1e3ed26bab002ff2acd7b66cbf993516731d0a1e Mon Sep 17 00:00:00 2001 From: Jay McCure Date: Fri, 5 Sep 2025 06:32:25 +1000 Subject: [PATCH 15/16] Test: use refind for non-ee work item spec --- spec/features/work_items/detail/work_item_detail_spec.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/spec/features/work_items/detail/work_item_detail_spec.rb b/spec/features/work_items/detail/work_item_detail_spec.rb index 6b67e5d933e347..3a86cba20029ce 100644 --- a/spec/features/work_items/detail/work_item_detail_spec.rb +++ b/spec/features/work_items/detail/work_item_detail_spec.rb @@ -5,8 +5,8 @@ RSpec.describe 'Work item detail', :js, feature_category: :team_planning do include ListboxHelpers - let_it_be_with_reload(:user) { create(:user) } - let_it_be_with_reload(:user2) { create(:user, name: 'John') } + let_it_be_with_refind(:user) { create(:user) } + let_it_be_with_refind(:user2) { create(:user, name: 'John') } let_it_be(:group) { create(:group) } let_it_be(:project) { create(:project, :public, :repository, group: group) } -- GitLab From 2cf386a12e344f01fdfbbc1395c7aa5a3dac944b Mon Sep 17 00:00:00 2001 From: Jay McCure Date: Fri, 5 Sep 2025 15:42:51 +1000 Subject: [PATCH 16/16] Test: use let in work_item specs --- .../detail/work_item_detail_spec.rb | 10 +-- .../epics/epic_work_item_detail_spec.rb | 14 ++-- .../detail/work_item_detail_spec.rb | 70 +++++++------------ 3 files changed, 39 insertions(+), 55 deletions(-) diff --git a/ee/spec/features/work_items/detail/work_item_detail_spec.rb b/ee/spec/features/work_items/detail/work_item_detail_spec.rb index 76b4ed9728f34e..2008d0aa7905ba 100644 --- a/ee/spec/features/work_items/detail/work_item_detail_spec.rb +++ b/ee/spec/features/work_items/detail/work_item_detail_spec.rb @@ -5,12 +5,12 @@ RSpec.describe 'Work item detail', :js, feature_category: :team_planning do include ListboxHelpers - let_it_be_with_refind(:user) { create(:user) } + let(:user) { create(:user) } - let_it_be(:group) { create(:group, :nested) } - let_it_be(:root_group) { group.root_ancestor } - let_it_be(:project) { create(:project, :public, namespace: group, developers: user) } - let_it_be(:work_item) { create(:work_item, project: project) } + let(:group) { create(:group, :nested) } + let(:root_group) { group.root_ancestor } + let(:project) { create(:project, :public, namespace: group, developers: user) } + let(:work_item) { create(:work_item, project: project) } let(:work_items_path) { project_work_item_path(project, work_item.iid) } context 'for signed in user' do diff --git a/ee/spec/features/work_items/epics/epic_work_item_detail_spec.rb b/ee/spec/features/work_items/epics/epic_work_item_detail_spec.rb index 4f930c7cf8cb21..9b0158b9f6bf8e 100644 --- a/ee/spec/features/work_items/epics/epic_work_item_detail_spec.rb +++ b/ee/spec/features/work_items/epics/epic_work_item_detail_spec.rb @@ -6,17 +6,17 @@ include DragTo include ListboxHelpers - let_it_be_with_refind(:user) { create(:user) } - let_it_be_with_refind(:user2) { create(:user, name: 'John') } + let(:user) { create(:user) } + let(:user2) { create(:user, name: 'John') } - let_it_be(:group) { create(:group, :nested, developers: user) } - let_it_be(:label) { create(:group_label, group: group) } - let_it_be(:label2) { create(:group_label, group: group) } - let_it_be_with_reload(:work_item) do + let(:group) { create(:group, :nested, developers: user) } + let(:label) { create(:group_label, group: group) } + let(:label2) { create(:group_label, group: group) } + let(:work_item) do create(:work_item, :epic_with_legacy_epic, :group_level, namespace: group, labels: [label]) end - let_it_be(:emoji_upvote) { create(:award_emoji, :upvote, awardable: work_item, user: user2) } + let(:emoji_upvote) { create(:award_emoji, :upvote, awardable: work_item, user: user2) } let(:work_items_path) { group_epic_path(group, work_item.iid) } let(:list_path) { group_epics_path(group) } diff --git a/spec/features/work_items/detail/work_item_detail_spec.rb b/spec/features/work_items/detail/work_item_detail_spec.rb index 3a86cba20029ce..0ed9fc1733bd14 100644 --- a/spec/features/work_items/detail/work_item_detail_spec.rb +++ b/spec/features/work_items/detail/work_item_detail_spec.rb @@ -5,20 +5,20 @@ RSpec.describe 'Work item detail', :js, feature_category: :team_planning do include ListboxHelpers - let_it_be_with_refind(:user) { create(:user) } - let_it_be_with_refind(:user2) { create(:user, name: 'John') } - - let_it_be(:group) { create(:group) } - let_it_be(:project) { create(:project, :public, :repository, group: group) } - let_it_be(:label) { create(:label, project: project, title: "testing-label") } - let_it_be(:label2) { create(:label, project: project, title: "another-label") } - let_it_be(:work_item) { create(:work_item, project: project, labels: [label]) } - let_it_be(:task) { create(:work_item, :task, project: project) } - let_it_be(:emoji_upvote) { create(:award_emoji, :upvote, awardable: work_item, user: user2) } - let_it_be(:milestone) { create(:milestone, project: project) } - let_it_be(:milestones) { create_list(:milestone, 10, project: project) } - let_it_be(:note) { create(:note, noteable: work_item, project: work_item.project) } - let_it_be(:contact) { create(:contact, group: group) } + let(:user) { create(:user) } + let(:user2) { create(:user, name: 'John') } + + let(:group) { create(:group) } + let(:project) { create(:project, :public, :repository, group: group) } + let(:label) { create(:label, project: project, title: "testing-label") } + let(:label2) { create(:label, project: project, title: "another-label") } + let(:work_item) { create(:work_item, project: project, labels: [label]) } + let(:task) { create(:work_item, :task, project: project) } + let(:emoji_upvote) { create(:award_emoji, :upvote, awardable: work_item, user: user2) } + let(:milestone) { create(:milestone, project: project) } + let(:milestones) { create_list(:milestone, 10, project: project) } + let(:note) { create(:note, noteable: work_item, project: work_item.project) } + let(:contact) { create(:contact, group: group) } let(:contact_name) { "#{contact.first_name} #{contact.last_name}" } let(:list_path) { project_issues_path(project) } let(:work_items_path) { project_work_item_path(project, work_item.iid) } @@ -42,12 +42,9 @@ context 'for signed in user' do let(:linked_item) { task } - before_all do + before do stub_feature_flags(comment_temperature: false) group.add_developer(user) - end - - before do stub_feature_flags(notifications_todos_buttons: false, work_item_planning_view: false) stub_const("AutocompleteSources::ExpiresIn::AUTOCOMPLETE_EXPIRES_IN", 0) sign_in(user) @@ -82,11 +79,8 @@ end context 'when item is a task' do - before_all do - project.add_developer(user) - end - before do + project.add_developer(user) sign_in(user) visit project_work_item_path(project, task.iid) end @@ -96,16 +90,13 @@ end context 'for signed in admin' do - let_it_be(:admin) { create(:admin) } + let(:admin) { create(:admin) } context 'with akismet integration' do - let_it_be(:user_agent_detail) { create(:user_agent_detail, subject: work_item) } - - before_all do - project.add_maintainer(admin) - end + let(:user_agent_detail) { create(:user_agent_detail, subject: work_item) } before do + project.add_maintainer(admin) stub_application_setting(akismet_enabled: true) sign_in(admin) visit work_items_path @@ -116,11 +107,8 @@ end context 'for signed in owner' do - before_all do - project.add_owner(user) - end - before do + project.add_owner(user) sign_in(user) visit work_items_path end @@ -129,15 +117,12 @@ end context 'for guest users' do - before_all do - project.add_guest(user) - end - context 'for work item authored by guest user' do - let_it_be(:key_result) { create(:work_item, :key_result, author: user, project: project) } - let_it_be(:note) { create(:note, noteable: key_result, project: key_result.project) } + let(:key_result) { create(:work_item, :key_result, author: user, project: project) } + let(:note) { create(:note, noteable: key_result, project: key_result.project) } before do + project.add_guest(user) sign_in(user) visit project_work_item_path(project, key_result.iid) end @@ -147,6 +132,7 @@ context 'for work item not authored by guest user' do before do + project.add_guest(user) sign_in(user) visit work_items_path end @@ -180,7 +166,7 @@ end context 'for development widget' do - let_it_be(:merge_request) do + let(:merge_request) do create( :merge_request, source_project: project, @@ -192,12 +178,9 @@ ) end - before_all do - project.add_developer(user) - end - context 'for user signed in' do before do + project.add_developer(user) sign_in(user) visit work_items_path @@ -213,6 +196,7 @@ context 'for user not signed in' do before do + project.add_developer(user) visit work_items_path wait_for_all_requests end -- GitLab