From 20efe22248eb4dfc028a95a5ac5c34c1e7c714ff Mon Sep 17 00:00:00 2001 From: charlie ablett Date: Fri, 21 Jan 2022 13:53:56 +1300 Subject: [PATCH] Replace owner with first_owner in feature specs --- spec/features/breadcrumbs_schema_markup_spec.rb | 6 +++--- spec/features/contextual_sidebar_spec.rb | 2 +- spec/features/dashboard/snippets_spec.rb | 6 +++--- .../user_filters_errors_by_status_spec.rb | 2 +- .../error_tracking/user_searches_sentry_errors_spec.rb | 2 +- .../error_tracking/user_sees_error_details_spec.rb | 2 +- .../error_tracking/user_sees_error_index_spec.rb | 4 ++-- spec/features/file_uploads/attachment_spec.rb | 2 +- spec/features/file_uploads/git_lfs_spec.rb | 2 +- spec/features/file_uploads/maven_package_spec.rb | 2 +- spec/features/file_uploads/nuget_package_spec.rb | 2 +- spec/features/file_uploads/rubygem_package_spec.rb | 2 +- spec/features/ide/user_commits_changes_spec.rb | 2 +- spec/features/ide/user_opens_merge_request_spec.rb | 2 +- .../markdown_references/internal_references_spec.rb | 4 ++-- spec/features/issues/keyboard_shortcut_spec.rb | 4 ++-- spec/features/markdown/copy_as_gfm_spec.rb | 2 +- .../merge_request/user_edits_assignees_sidebar_spec.rb | 2 +- .../user_interacts_with_batched_mr_diffs_spec.rb | 2 +- .../merge_request/user_merges_merge_request_spec.rb | 2 +- .../merge_request/user_rebases_merge_request_spec.rb | 2 +- spec/features/merge_request/user_reviews_image_spec.rb | 2 +- spec/features/merge_request/user_sees_diff_spec.rb | 4 ++-- .../user_views_merge_request_from_deleted_fork_spec.rb | 2 +- spec/features/projects/active_tabs_spec.rb | 2 +- spec/features/projects/activity/rss_spec.rb | 4 ++-- spec/features/projects/blobs/blob_show_spec.rb | 2 +- .../blobs/user_follows_pipeline_suggest_nudge_spec.rb | 2 +- .../projects/branches/user_views_branches_spec.rb | 2 +- spec/features/projects/environments_pod_logs_spec.rb | 2 +- .../projects/files/dockerfile_dropdown_spec.rb | 2 +- .../projects/files/edit_file_soft_wrap_spec.rb | 2 +- spec/features/projects/files/editing_a_file_spec.rb | 2 +- .../files/files_sort_submodules_with_folders_spec.rb | 2 +- .../features/projects/files/find_file_keyboard_spec.rb | 2 +- .../features/projects/files/gitignore_dropdown_spec.rb | 2 +- .../projects/files/gitlab_ci_yml_dropdown_spec.rb | 2 +- .../files/project_owner_creates_license_file_spec.rb | 2 +- ...ink_to_create_license_file_in_empty_project_spec.rb | 2 +- .../projects/files/template_type_dropdown_spec.rb | 2 +- spec/features/projects/files/undo_template_spec.rb | 2 +- ...tree_with_a_folder_containing_only_a_folder_spec.rb | 2 +- .../features/projects/files/user_browses_files_spec.rb | 2 +- .../projects/files/user_browses_lfs_files_spec.rb | 2 +- .../projects/files/user_searches_for_files_spec.rb | 2 +- spec/features/projects/gfm_autocomplete_load_spec.rb | 2 +- .../design_management/user_uploads_designs_spec.rb | 2 +- .../members/owner_cannot_leave_project_spec.rb | 2 +- .../owner_cannot_request_access_to_his_project_spec.rb | 2 +- .../projects/members/user_requests_access_spec.rb | 2 +- spec/features/projects/navbar_spec.rb | 2 +- spec/features/projects/pipelines/pipeline_spec.rb | 2 +- .../projects/settings/monitor_settings_spec.rb | 2 +- .../projects/settings/packages_settings_spec.rb | 2 +- .../projects/settings/project_settings_spec.rb | 2 +- .../settings/user_interacts_with_deploy_keys_spec.rb | 2 +- spec/features/projects/show/redirects_spec.rb | 2 +- .../projects/show/user_manages_notifications_spec.rb | 2 +- .../show/user_sees_deletion_failure_message_spec.rb | 2 +- .../projects/show/user_sees_git_instructions_spec.rb | 4 ++-- .../projects/user_changes_project_visibility_spec.rb | 10 +++++----- spec/features/projects/user_uses_shortcuts_spec.rb | 2 +- .../wiki/user_views_wiki_in_project_page_spec.rb | 2 +- spec/features/projects_spec.rb | 8 ++++---- spec/features/protected_tags_spec.rb | 2 +- .../security/project/snippet/internal_access_spec.rb | 4 ++-- .../security/project/snippet/private_access_spec.rb | 2 +- .../security/project/snippet/public_access_spec.rb | 6 +++--- spec/features/snippets_spec.rb | 2 +- 69 files changed, 89 insertions(+), 89 deletions(-) diff --git a/spec/features/breadcrumbs_schema_markup_spec.rb b/spec/features/breadcrumbs_schema_markup_spec.rb index a87a3d284dedce..f86ad5cd2ae828 100644 --- a/spec/features/breadcrumbs_schema_markup_spec.rb +++ b/spec/features/breadcrumbs_schema_markup_spec.rb @@ -17,7 +17,7 @@ expect(item_list.size).to eq 2 expect(item_list[0]['name']).to eq project.namespace.name - expect(item_list[0]['item']).to eq user_url(project.owner) + expect(item_list[0]['item']).to eq user_url(project.first_owner) expect(item_list[1]['name']).to eq project.name expect(item_list[1]['item']).to eq project_url(project) @@ -59,7 +59,7 @@ expect(item_list.size).to eq 3 expect(item_list[0]['name']).to eq project.namespace.name - expect(item_list[0]['item']).to eq user_url(project.owner) + expect(item_list[0]['item']).to eq user_url(project.first_owner) expect(item_list[1]['name']).to eq project.name expect(item_list[1]['item']).to eq project_url(project) @@ -75,7 +75,7 @@ expect(item_list.size).to eq 4 expect(item_list[0]['name']).to eq project.namespace.name - expect(item_list[0]['item']).to eq user_url(project.owner) + expect(item_list[0]['item']).to eq user_url(project.first_owner) expect(item_list[1]['name']).to eq project.name expect(item_list[1]['item']).to eq project_url(project) diff --git a/spec/features/contextual_sidebar_spec.rb b/spec/features/contextual_sidebar_spec.rb index 29c7e0ddd216d1..cc4a0471d4ebfb 100644 --- a/spec/features/contextual_sidebar_spec.rb +++ b/spec/features/contextual_sidebar_spec.rb @@ -6,7 +6,7 @@ context 'when context is a project' do let_it_be(:project) { create(:project) } - let(:user) { project.owner } + let(:user) { project.first_owner } before do sign_in(user) diff --git a/spec/features/dashboard/snippets_spec.rb b/spec/features/dashboard/snippets_spec.rb index 224f2111014ce5..f891950eeb8b68 100644 --- a/spec/features/dashboard/snippets_spec.rb +++ b/spec/features/dashboard/snippets_spec.rb @@ -7,11 +7,11 @@ context 'when the project has snippets' do let(:project) { create(:project, :public, creator: user) } - let!(:snippets) { create_list(:project_snippet, 2, :public, author: project.owner, project: project) } + let!(:snippets) { create_list(:project_snippet, 2, :public, author: project.first_owner, project: project) } before do allow(Snippet).to receive(:default_per_page).and_return(1) - sign_in(project.owner) + sign_in(project.first_owner) visit dashboard_snippets_path end @@ -27,7 +27,7 @@ let(:project) { create(:project, :public, creator: user) } before do - sign_in(project.owner) + sign_in(project.first_owner) visit dashboard_snippets_path end diff --git a/spec/features/error_tracking/user_filters_errors_by_status_spec.rb b/spec/features/error_tracking/user_filters_errors_by_status_spec.rb index 6846d8f6ade576..d5dbe259159d6c 100644 --- a/spec/features/error_tracking/user_filters_errors_by_status_spec.rb +++ b/spec/features/error_tracking/user_filters_errors_by_status_spec.rb @@ -22,7 +22,7 @@ end it 'displays the results' do - sign_in(project.owner) + sign_in(project.first_owner) visit project_error_tracking_index_path(project) page.within(find('.gl-table')) do results = page.all('.table-row') diff --git a/spec/features/error_tracking/user_searches_sentry_errors_spec.rb b/spec/features/error_tracking/user_searches_sentry_errors_spec.rb index c16c9d3fb1f920..89bf79ebb81d7e 100644 --- a/spec/features/error_tracking/user_searches_sentry_errors_spec.rb +++ b/spec/features/error_tracking/user_searches_sentry_errors_spec.rb @@ -22,7 +22,7 @@ end it 'displays the results' do - sign_in(project.owner) + sign_in(project.first_owner) visit project_error_tracking_index_path(project) page.within(find('.gl-table')) do diff --git a/spec/features/error_tracking/user_sees_error_details_spec.rb b/spec/features/error_tracking/user_sees_error_details_spec.rb index e4a09d04ca1ac7..ecbb3fe04122ea 100644 --- a/spec/features/error_tracking/user_sees_error_details_spec.rb +++ b/spec/features/error_tracking/user_sees_error_details_spec.rb @@ -7,7 +7,7 @@ context 'with current user as project owner' do before do - sign_in(project.owner) + sign_in(project.first_owner) visit details_project_error_tracking_index_path(project, issue_id: issue_id) end diff --git a/spec/features/error_tracking/user_sees_error_index_spec.rb b/spec/features/error_tracking/user_sees_error_index_spec.rb index bc6709c659df00..21f9e688e3fc26 100644 --- a/spec/features/error_tracking/user_sees_error_index_spec.rb +++ b/spec/features/error_tracking/user_sees_error_index_spec.rb @@ -18,7 +18,7 @@ context 'with current user as project owner' do before do - sign_in(project.owner) + sign_in(project.first_owner) visit project_error_tracking_index_path(project) end @@ -43,7 +43,7 @@ context 'with error tracking settings disabled' do before do project_error_tracking_settings.update!(enabled: false) - sign_in(project.owner) + sign_in(project.first_owner) visit project_error_tracking_index_path(project) end diff --git a/spec/features/file_uploads/attachment_spec.rb b/spec/features/file_uploads/attachment_spec.rb index 9ad404ce86915c..41da0e9fbe0337 100644 --- a/spec/features/file_uploads/attachment_spec.rb +++ b/spec/features/file_uploads/attachment_spec.rb @@ -6,7 +6,7 @@ include_context 'file upload requests helpers' let_it_be(:project) { create(:project) } - let_it_be(:user) { project.owner } + let_it_be(:user) { project.first_owner } let_it_be(:personal_access_token) { create(:personal_access_token, user: user) } let(:api_path) { "/projects/#{project_id}/uploads" } diff --git a/spec/features/file_uploads/git_lfs_spec.rb b/spec/features/file_uploads/git_lfs_spec.rb index 239afb1a1bb08a..8d15c5c33f78ff 100644 --- a/spec/features/file_uploads/git_lfs_spec.rb +++ b/spec/features/file_uploads/git_lfs_spec.rb @@ -6,7 +6,7 @@ include_context 'file upload requests helpers' let_it_be(:project) { create(:project) } - let_it_be(:user) { project.owner } + let_it_be(:user) { project.first_owner } let_it_be(:personal_access_token) { create(:personal_access_token, user: user) } let(:file) { fixture_file_upload('spec/fixtures/banana_sample.gif') } diff --git a/spec/features/file_uploads/maven_package_spec.rb b/spec/features/file_uploads/maven_package_spec.rb index ab9f023bd8fdb7..70302142fa2776 100644 --- a/spec/features/file_uploads/maven_package_spec.rb +++ b/spec/features/file_uploads/maven_package_spec.rb @@ -6,7 +6,7 @@ include_context 'file upload requests helpers' let_it_be(:project) { create(:project) } - let_it_be(:user) { project.owner } + let_it_be(:user) { project.first_owner } let_it_be(:personal_access_token) { create(:personal_access_token, user: user) } let(:project_id) { project.id } diff --git a/spec/features/file_uploads/nuget_package_spec.rb b/spec/features/file_uploads/nuget_package_spec.rb index 871c0274445883..cbffd34d4ab2c8 100644 --- a/spec/features/file_uploads/nuget_package_spec.rb +++ b/spec/features/file_uploads/nuget_package_spec.rb @@ -6,7 +6,7 @@ include_context 'file upload requests helpers' let_it_be(:project) { create(:project) } - let_it_be(:user) { project.owner } + let_it_be(:user) { project.first_owner } let_it_be(:personal_access_token) { create(:personal_access_token, user: user) } let(:api_path) { "/projects/#{project.id}/packages/nuget/" } diff --git a/spec/features/file_uploads/rubygem_package_spec.rb b/spec/features/file_uploads/rubygem_package_spec.rb index 4a5891fdfeddbe..f91fb407b286ce 100644 --- a/spec/features/file_uploads/rubygem_package_spec.rb +++ b/spec/features/file_uploads/rubygem_package_spec.rb @@ -6,7 +6,7 @@ include_context 'file upload requests helpers' let_it_be(:project) { create(:project) } - let_it_be(:user) { project.owner } + let_it_be(:user) { project.first_owner } let_it_be(:personal_access_token) { create(:personal_access_token, user: user) } let(:api_path) { "/projects/#{project_id}/packages/rubygems/api/v1/gems" } diff --git a/spec/features/ide/user_commits_changes_spec.rb b/spec/features/ide/user_commits_changes_spec.rb index 1b1e71e2862d72..e1e586a4f18316 100644 --- a/spec/features/ide/user_commits_changes_spec.rb +++ b/spec/features/ide/user_commits_changes_spec.rb @@ -6,7 +6,7 @@ include WebIdeSpecHelpers let(:project) { create(:project, :public, :repository) } - let(:user) { project.owner } + let(:user) { project.first_owner } before do sign_in(user) diff --git a/spec/features/ide/user_opens_merge_request_spec.rb b/spec/features/ide/user_opens_merge_request_spec.rb index 7ae43f35901b15..72fe6eb6ca8ce3 100644 --- a/spec/features/ide/user_opens_merge_request_spec.rb +++ b/spec/features/ide/user_opens_merge_request_spec.rb @@ -5,7 +5,7 @@ RSpec.describe 'IDE merge request', :js do let(:merge_request) { create(:merge_request, :simple, source_project: project) } let(:project) { create(:project, :public, :repository) } - let(:user) { project.owner } + let(:user) { project.first_owner } before do sign_in(user) diff --git a/spec/features/issuables/markdown_references/internal_references_spec.rb b/spec/features/issuables/markdown_references/internal_references_spec.rb index 2dcabb38b8f4ae..ab7c0ce28916fd 100644 --- a/spec/features/issuables/markdown_references/internal_references_spec.rb +++ b/spec/features/issuables/markdown_references/internal_references_spec.rb @@ -5,11 +5,11 @@ RSpec.describe "Internal references", :js do include Spec::Support::Helpers::Features::NotesHelpers - let(:private_project_user) { private_project.owner } + let(:private_project_user) { private_project.first_owner } let(:private_project) { create(:project, :private, :repository) } let(:private_project_issue) { create(:issue, project: private_project) } let(:private_project_merge_request) { create(:merge_request, source_project: private_project) } - let(:public_project_user) { public_project.owner } + let(:public_project_user) { public_project.first_owner } let(:public_project) { create(:project, :public, :repository) } let(:public_project_issue) { create(:issue, project: public_project) } let(:public_project_merge_request) { create(:merge_request, source_project: public_project) } diff --git a/spec/features/issues/keyboard_shortcut_spec.rb b/spec/features/issues/keyboard_shortcut_spec.rb index 502412bab5d26a..4dbc5d8e01c9cf 100644 --- a/spec/features/issues/keyboard_shortcut_spec.rb +++ b/spec/features/issues/keyboard_shortcut_spec.rb @@ -8,7 +8,7 @@ let(:project) { create(:project) } before do - sign_in(project.owner) + sign_in(project.first_owner) visit project_path(project) end @@ -23,7 +23,7 @@ let(:project) { create(:project, :issues_disabled) } before do - sign_in(project.owner) + sign_in(project.first_owner) visit project_path(project) end diff --git a/spec/features/markdown/copy_as_gfm_spec.rb b/spec/features/markdown/copy_as_gfm_spec.rb index 0e5a20fe24a7e0..6951d8298e5fa2 100644 --- a/spec/features/markdown/copy_as_gfm_spec.rb +++ b/spec/features/markdown/copy_as_gfm_spec.rb @@ -663,7 +663,7 @@ def current_user let(:project) { create(:project, :repository) } before do - sign_in(project.owner) + sign_in(project.first_owner) end context 'from a diff' do diff --git a/spec/features/merge_request/user_edits_assignees_sidebar_spec.rb b/spec/features/merge_request/user_edits_assignees_sidebar_spec.rb index 1087be3d8c6283..5894ec923c20ce 100644 --- a/spec/features/merge_request/user_edits_assignees_sidebar_spec.rb +++ b/spec/features/merge_request/user_edits_assignees_sidebar_spec.rb @@ -24,7 +24,7 @@ before do stub_const('Autocomplete::UsersFinder::LIMIT', users_find_limit) - sign_in(project.owner) + sign_in(project.first_owner) merge_request.assignees << assignee diff --git a/spec/features/merge_request/user_interacts_with_batched_mr_diffs_spec.rb b/spec/features/merge_request/user_interacts_with_batched_mr_diffs_spec.rb index 3665ad91dd6c6c..ffb9694e806596 100644 --- a/spec/features/merge_request/user_interacts_with_batched_mr_diffs_spec.rb +++ b/spec/features/merge_request/user_interacts_with_batched_mr_diffs_spec.rb @@ -10,7 +10,7 @@ let(:merge_request) { create(:merge_request, source_project: project, source_branch: 'master', target_branch: 'empty-branch') } before do - sign_in(project.owner) + sign_in(project.first_owner) visit diffs_project_merge_request_path(merge_request.project, merge_request) wait_for_requests diff --git a/spec/features/merge_request/user_merges_merge_request_spec.rb b/spec/features/merge_request/user_merges_merge_request_spec.rb index 7758fa8e666b4c..d1be93cae02740 100644 --- a/spec/features/merge_request/user_merges_merge_request_spec.rb +++ b/spec/features/merge_request/user_merges_merge_request_spec.rb @@ -3,7 +3,7 @@ require "spec_helper" RSpec.describe "User merges a merge request", :js do - let(:user) { project.owner } + let(:user) { project.first_owner } before do sign_in(user) diff --git a/spec/features/merge_request/user_rebases_merge_request_spec.rb b/spec/features/merge_request/user_rebases_merge_request_spec.rb index a3f72a6266b6bd..d42864200ecb41 100644 --- a/spec/features/merge_request/user_rebases_merge_request_spec.rb +++ b/spec/features/merge_request/user_rebases_merge_request_spec.rb @@ -4,7 +4,7 @@ RSpec.describe "User rebases a merge request", :js do let(:merge_request) { create(:merge_request, :simple, source_project: project) } - let(:user) { project.owner } + let(:user) { project.first_owner } before do sign_in(user) diff --git a/spec/features/merge_request/user_reviews_image_spec.rb b/spec/features/merge_request/user_reviews_image_spec.rb index 533f3c9c91adbe..bd490294829493 100644 --- a/spec/features/merge_request/user_reviews_image_spec.rb +++ b/spec/features/merge_request/user_reviews_image_spec.rb @@ -6,7 +6,7 @@ include MergeRequestDiffHelpers include RepoHelpers - let(:user) { project.owner } + let(:user) { project.first_owner } let(:project) { create(:project, :repository) } let(:merge_request) { create(:merge_request_with_diffs, :with_image_diffs, source_project: project, author: user) } diff --git a/spec/features/merge_request/user_sees_diff_spec.rb b/spec/features/merge_request/user_sees_diff_spec.rb index a7713ed9964d9d..5e022598ac3319 100644 --- a/spec/features/merge_request/user_sees_diff_spec.rb +++ b/spec/features/merge_request/user_sees_diff_spec.rb @@ -82,7 +82,7 @@ end context 'when file contains html' do - let(:current_user) { project.owner } + let(:current_user) { project.first_owner } let(:branch_name) {"test_branch"} it 'escapes any HTML special characters in the diff chunk header' do @@ -123,7 +123,7 @@ context 'when file is stored in LFS' do let(:merge_request) { create(:merge_request, source_project: project) } - let(:current_user) { project.owner } + let(:current_user) { project.first_owner } context 'when LFS is enabled on the project' do before do diff --git a/spec/features/merge_request/user_views_merge_request_from_deleted_fork_spec.rb b/spec/features/merge_request/user_views_merge_request_from_deleted_fork_spec.rb index 370341a43f97e9..e3272a6e280c0c 100644 --- a/spec/features/merge_request/user_views_merge_request_from_deleted_fork_spec.rb +++ b/spec/features/merge_request/user_views_merge_request_from_deleted_fork_spec.rb @@ -11,7 +11,7 @@ let(:project) { create(:project, :repository) } let(:source_project) { fork_project(project, nil, repository: true) } - let(:user) { project.owner } + let(:user) { project.first_owner } let!(:merge_request) { create(:merge_request, :merged, source_project: source_project, target_project: project) } before do diff --git a/spec/features/projects/active_tabs_spec.rb b/spec/features/projects/active_tabs_spec.rb index b8c928004ed312..2601dcf55c9b64 100644 --- a/spec/features/projects/active_tabs_spec.rb +++ b/spec/features/projects/active_tabs_spec.rb @@ -5,7 +5,7 @@ RSpec.describe 'Project active tab' do let_it_be(:project) { create(:project, :repository) } - let(:user) { project.owner } + let(:user) { project.first_owner } before do sign_in(user) diff --git a/spec/features/projects/activity/rss_spec.rb b/spec/features/projects/activity/rss_spec.rb index 9012b335bf4180..a3e511b5c226ee 100644 --- a/spec/features/projects/activity/rss_spec.rb +++ b/spec/features/projects/activity/rss_spec.rb @@ -4,7 +4,7 @@ RSpec.describe 'Project Activity RSS' do let(:project) { create(:project, :public) } - let(:user) { project.owner } + let(:user) { project.first_owner } let(:path) { activity_project_path(project) } before do @@ -13,7 +13,7 @@ context 'when signed in' do before do - sign_in(project.owner) + sign_in(project.first_owner) visit path end diff --git a/spec/features/projects/blobs/blob_show_spec.rb b/spec/features/projects/blobs/blob_show_spec.rb index 62994d19fc0945..988051bca40def 100644 --- a/spec/features/projects/blobs/blob_show_spec.rb +++ b/spec/features/projects/blobs/blob_show_spec.rb @@ -174,7 +174,7 @@ def switch_ref_to(ref_name) it 'displays no highlighted number of different ref' do Files::UpdateService.new( project, - project.owner, + project.first_owner, commit_message: 'Update', start_branch: 'feature', branch_name: 'feature', diff --git a/spec/features/projects/blobs/user_follows_pipeline_suggest_nudge_spec.rb b/spec/features/projects/blobs/user_follows_pipeline_suggest_nudge_spec.rb index 1c79b2ddc38df7..a2db5e11c7ccbd 100644 --- a/spec/features/projects/blobs/user_follows_pipeline_suggest_nudge_spec.rb +++ b/spec/features/projects/blobs/user_follows_pipeline_suggest_nudge_spec.rb @@ -6,7 +6,7 @@ include CookieHelper let(:project) { create(:project, :empty_repo) } - let(:user) { project.owner } + let(:user) { project.first_owner } describe 'viewing the new blob page' do before do diff --git a/spec/features/projects/branches/user_views_branches_spec.rb b/spec/features/projects/branches/user_views_branches_spec.rb index d0c0a0860d914f..b6b6dcb5cf1a79 100644 --- a/spec/features/projects/branches/user_views_branches_spec.rb +++ b/spec/features/projects/branches/user_views_branches_spec.rb @@ -4,7 +4,7 @@ RSpec.describe "User views branches", :js do let_it_be(:project) { create(:project, :repository) } - let_it_be(:user) { project.owner } + let_it_be(:user) { project.first_owner } before do sign_in(user) diff --git a/spec/features/projects/environments_pod_logs_spec.rb b/spec/features/projects/environments_pod_logs_spec.rb index 7d31de2b4184d1..531eae1d638489 100644 --- a/spec/features/projects/environments_pod_logs_spec.rb +++ b/spec/features/projects/environments_pod_logs_spec.rb @@ -21,7 +21,7 @@ stub_kubeclient_ingresses(environment.deployment_namespace) stub_kubeclient_nodes_and_nodes_metrics(cluster.platform.api_url) - sign_in(project.owner) + sign_in(project.first_owner) end it "shows environments in dropdown" do diff --git a/spec/features/projects/files/dockerfile_dropdown_spec.rb b/spec/features/projects/files/dockerfile_dropdown_spec.rb index 11663158b33538..3a0cc61d9c619a 100644 --- a/spec/features/projects/files/dockerfile_dropdown_spec.rb +++ b/spec/features/projects/files/dockerfile_dropdown_spec.rb @@ -7,7 +7,7 @@ before do project = create(:project, :repository) - sign_in project.owner + sign_in project.first_owner visit project_new_blob_path(project, 'master', file_name: 'Dockerfile') end diff --git a/spec/features/projects/files/edit_file_soft_wrap_spec.rb b/spec/features/projects/files/edit_file_soft_wrap_spec.rb index fda024e893dcd7..e08c53a67dd777 100644 --- a/spec/features/projects/files/edit_file_soft_wrap_spec.rb +++ b/spec/features/projects/files/edit_file_soft_wrap_spec.rb @@ -5,7 +5,7 @@ RSpec.describe 'Projects > Files > User uses soft wrap while editing file', :js do before do project = create(:project, :repository) - user = project.owner + user = project.first_owner sign_in user visit project_new_blob_path(project, 'master', file_name: 'test_file-name') diff --git a/spec/features/projects/files/editing_a_file_spec.rb b/spec/features/projects/files/editing_a_file_spec.rb index 819864b3def2a6..e256bec2a1cd69 100644 --- a/spec/features/projects/files/editing_a_file_spec.rb +++ b/spec/features/projects/files/editing_a_file_spec.rb @@ -4,7 +4,7 @@ RSpec.describe 'Projects > Files > User wants to edit a file' do let(:project) { create(:project, :repository) } - let(:user) { project.owner } + let(:user) { project.first_owner } let(:commit_params) do { start_branch: project.default_branch, diff --git a/spec/features/projects/files/files_sort_submodules_with_folders_spec.rb b/spec/features/projects/files/files_sort_submodules_with_folders_spec.rb index 94190889acec20..a283f7d128c2dc 100644 --- a/spec/features/projects/files/files_sort_submodules_with_folders_spec.rb +++ b/spec/features/projects/files/files_sort_submodules_with_folders_spec.rb @@ -4,7 +4,7 @@ RSpec.describe 'Projects > Files > User views files page' do let(:project) { create(:forked_project_with_submodules) } - let(:user) { project.owner } + let(:user) { project.first_owner } before do sign_in user diff --git a/spec/features/projects/files/find_file_keyboard_spec.rb b/spec/features/projects/files/find_file_keyboard_spec.rb index 4293183fd9a6dc..9ae3be4993b9a9 100644 --- a/spec/features/projects/files/find_file_keyboard_spec.rb +++ b/spec/features/projects/files/find_file_keyboard_spec.rb @@ -4,7 +4,7 @@ RSpec.describe 'Projects > Files > Find file keyboard shortcuts', :js do let(:project) { create(:project, :repository) } - let(:user) { project.owner } + let(:user) { project.first_owner } before do sign_in user diff --git a/spec/features/projects/files/gitignore_dropdown_spec.rb b/spec/features/projects/files/gitignore_dropdown_spec.rb index d47eaee2e79306..4a92216f46c263 100644 --- a/spec/features/projects/files/gitignore_dropdown_spec.rb +++ b/spec/features/projects/files/gitignore_dropdown_spec.rb @@ -7,7 +7,7 @@ before do project = create(:project, :repository) - sign_in project.owner + sign_in project.first_owner visit project_new_blob_path(project, 'master', file_name: '.gitignore') end diff --git a/spec/features/projects/files/gitlab_ci_yml_dropdown_spec.rb b/spec/features/projects/files/gitlab_ci_yml_dropdown_spec.rb index fc199f66490fff..cdf6c219ea5819 100644 --- a/spec/features/projects/files/gitlab_ci_yml_dropdown_spec.rb +++ b/spec/features/projects/files/gitlab_ci_yml_dropdown_spec.rb @@ -11,7 +11,7 @@ let_it_be(:project) { create(:project, :repository) } before do - sign_in project.owner + sign_in project.first_owner visit project_new_blob_path(project, 'master', file_name: filename, **params) end diff --git a/spec/features/projects/files/project_owner_creates_license_file_spec.rb b/spec/features/projects/files/project_owner_creates_license_file_spec.rb index ab62e8aabc0b0f..4a0b1f4c5482ad 100644 --- a/spec/features/projects/files/project_owner_creates_license_file_spec.rb +++ b/spec/features/projects/files/project_owner_creates_license_file_spec.rb @@ -4,7 +4,7 @@ RSpec.describe 'Projects > Files > Project owner creates a license file', :js do let(:project) { create(:project, :repository) } - let(:project_maintainer) { project.owner } + let(:project_maintainer) { project.first_owner } before do project.repository.delete_file(project_maintainer, 'LICENSE', diff --git a/spec/features/projects/files/project_owner_sees_link_to_create_license_file_in_empty_project_spec.rb b/spec/features/projects/files/project_owner_sees_link_to_create_license_file_in_empty_project_spec.rb index 37583870cfd857..ca384291c127b5 100644 --- a/spec/features/projects/files/project_owner_sees_link_to_create_license_file_in_empty_project_spec.rb +++ b/spec/features/projects/files/project_owner_sees_link_to_create_license_file_in_empty_project_spec.rb @@ -6,7 +6,7 @@ include WebIdeSpecHelpers let(:project) { create(:project_empty_repo) } - let(:project_maintainer) { project.owner } + let(:project_maintainer) { project.first_owner } before do sign_in(project_maintainer) diff --git a/spec/features/projects/files/template_type_dropdown_spec.rb b/spec/features/projects/files/template_type_dropdown_spec.rb index ca9ce841a92056..9cdb5eeb0768ac 100644 --- a/spec/features/projects/files/template_type_dropdown_spec.rb +++ b/spec/features/projects/files/template_type_dropdown_spec.rb @@ -4,7 +4,7 @@ RSpec.describe 'Projects > Files > Template type dropdown selector', :js do let(:project) { create(:project, :repository) } - let(:user) { project.owner } + let(:user) { project.first_owner } before do sign_in user diff --git a/spec/features/projects/files/undo_template_spec.rb b/spec/features/projects/files/undo_template_spec.rb index 560cb53ead21be..0b2daf120632a0 100644 --- a/spec/features/projects/files/undo_template_spec.rb +++ b/spec/features/projects/files/undo_template_spec.rb @@ -4,7 +4,7 @@ RSpec.describe 'Projects > Files > Template Undo Button', :js do let(:project) { create(:project, :repository) } - let(:user) { project.owner } + let(:user) { project.first_owner } before do sign_in user diff --git a/spec/features/projects/files/user_browses_a_tree_with_a_folder_containing_only_a_folder_spec.rb b/spec/features/projects/files/user_browses_a_tree_with_a_folder_containing_only_a_folder_spec.rb index 4d9da783f98c15..220572c6a6dbba 100644 --- a/spec/features/projects/files/user_browses_a_tree_with_a_folder_containing_only_a_folder_spec.rb +++ b/spec/features/projects/files/user_browses_a_tree_with_a_folder_containing_only_a_folder_spec.rb @@ -5,7 +5,7 @@ # This is a regression test for https://gitlab.com/gitlab-org/gitlab-foss/issues/37569 RSpec.describe 'Projects > Files > User browses a tree with a folder containing only a folder', :js do let(:project) { create(:project, :empty_repo) } - let(:user) { project.owner } + let(:user) { project.first_owner } before do project.repository.create_dir(user, 'foo/bar', branch_name: 'master', message: 'Add the foo/bar folder') diff --git a/spec/features/projects/files/user_browses_files_spec.rb b/spec/features/projects/files/user_browses_files_spec.rb index 508dec70db6da2..c764bddd3b30c9 100644 --- a/spec/features/projects/files/user_browses_files_spec.rb +++ b/spec/features/projects/files/user_browses_files_spec.rb @@ -13,7 +13,7 @@ let(:project) { create(:project, :repository, name: "Shop") } let(:project2) { create(:project, :repository, name: "Another Project", path: "another-project") } let(:tree_path_root_ref) { project_tree_path(project, project.repository.root_ref) } - let(:user) { project.owner } + let(:user) { project.first_owner } before do sign_in(user) diff --git a/spec/features/projects/files/user_browses_lfs_files_spec.rb b/spec/features/projects/files/user_browses_lfs_files_spec.rb index 176998477046f9..3976df849fa465 100644 --- a/spec/features/projects/files/user_browses_lfs_files_spec.rb +++ b/spec/features/projects/files/user_browses_lfs_files_spec.rb @@ -4,7 +4,7 @@ RSpec.describe 'Projects > Files > User browses LFS files' do let(:project) { create(:project, :repository) } - let(:user) { project.owner } + let(:user) { project.first_owner } before do sign_in(user) diff --git a/spec/features/projects/files/user_searches_for_files_spec.rb b/spec/features/projects/files/user_searches_for_files_spec.rb index 7fd7dfff279587..cce73d06f94325 100644 --- a/spec/features/projects/files/user_searches_for_files_spec.rb +++ b/spec/features/projects/files/user_searches_for_files_spec.rb @@ -3,7 +3,7 @@ require 'spec_helper' RSpec.describe 'Projects > Files > User searches for files' do - let(:user) { project.owner } + let(:user) { project.first_owner } before do sign_in(user) diff --git a/spec/features/projects/gfm_autocomplete_load_spec.rb b/spec/features/projects/gfm_autocomplete_load_spec.rb index f4cd65bcba1cf3..a7d68b07dd3467 100644 --- a/spec/features/projects/gfm_autocomplete_load_spec.rb +++ b/spec/features/projects/gfm_autocomplete_load_spec.rb @@ -6,7 +6,7 @@ let(:project) { create(:project) } before do - sign_in(project.owner) + sign_in(project.first_owner) visit project_path(project) end diff --git a/spec/features/projects/issues/design_management/user_uploads_designs_spec.rb b/spec/features/projects/issues/design_management/user_uploads_designs_spec.rb index 211576a93f38a1..762f9c335100c9 100644 --- a/spec/features/projects/issues/design_management/user_uploads_designs_spec.rb +++ b/spec/features/projects/issues/design_management/user_uploads_designs_spec.rb @@ -6,7 +6,7 @@ include DesignManagementTestHelpers let(:project) { create(:project_empty_repo, :public) } - let(:user) { project.owner } + let(:user) { project.first_owner } let(:issue) { create(:issue, project: project) } before do diff --git a/spec/features/projects/members/owner_cannot_leave_project_spec.rb b/spec/features/projects/members/owner_cannot_leave_project_spec.rb index fbe8583b236156..45a8f979b879c0 100644 --- a/spec/features/projects/members/owner_cannot_leave_project_spec.rb +++ b/spec/features/projects/members/owner_cannot_leave_project_spec.rb @@ -6,7 +6,7 @@ let(:project) { create(:project) } before do - sign_in(project.owner) + sign_in(project.first_owner) visit project_path(project) end diff --git a/spec/features/projects/members/owner_cannot_request_access_to_his_project_spec.rb b/spec/features/projects/members/owner_cannot_request_access_to_his_project_spec.rb index 5e6e3d4d7f2fac..fad5d831c19f98 100644 --- a/spec/features/projects/members/owner_cannot_request_access_to_his_project_spec.rb +++ b/spec/features/projects/members/owner_cannot_request_access_to_his_project_spec.rb @@ -6,7 +6,7 @@ let(:project) { create(:project) } before do - sign_in(project.owner) + sign_in(project.first_owner) visit project_path(project) end diff --git a/spec/features/projects/members/user_requests_access_spec.rb b/spec/features/projects/members/user_requests_access_spec.rb index dcaef5f4ef0d26..0b00656f87b4bf 100644 --- a/spec/features/projects/members/user_requests_access_spec.rb +++ b/spec/features/projects/members/user_requests_access_spec.rb @@ -6,7 +6,7 @@ let_it_be(:user) { create(:user) } let_it_be(:project) { create(:project, :public, :repository) } - let(:maintainer) { project.owner } + let(:maintainer) { project.first_owner } before do sign_in(user) diff --git a/spec/features/projects/navbar_spec.rb b/spec/features/projects/navbar_spec.rb index f61eaccf5b96bf..91e643ff258b33 100644 --- a/spec/features/projects/navbar_spec.rb +++ b/spec/features/projects/navbar_spec.rb @@ -10,7 +10,7 @@ let_it_be(:project) { create(:project, :repository) } - let(:user) { project.owner } + let(:user) { project.first_owner } before do sign_in(user) diff --git a/spec/features/projects/pipelines/pipeline_spec.rb b/spec/features/projects/pipelines/pipeline_spec.rb index 5176a7ec5a11c6..01c942aec4c848 100644 --- a/spec/features/projects/pipelines/pipeline_spec.rb +++ b/spec/features/projects/pipelines/pipeline_spec.rb @@ -715,7 +715,7 @@ let(:schedule) do create(:ci_pipeline_schedule, project: project, - owner: project.owner, + owner: project.first_owner, description: 'blocked user schedule' ).tap do |schedule| schedule.update_column(:next_run_at, 1.minute.ago) diff --git a/spec/features/projects/settings/monitor_settings_spec.rb b/spec/features/projects/settings/monitor_settings_spec.rb index 3f6c4646f00982..871391fbe9c379 100644 --- a/spec/features/projects/settings/monitor_settings_spec.rb +++ b/spec/features/projects/settings/monitor_settings_spec.rb @@ -5,7 +5,7 @@ RSpec.describe 'Projects > Settings > For a forked project', :js do let_it_be(:project) { create(:project, :repository, create_templates: :issue) } - let(:user) { project.owner } + let(:user) { project.first_owner } before do sign_in(user) diff --git a/spec/features/projects/settings/packages_settings_spec.rb b/spec/features/projects/settings/packages_settings_spec.rb index e70839e9720a10..057e6b635fe8e4 100644 --- a/spec/features/projects/settings/packages_settings_spec.rb +++ b/spec/features/projects/settings/packages_settings_spec.rb @@ -5,7 +5,7 @@ RSpec.describe 'Projects > Settings > Packages', :js do let_it_be(:project) { create(:project) } - let(:user) { project.owner } + let(:user) { project.first_owner } before do sign_in(user) diff --git a/spec/features/projects/settings/project_settings_spec.rb b/spec/features/projects/settings/project_settings_spec.rb index b67caa5a5f97a1..a0d44b579a875f 100644 --- a/spec/features/projects/settings/project_settings_spec.rb +++ b/spec/features/projects/settings/project_settings_spec.rb @@ -5,7 +5,7 @@ RSpec.describe 'Projects settings' do let_it_be(:project) { create(:project) } - let(:user) { project.owner } + let(:user) { project.first_owner } let(:panel) { find('.general-settings', match: :first) } let(:button) { panel.find('.btn.gl-button.js-settings-toggle') } let(:title) { panel.find('.settings-title') } diff --git a/spec/features/projects/settings/user_interacts_with_deploy_keys_spec.rb b/spec/features/projects/settings/user_interacts_with_deploy_keys_spec.rb index 91a7753fe6d1fc..d16295aedbee31 100644 --- a/spec/features/projects/settings/user_interacts_with_deploy_keys_spec.rb +++ b/spec/features/projects/settings/user_interacts_with_deploy_keys_spec.rb @@ -4,7 +4,7 @@ RSpec.describe "User interacts with deploy keys", :js do let(:project) { create(:project, :repository) } - let(:user) { project.owner } + let(:user) { project.first_owner } before do sign_in(user) diff --git a/spec/features/projects/show/redirects_spec.rb b/spec/features/projects/show/redirects_spec.rb index 659edda5672f01..3ac82244ded33f 100644 --- a/spec/features/projects/show/redirects_spec.rb +++ b/spec/features/projects/show/redirects_spec.rb @@ -47,7 +47,7 @@ it 'redirects to private project page after sign in' do visit project_path(private_project) - owner = private_project.owner + owner = private_project.first_owner fill_in 'user_login', with: owner.email fill_in 'user_password', with: owner.password click_button 'Sign in' diff --git a/spec/features/projects/show/user_manages_notifications_spec.rb b/spec/features/projects/show/user_manages_notifications_spec.rb index 80dae4ec386639..1df37eef6a944f 100644 --- a/spec/features/projects/show/user_manages_notifications_spec.rb +++ b/spec/features/projects/show/user_manages_notifications_spec.rb @@ -6,7 +6,7 @@ let(:project) { create(:project, :public, :repository) } before do - sign_in(project.owner) + sign_in(project.first_owner) end def click_notifications_button diff --git a/spec/features/projects/show/user_sees_deletion_failure_message_spec.rb b/spec/features/projects/show/user_sees_deletion_failure_message_spec.rb index b7af0c29b33f7a..47e010dcf89cbe 100644 --- a/spec/features/projects/show/user_sees_deletion_failure_message_spec.rb +++ b/spec/features/projects/show/user_sees_deletion_failure_message_spec.rb @@ -6,7 +6,7 @@ let(:project) { create(:project, :empty_repo, pending_delete: true) } before do - sign_in(project.owner) + sign_in(project.first_owner) end it 'shows error message if deletion for project fails' do diff --git a/spec/features/projects/show/user_sees_git_instructions_spec.rb b/spec/features/projects/show/user_sees_git_instructions_spec.rb index e6157887c12699..5270939f681479 100644 --- a/spec/features/projects/show/user_sees_git_instructions_spec.rb +++ b/spec/features/projects/show/user_sees_git_instructions_spec.rb @@ -61,7 +61,7 @@ let_it_be(:project) { create(:project, :public) } before do - sign_in(project.owner) + sign_in(project.first_owner) visit project_path(project) end @@ -77,7 +77,7 @@ .at_least(:once) .and_return('example_branch') - sign_in(project.owner) + sign_in(project.first_owner) visit project_path(project) end diff --git a/spec/features/projects/user_changes_project_visibility_spec.rb b/spec/features/projects/user_changes_project_visibility_spec.rb index 68fed9b8a74e3d..d2a7596aec0b40 100644 --- a/spec/features/projects/user_changes_project_visibility_spec.rb +++ b/spec/features/projects/user_changes_project_visibility_spec.rb @@ -43,9 +43,9 @@ context 'when the project has forks' do before do - fork_project(project, project.owner) + fork_project(project, project.first_owner) - sign_in(project.owner) + sign_in(project.first_owner) visit edit_project_path(project) end @@ -84,7 +84,7 @@ let(:project) { create(:project, :empty_repo, :public) } before do - sign_in(project.owner) + sign_in(project.first_owner) visit edit_project_path(project) end @@ -98,9 +98,9 @@ before do stub_feature_flags(unlink_fork_network_upon_visibility_decrease: false) - fork_project(project, project.owner) + fork_project(project, project.first_owner) - sign_in(project.owner) + sign_in(project.first_owner) visit edit_project_path(project) end diff --git a/spec/features/projects/user_uses_shortcuts_spec.rb b/spec/features/projects/user_uses_shortcuts_spec.rb index 7bb15451538c04..cd6f09ce2752e9 100644 --- a/spec/features/projects/user_uses_shortcuts_spec.rb +++ b/spec/features/projects/user_uses_shortcuts_spec.rb @@ -5,7 +5,7 @@ RSpec.describe 'User uses shortcuts', :js do let_it_be(:project) { create(:project, :repository) } - let(:user) { project.owner } + let(:user) { project.first_owner } before do sign_in(user) diff --git a/spec/features/projects/wiki/user_views_wiki_in_project_page_spec.rb b/spec/features/projects/wiki/user_views_wiki_in_project_page_spec.rb index 63ee89bd11f3d3..fbb5c24f6e181c 100644 --- a/spec/features/projects/wiki/user_views_wiki_in_project_page_spec.rb +++ b/spec/features/projects/wiki/user_views_wiki_in_project_page_spec.rb @@ -4,7 +4,7 @@ RSpec.describe 'Projects > Wiki > User views wiki in project page' do before do - sign_in(project.owner) + sign_in(project.first_owner) end context 'when repository is disabled for project' do diff --git a/spec/features/projects_spec.rb b/spec/features/projects_spec.rb index 26deca9c8f1ec1..31f300753273f4 100644 --- a/spec/features/projects_spec.rb +++ b/spec/features/projects_spec.rb @@ -59,7 +59,7 @@ let(:path) { project_path(project) } before do - sign_in(project.owner) + sign_in(project.first_owner) end it 'parses Markdown' do @@ -123,7 +123,7 @@ let(:path) { project_path(project) } before do - sign_in(project.owner) + sign_in(project.first_owner) visit path end @@ -154,7 +154,7 @@ let(:path) { project_path(project) } before do - sign_in(project.owner) + sign_in(project.first_owner) visit path end @@ -201,7 +201,7 @@ it 'does not show the name of the deleted project when the source was deleted', :sidekiq_might_not_need_inline do forked_project - Projects::DestroyService.new(base_project, base_project.owner).execute + Projects::DestroyService.new(base_project, base_project.first_owner).execute visit project_path(forked_project) diff --git a/spec/features/protected_tags_spec.rb b/spec/features/protected_tags_spec.rb index 376f990f054882..c89dd4d1f9004c 100644 --- a/spec/features/protected_tags_spec.rb +++ b/spec/features/protected_tags_spec.rb @@ -6,7 +6,7 @@ include ProtectedTagHelpers let(:project) { create(:project, :repository) } - let(:user) { project.owner } + let(:user) { project.first_owner } before do sign_in(user) diff --git a/spec/features/security/project/snippet/internal_access_spec.rb b/spec/features/security/project/snippet/internal_access_spec.rb index 12237863188381..ab080f0a46098d 100644 --- a/spec/features/security/project/snippet/internal_access_spec.rb +++ b/spec/features/security/project/snippet/internal_access_spec.rb @@ -6,8 +6,8 @@ include AccessMatchers let_it_be(:project) { create(:project, :internal) } - let_it_be(:internal_snippet) { create(:project_snippet, :internal, project: project, author: project.owner) } - let_it_be(:private_snippet) { create(:project_snippet, :private, project: project, author: project.owner) } + let_it_be(:internal_snippet) { create(:project_snippet, :internal, project: project, author: project.first_owner) } + let_it_be(:private_snippet) { create(:project_snippet, :private, project: project, author: project.first_owner) } describe "GET /:project_path/snippets" do subject { project_snippets_path(project) } diff --git a/spec/features/security/project/snippet/private_access_spec.rb b/spec/features/security/project/snippet/private_access_spec.rb index 0c06841399d825..1e0afc09b7456c 100644 --- a/spec/features/security/project/snippet/private_access_spec.rb +++ b/spec/features/security/project/snippet/private_access_spec.rb @@ -6,7 +6,7 @@ include AccessMatchers let_it_be(:project) { create(:project, :private) } - let_it_be(:private_snippet) { create(:project_snippet, :private, project: project, author: project.owner) } + let_it_be(:private_snippet) { create(:project_snippet, :private, project: project, author: project.first_owner) } describe "GET /:project_path/snippets" do subject { project_snippets_path(project) } diff --git a/spec/features/security/project/snippet/public_access_spec.rb b/spec/features/security/project/snippet/public_access_spec.rb index 2ae08205602396..f734f7ba9e2061 100644 --- a/spec/features/security/project/snippet/public_access_spec.rb +++ b/spec/features/security/project/snippet/public_access_spec.rb @@ -6,9 +6,9 @@ include AccessMatchers let_it_be(:project) { create(:project, :public) } - let_it_be(:public_snippet) { create(:project_snippet, :public, project: project, author: project.owner) } - let_it_be(:internal_snippet) { create(:project_snippet, :internal, project: project, author: project.owner) } - let_it_be(:private_snippet) { create(:project_snippet, :private, project: project, author: project.owner) } + let_it_be(:public_snippet) { create(:project_snippet, :public, project: project, author: project.first_owner) } + let_it_be(:internal_snippet) { create(:project_snippet, :internal, project: project, author: project.first_owner) } + let_it_be(:private_snippet) { create(:project_snippet, :private, project: project, author: project.first_owner) } describe "GET /:project_path/snippets" do subject { project_snippets_path(project) } diff --git a/spec/features/snippets_spec.rb b/spec/features/snippets_spec.rb index 8cdb4bc3344b8d..35eb5c2e1934d3 100644 --- a/spec/features/snippets_spec.rb +++ b/spec/features/snippets_spec.rb @@ -5,7 +5,7 @@ RSpec.describe 'Snippets' do context 'when the project has snippets' do let(:project) { create(:project, :public) } - let!(:snippets) { create_list(:project_snippet, 2, :public, author: project.owner, project: project) } + let!(:snippets) { create_list(:project_snippet, 2, :public, author: project.first_owner, project: project) } before do allow(Snippet).to receive(:default_per_page).and_return(1) -- GitLab