diff --git a/spec/serializers/build_details_entity_spec.rb b/spec/serializers/build_details_entity_spec.rb
index a24841fe286b843004979c9f804f7e853e317c72..da2734feb51f5e20603c80a8f4d556fdef5fc706 100644
--- a/spec/serializers/build_details_entity_spec.rb
+++ b/spec/serializers/build_details_entity_spec.rb
@@ -11,7 +11,7 @@
 
   describe '#as_json' do
     let(:project) { create(:project, :repository) }
-    let(:user) { project.owner }
+    let(:user) { project.first_owner }
     let(:pipeline) { create(:ci_pipeline, project: project) }
     let(:build) { create(:ci_build, :failed, pipeline: pipeline) }
     let(:request) { double('request', project: project) }
diff --git a/spec/serializers/ci/lint/result_serializer_spec.rb b/spec/serializers/ci/lint/result_serializer_spec.rb
index a834ea05e143a75e071a9311b7a18442e063fc70..3fdaba1808a70e83a861f3246731ae79cd6a51a0 100644
--- a/spec/serializers/ci/lint/result_serializer_spec.rb
+++ b/spec/serializers/ci/lint/result_serializer_spec.rb
@@ -7,7 +7,7 @@
 
   let(:result) do
     Gitlab::Ci::Lint
-      .new(project: project, current_user: project.owner)
+      .new(project: project, current_user: project.first_owner)
       .validate(yaml_content, dry_run: false)
   end
 
@@ -64,7 +64,7 @@
     context 'when dry run is enabled' do
       let(:result) do
         Gitlab::Ci::Lint
-          .new(project: project, current_user: project.owner)
+          .new(project: project, current_user: project.first_owner)
           .validate(yaml_content, dry_run: true)
       end
 
diff --git a/spec/serializers/diff_file_base_entity_spec.rb b/spec/serializers/diff_file_base_entity_spec.rb
index 99dbaff4b7e2e0f09d7e7d5f06aa3d28efbe3858..11ceb7991d770101c7e69826917d9b13d6c0661d 100644
--- a/spec/serializers/diff_file_base_entity_spec.rb
+++ b/spec/serializers/diff_file_base_entity_spec.rb
@@ -142,7 +142,7 @@
     end
 
     context 'when source_project and target_project are different' do
-      let(:target_project) { fork_project(source_project, source_project.owner, repository: true) }
+      let(:target_project) { fork_project(source_project, source_project.first_owner, repository: true) }
 
       it 'returns the merge_request ide route with the target_project as param' do
         expect(entity[:ide_edit_path]).to eq("#{expected_merge_request_path}?target_project=#{ERB::Util.url_encode(target_project.full_path)}")
diff --git a/spec/serializers/runner_entity_spec.rb b/spec/serializers/runner_entity_spec.rb
index 39cac65c5ac330ebc2067166e3821438d0da683e..f34cb794834445c8250700c80acb41a96d8ab1c2 100644
--- a/spec/serializers/runner_entity_spec.rb
+++ b/spec/serializers/runner_entity_spec.rb
@@ -7,7 +7,7 @@
   let(:runner) { create(:ci_runner, :project, projects: [project]) }
   let(:entity) { described_class.new(runner, request: request, current_user: user) }
   let(:request) { double('request') }
-  let(:user) { project.owner }
+  let(:user) { project.first_owner }
 
   before do
     allow(request).to receive(:current_user).and_return(user)
diff --git a/spec/serializers/trigger_variable_entity_spec.rb b/spec/serializers/trigger_variable_entity_spec.rb
index e90bfc24f9f14f105f061ea6ffca322d4c239d82..deabbb9d54b6e9fee0d3f870e402fa23a3f8d670 100644
--- a/spec/serializers/trigger_variable_entity_spec.rb
+++ b/spec/serializers/trigger_variable_entity_spec.rb
@@ -31,7 +31,7 @@
     end
 
     context 'when user is owner' do
-      let(:user) { project.owner }
+      let(:user) { project.first_owner }
 
       it 'exposes the variable value' do
         expect(subject).to include(:value)
diff --git a/spec/support/helpers/repo_helpers.rb b/spec/support/helpers/repo_helpers.rb
index bbba58d60d6d26b5d7ee9b09b6145c03ca5ccdb1..f275be39dc402fe59b1c62e52f91ae2d7814a1a6 100644
--- a/spec/support/helpers/repo_helpers.rb
+++ b/spec/support/helpers/repo_helpers.rb
@@ -129,7 +129,7 @@ def create_file_in_repo(
         commit_message: 'Add new content')
     Files::CreateService.new(
       project,
-      project.owner,
+      project.first_owner,
       commit_message: commit_message,
       start_branch: start_branch,
       branch_name: branch_name,
diff --git a/spec/support/shared_contexts/graphql/requests/packages_shared_context.rb b/spec/support/shared_contexts/graphql/requests/packages_shared_context.rb
index 9ac3d4a04f9e78a3903f027d09996ff23e0f719b..13e7ecf2669850f2ad349dbdb2e0d77f5576f08d 100644
--- a/spec/support/shared_contexts/graphql/requests/packages_shared_context.rb
+++ b/spec/support/shared_contexts/graphql/requests/packages_shared_context.rb
@@ -11,7 +11,7 @@
   let(:package_files) { all_graphql_fields_for('PackageFile') }
   let(:dependency_links) { all_graphql_fields_for('PackageDependencyLink') }
   let(:pipelines) { all_graphql_fields_for('Pipeline', max_depth: 1) }
-  let(:user) { project.owner }
+  let(:user) { project.first_owner }
   let(:package_details) { graphql_data_at(:package) }
   let(:metadata_response) { graphql_data_at(:package, :metadata) }
   let(:first_file) { package.package_files.find { |f| global_id_of(f) == first_file_response['id'] } }
diff --git a/spec/support/shared_examples/features/creatable_merge_request_shared_examples.rb b/spec/support/shared_examples/features/creatable_merge_request_shared_examples.rb
index 1c816ee4b0aeb4f346c212b29009e1586af458a8..456175e7113d182dac70e959e90cbaaf11e69048 100644
--- a/spec/support/shared_examples/features/creatable_merge_request_shared_examples.rb
+++ b/spec/support/shared_examples/features/creatable_merge_request_shared_examples.rb
@@ -62,7 +62,7 @@
   end
 
   it 'updates the branches when selecting a new target project', :js do
-    target_project_member = target_project.owner
+    target_project_member = target_project.first_owner
     ::Branches::CreateService.new(target_project, target_project_member)
       .execute('a-brand-new-branch-to-test', 'master')
 
diff --git a/spec/support/shared_examples/lib/sidebars/projects/menus/zentao_menu_shared_examples.rb b/spec/support/shared_examples/lib/sidebars/projects/menus/zentao_menu_shared_examples.rb
index d3fd28727b59170066d35c93958cd47d71d6c3ee..b4c438771ce569d66bb90bd4576c1ecb73fd8218 100644
--- a/spec/support/shared_examples/lib/sidebars/projects/menus/zentao_menu_shared_examples.rb
+++ b/spec/support/shared_examples/lib/sidebars/projects/menus/zentao_menu_shared_examples.rb
@@ -4,7 +4,7 @@
 
 RSpec.shared_examples 'ZenTao menu with CE version' do
   let(:project) { create(:project, has_external_issue_tracker: true) }
-  let(:user) { project.owner }
+  let(:user) { project.first_owner }
   let(:context) { Sidebars::Projects::Context.new(current_user: user, container: project) }
   let(:zentao_integration) { create(:zentao_integration, project: project) }
 
diff --git a/spec/support/shared_examples/models/update_project_statistics_shared_examples.rb b/spec/support/shared_examples/models/update_project_statistics_shared_examples.rb
index 06326ffac97af4d989628ac9d522fc303afe5f0f..ad0bbc0aeff9174617ad5b379354ee61649cbf12 100644
--- a/spec/support/shared_examples/models/update_project_statistics_shared_examples.rb
+++ b/spec/support/shared_examples/models/update_project_statistics_shared_examples.rb
@@ -115,14 +115,14 @@ def expect_flush_counter_increments_worker_performed
             expect(ProjectStatistics)
               .not_to receive(:increment_statistic)
 
-            expect(Projects::DestroyService.new(project, project.owner).execute).to eq(true)
+            expect(Projects::DestroyService.new(project, project.first_owner).execute).to eq(true)
           end
 
           it 'does not schedule a namespace statistics worker' do
             expect(Namespaces::ScheduleAggregationWorker)
               .not_to receive(:perform_async)
 
-            expect(Projects::DestroyService.new(project, project.owner).execute).to eq(true)
+            expect(Projects::DestroyService.new(project, project.first_owner).execute).to eq(true)
           end
         end
       end
diff --git a/spec/support/shared_examples/requests/api/notes_shared_examples.rb b/spec/support/shared_examples/requests/api/notes_shared_examples.rb
index 0434d0beb7e1083d94761cd4d4ba03bc47614296..2a157f6e8557452e985da8a36d82cc4cfe98a5c5 100644
--- a/spec/support/shared_examples/requests/api/notes_shared_examples.rb
+++ b/spec/support/shared_examples/requests/api/notes_shared_examples.rb
@@ -190,7 +190,7 @@
 
       if parent_type == 'projects'
         context 'by a project owner' do
-          let(:user) { project.owner }
+          let(:user) { project.first_owner }
 
           it 'sets the creation time on the new note' do
             post api("/#{parent_type}/#{parent.id}/#{noteable_type}/#{noteable[id_name]}/notes", user), params: params
diff --git a/spec/tasks/gitlab/backup_rake_spec.rb b/spec/tasks/gitlab/backup_rake_spec.rb
index c5e73aa3b45b002a0ab0fe3592a859d2a94861a1..92843f48b8b523acfc5170a52af4abbaeb57de49 100644
--- a/spec/tasks/gitlab/backup_rake_spec.rb
+++ b/spec/tasks/gitlab/backup_rake_spec.rb
@@ -344,9 +344,9 @@ def reenable_backup_sub_tasks
       shared_examples 'includes repositories in all repository storages' do
         specify :aggregate_failures do
           project_a = create(:project, :repository)
-          project_snippet_a = create(:project_snippet, :repository, project: project_a, author: project_a.owner)
+          project_snippet_a = create(:project_snippet, :repository, project: project_a, author: project_a.first_owner)
           project_b = create(:project, :repository, repository_storage: second_storage_name)
-          project_snippet_b = create(:project_snippet, :repository, project: project_b, author: project_b.owner)
+          project_snippet_b = create(:project_snippet, :repository, project: project_b, author: project_b.first_owner)
           project_snippet_b.snippet_repository.update!(shard: project_b.project_repository.shard)
           create(:wiki_page, container: project_a)
           create(:design, :with_file, issue: create(:issue, project: project_a))
diff --git a/spec/views/layouts/nav/sidebar/_project.html.haml_spec.rb b/spec/views/layouts/nav/sidebar/_project.html.haml_spec.rb
index 869defbb3310cae21c55507c4634e125f1c65672..22e925e22ae5e6ecc801dcb3c4eb051712707d9f 100644
--- a/spec/views/layouts/nav/sidebar/_project.html.haml_spec.rb
+++ b/spec/views/layouts/nav/sidebar/_project.html.haml_spec.rb
@@ -5,7 +5,7 @@
 RSpec.describe 'layouts/nav/sidebar/_project' do
   let_it_be_with_reload(:project) { create(:project, :repository) }
 
-  let(:user) { project.owner }
+  let(:user) { project.first_owner }
   let(:current_ref) { 'master' }
 
   before do
diff --git a/spec/workers/ci/external_pull_requests/create_pipeline_worker_spec.rb b/spec/workers/ci/external_pull_requests/create_pipeline_worker_spec.rb
index 116a0e4d0352a12ef96ed7f8d0b9a616d8a7b07f..a637ac088ff871347fcb3b9fa036e69e43cadda8 100644
--- a/spec/workers/ci/external_pull_requests/create_pipeline_worker_spec.rb
+++ b/spec/workers/ci/external_pull_requests/create_pipeline_worker_spec.rb
@@ -4,7 +4,7 @@
 
 RSpec.describe Ci::ExternalPullRequests::CreatePipelineWorker do
   let_it_be(:project) { create(:project, :auto_devops, :repository) }
-  let_it_be(:user) { project.owner }
+  let_it_be(:user) { project.first_owner }
   let_it_be(:external_pull_request) do
     branch = project.repository.branches.last
     create(:external_pull_request, project: project, source_branch: branch.name, source_sha: branch.target)
diff --git a/spec/workers/cleanup_container_repository_worker_spec.rb b/spec/workers/cleanup_container_repository_worker_spec.rb
index 6ae4308bd46dd99c8906d008ec0b2178d11a6ff2..6723ea2049d7e5d343bae8997d350a33a516f8c8 100644
--- a/spec/workers/cleanup_container_repository_worker_spec.rb
+++ b/spec/workers/cleanup_container_repository_worker_spec.rb
@@ -5,7 +5,7 @@
 RSpec.describe CleanupContainerRepositoryWorker, :clean_gitlab_redis_shared_state do
   let(:repository) { create(:container_repository) }
   let(:project) { repository.project }
-  let(:user) { project.owner }
+  let(:user) { project.first_owner }
 
   subject { described_class.new }
 
diff --git a/spec/workers/delete_container_repository_worker_spec.rb b/spec/workers/delete_container_repository_worker_spec.rb
index b8363a2f81a04afaa70ba995f432b7b301f1c728..ec040eab2d424d5bd7195f84817369d8a68f1e71 100644
--- a/spec/workers/delete_container_repository_worker_spec.rb
+++ b/spec/workers/delete_container_repository_worker_spec.rb
@@ -5,7 +5,7 @@
 RSpec.describe DeleteContainerRepositoryWorker do
   let(:registry) { create(:container_repository) }
   let(:project) { registry.project }
-  let(:user) { project.owner }
+  let(:user) { project.first_owner }
 
   subject { described_class.new }
 
diff --git a/spec/workers/delete_merged_branches_worker_spec.rb b/spec/workers/delete_merged_branches_worker_spec.rb
index 861ca111b92328fb100450a3caf8c5ba34fc007b..056fcb1200d542248d93ae105132663ff5b0aa7b 100644
--- a/spec/workers/delete_merged_branches_worker_spec.rb
+++ b/spec/workers/delete_merged_branches_worker_spec.rb
@@ -13,11 +13,11 @@
         expect(instance).to receive(:execute).and_return(true)
       end
 
-      worker.perform(project.id, project.owner.id)
+      worker.perform(project.id, project.first_owner.id)
     end
 
     it "returns false when project was not found" do
-      expect(worker.perform('unknown', project.owner.id)).to be_falsy
+      expect(worker.perform('unknown', project.first_owner.id)).to be_falsy
     end
   end
 end
diff --git a/spec/workers/post_receive_spec.rb b/spec/workers/post_receive_spec.rb
index 42e39c51a889232663b1011e73166658f9898a31..9b33e559c71867794deb0a53971bb65463812321 100644
--- a/spec/workers/post_receive_spec.rb
+++ b/spec/workers/post_receive_spec.rb
@@ -15,7 +15,7 @@
   let(:wrongly_encoded_changes) { changes.encode("ISO-8859-1").force_encoding("UTF-8") }
   let(:base64_changes) { Base64.encode64(wrongly_encoded_changes) }
   let(:gl_repository) { "project-#{project.id}" }
-  let(:key) { create(:key, user: project.owner) }
+  let(:key) { create(:key, user: project.first_owner) }
   let!(:key_id) { key.shell_id }
 
   let(:project) do
@@ -47,7 +47,7 @@ def perform(changes: base64_changes)
 
     context 'with PersonalSnippet' do
       let(:gl_repository) { "snippet-#{snippet.id}" }
-      let(:snippet) { create(:personal_snippet, author: project.owner) }
+      let(:snippet) { create(:personal_snippet, author: project.first_owner) }
 
       it 'does not log an error' do
         expect(Gitlab::GitLogger).not_to receive(:error)
@@ -60,7 +60,7 @@ def perform(changes: base64_changes)
 
     context 'with ProjectSnippet' do
       let(:gl_repository) { "snippet-#{snippet.id}" }
-      let(:snippet) { create(:snippet, type: 'ProjectSnippet', project: nil, author: project.owner) }
+      let(:snippet) { create(:snippet, type: 'ProjectSnippet', project: nil, author: project.first_owner) }
 
       it 'returns false and logs an error' do
         expect(Gitlab::GitLogger).to receive(:error).with("POST-RECEIVE: #{error_message}")
@@ -74,7 +74,7 @@ def perform(changes: base64_changes)
       let(:empty_project) { create(:project, :empty_repo) }
 
       before do
-        allow_next(Gitlab::GitPostReceive).to receive(:identify).and_return(empty_project.owner)
+        allow_next(Gitlab::GitPostReceive).to receive(:identify).and_return(empty_project.first_owner)
         # Need to mock here so we can expect calls on project
         allow(Gitlab::GlRepository).to receive(:parse).and_return([empty_project, empty_project, Gitlab::GlRepository::PROJECT])
       end
@@ -128,7 +128,7 @@ def perform(changes: base64_changes)
       let(:push_service) { double(execute: true) }
 
       before do
-        allow_next(Gitlab::GitPostReceive).to receive(:identify).and_return(project.owner)
+        allow_next(Gitlab::GitPostReceive).to receive(:identify).and_return(project.first_owner)
         allow(Gitlab::GlRepository).to receive(:parse).and_return([project, project, Gitlab::GlRepository::PROJECT])
       end
 
@@ -381,7 +381,7 @@ def perform(changes: base64_changes)
       allow(Project).to receive(:find_by).and_return(project)
       expect_next(MergeRequests::PushedBranchesService).to receive(:execute).and_return(%w(tést))
 
-      expect(UpdateMergeRequestsWorker).to receive(:perform_async).with(project.id, project.owner.id, any_args)
+      expect(UpdateMergeRequestsWorker).to receive(:perform_async).with(project.id, project.first_owner.id, any_args)
 
       perform
     end
@@ -461,13 +461,13 @@ def perform(changes: base64_changes)
     end
 
     context 'with PersonalSnippet' do
-      let!(:snippet) { create(:personal_snippet, :repository, author: project.owner) }
+      let!(:snippet) { create(:personal_snippet, :repository, author: project.first_owner) }
 
       it_behaves_like 'snippet changes actions'
     end
 
     context 'with ProjectSnippet' do
-      let!(:snippet) { create(:project_snippet, :repository, project: project, author: project.owner) }
+      let!(:snippet) { create(:project_snippet, :repository, project: project, author: project.first_owner) }
 
       it_behaves_like 'snippet changes actions'
     end
diff --git a/spec/workers/project_destroy_worker_spec.rb b/spec/workers/project_destroy_worker_spec.rb
index 00a4ddac29f5c7b38e4b8e837ea187f9b7d4cfee..0b0543a50893ed03622a435cb15479bbfb9cffb6 100644
--- a/spec/workers/project_destroy_worker_spec.rb
+++ b/spec/workers/project_destroy_worker_spec.rb
@@ -14,7 +14,7 @@
 
   describe '#perform' do
     it 'deletes the project' do
-      subject.perform(project.id, project.owner.id, {})
+      subject.perform(project.id, project.first_owner.id, {})
 
       expect(Project.all).not_to include(project)
       expect(Dir.exist?(path)).to be_falsey
@@ -22,7 +22,7 @@
 
     it 'does not raise error when project could not be found' do
       expect do
-        subject.perform(-1, project.owner.id, {})
+        subject.perform(-1, project.first_owner.id, {})
       end.not_to raise_error
     end