diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2022-09-16 21:10:35 +0300 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2022-09-16 21:10:35 +0300 |
commit | 8e359577a7ec5e6a5e1e9f4db1114888c4b0c55a (patch) | |
tree | 32c2f4509d804f2e80796c4a6fdc765d7e6ae6de /spec | |
parent | 282e71d66029b153017dab5d33e735078c374c2e (diff) |
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'spec')
64 files changed, 411 insertions, 172 deletions
diff --git a/spec/controllers/confirmations_controller_spec.rb b/spec/controllers/confirmations_controller_spec.rb index 5b137ada141..111bfb24c7e 100644 --- a/spec/controllers/confirmations_controller_spec.rb +++ b/spec/controllers/confirmations_controller_spec.rb @@ -129,6 +129,10 @@ RSpec.describe ConfirmationsController do subject(:perform_request) { post(:create, params: { user: { email: user.email } }) } + before do + stub_feature_flags(identity_verification: false) + end + context 'when reCAPTCHA is disabled' do before do stub_application_setting(recaptcha_enabled: false) diff --git a/spec/controllers/registrations_controller_spec.rb b/spec/controllers/registrations_controller_spec.rb index 2af04918882..637c774c38b 100644 --- a/spec/controllers/registrations_controller_spec.rb +++ b/spec/controllers/registrations_controller_spec.rb @@ -122,6 +122,7 @@ RSpec.describe RegistrationsController do context 'when `send_user_confirmation_email` is true' do before do stub_application_setting(send_user_confirmation_email: true) + stub_feature_flags(identity_verification: false) end it 'sends a confirmation email' do @@ -134,6 +135,10 @@ RSpec.describe RegistrationsController do end context 'email confirmation' do + before do + stub_feature_flags(identity_verification: false) + end + context 'when send_user_confirmation_email is false' do it 'signs the user in' do stub_application_setting(send_user_confirmation_email: false) diff --git a/spec/factories/packages/debian/component_file.rb b/spec/factories/packages/debian/component_file.rb index 7d447d00e15..a2422e4a126 100644 --- a/spec/factories/packages/debian/component_file.rb +++ b/spec/factories/packages/debian/component_file.rb @@ -38,6 +38,12 @@ FactoryBot.define do file_fixture { 'spec/fixtures/packages/debian/distribution/D-I-Packages' } end + trait(:older_sha256) do + created_at { '2020-01-24T08:00:00Z' } + file_sha256 { '157a1ad2b9102038560eea56771913b312ebf25093f5ef3b9842021c639c880d' } + file_fixture { 'spec/fixtures/packages/debian/distribution/OtherSHA256' } + end + trait(:object_storage) do file_store { Packages::PackageFileUploader::Store::REMOTE } end diff --git a/spec/factories/protected_branches.rb b/spec/factories/protected_branches.rb index 142ddb2b2c7..425352783dd 100644 --- a/spec/factories/protected_branches.rb +++ b/spec/factories/protected_branches.rb @@ -6,6 +6,7 @@ FactoryBot.define do project transient do + ee { false } default_push_level { true } default_merge_level { true } default_access_level { true } @@ -17,14 +18,11 @@ FactoryBot.define do ProtectedBranches::CacheService.new(protected_branch.project).refresh end - after(:build) do |protected_branch, evaluator| - if evaluator.default_access_level && evaluator.default_push_level - protected_branch.push_access_levels.new(access_level: Gitlab::Access::MAINTAINER) - end + after(:build) do |obj, ctx| + next if ctx.ee || !ctx.default_access_level - if evaluator.default_access_level && evaluator.default_merge_level - protected_branch.merge_access_levels.new(access_level: Gitlab::Access::MAINTAINER) - end + obj.push_access_levels.new(access_level: Gitlab::Access::MAINTAINER) if ctx.default_push_level + obj.merge_access_levels.new(access_level: Gitlab::Access::MAINTAINER) if ctx.default_merge_level end trait :create_branch_on_repository do diff --git a/spec/features/admin/admin_runners_spec.rb b/spec/features/admin/admin_runners_spec.rb index 8228a58fdbb..fe9fd01d3d5 100644 --- a/spec/features/admin/admin_runners_spec.rb +++ b/spec/features/admin/admin_runners_spec.rb @@ -34,7 +34,7 @@ RSpec.describe "Admin Runners" do context "when there are runners" do context "with an instance runner" do - let!(:instance_runner) { create(:ci_runner, :instance) } + let_it_be(:instance_runner) { create(:ci_runner, :instance) } before do visit admin_runners_path @@ -86,10 +86,12 @@ RSpec.describe "Admin Runners" do end describe 'search' do - before do + before_all do create(:ci_runner, :instance, description: 'runner-foo') create(:ci_runner, :instance, description: 'runner-bar') + end + before do visit admin_runners_path end @@ -130,10 +132,12 @@ RSpec.describe "Admin Runners" do end describe 'filter by paused' do - before do + before_all do create(:ci_runner, :instance, description: 'runner-active') create(:ci_runner, :instance, description: 'runner-paused', active: false) + end + before do visit admin_runners_path end @@ -164,15 +168,17 @@ RSpec.describe "Admin Runners" do end describe 'filter by status' do - let!(:never_contacted) do + let_it_be(:never_contacted) do create(:ci_runner, :instance, description: 'runner-never-contacted', contacted_at: nil) end - before do + before_all do create(:ci_runner, :instance, description: 'runner-1', contacted_at: Time.zone.now) create(:ci_runner, :instance, description: 'runner-2', contacted_at: Time.zone.now) create(:ci_runner, :instance, description: 'runner-offline', contacted_at: 1.week.ago) + end + before do visit admin_runners_path end @@ -238,7 +244,7 @@ RSpec.describe "Admin Runners" do end describe 'filter by type' do - before do + before_all do create(:ci_runner, :project, description: 'runner-project', projects: [project]) create(:ci_runner, :group, description: 'runner-group', groups: [group]) end @@ -345,7 +351,7 @@ RSpec.describe "Admin Runners" do end describe 'filter by tag' do - before do + before_all do create(:ci_runner, :instance, description: 'runner-blue', tag_list: ['blue']) create(:ci_runner, :instance, description: 'runner-red', tag_list: ['red']) end @@ -464,7 +470,7 @@ RSpec.describe "Admin Runners" do end describe "Runner show page", :js do - let(:runner) do + let_it_be(:runner) do create( :ci_runner, description: 'runner-foo', @@ -520,9 +526,9 @@ RSpec.describe "Admin Runners" do end describe "Runner edit page" do - let(:project_runner) { create(:ci_runner, :project) } - let!(:project1) { create(:project) } - let!(:project2) { create(:project) } + let_it_be(:project1) { create(:project) } + let_it_be(:project2) { create(:project) } + let_it_be(:project_runner) { create(:ci_runner, :project) } before do visit edit_admin_runner_path(project_runner) diff --git a/spec/features/invites_spec.rb b/spec/features/invites_spec.rb index a86e4cead48..34990a53b51 100644 --- a/spec/features/invites_spec.rb +++ b/spec/features/invites_spec.rb @@ -246,6 +246,7 @@ RSpec.describe 'Group or Project invitations', :aggregate_failures do before do stub_feature_flags(soft_email_confirmation: false) allow(User).to receive(:allow_unconfirmed_access_for).and_return 0 + stub_feature_flags(identity_verification: false) end it 'signs up and redirects to the group activity page' do diff --git a/spec/features/users/email_verification_on_login_spec.rb b/spec/features/users/email_verification_on_login_spec.rb index 1bfc59c3e73..f7102eaf9b7 100644 --- a/spec/features/users/email_verification_on_login_spec.rb +++ b/spec/features/users/email_verification_on_login_spec.rb @@ -118,7 +118,7 @@ RSpec.describe 'Email Verification On Login', :clean_gitlab_redis_rate_limiting # Expect an error message expect_log_message('Failed Attempt', reason: 'rate_limited') expect(page).to have_content("You've reached the maximum amount of tries. "\ - 'Wait 10 minutes or resend a new code and try again.') + 'Wait 10 minutes or send a new code and try again.') # Wait for 10 minutes travel 10.minutes @@ -138,7 +138,7 @@ RSpec.describe 'Email Verification On Login', :clean_gitlab_redis_rate_limiting # Expect an error message expect_log_message('Failed Attempt', reason: 'invalid') - expect(page).to have_content('The code is incorrect. Enter it again, or resend a new code.') + expect(page).to have_content('The code is incorrect. Enter it again, or send a new code.') end it 'verifies expired codes' do @@ -155,7 +155,7 @@ RSpec.describe 'Email Verification On Login', :clean_gitlab_redis_rate_limiting # Expect an error message expect_log_message('Failed Attempt', reason: 'expired') - expect(page).to have_content('The code has expired. Resend a new code and try again.') + expect(page).to have_content('The code has expired. Send a new code and try again.') end end end @@ -255,7 +255,7 @@ RSpec.describe 'Email Verification On Login', :clean_gitlab_redis_rate_limiting perform_enqueued_jobs do # The user is prompted for a verification code gitlab_sign_in(user) - expect(page).to have_content('Help us protect your account') + expect(page).to have_content(s_('IdentityVerification|Help us protect your account')) code = expect_instructions_email_and_extract_code # We toggle the feature flag off @@ -266,12 +266,13 @@ RSpec.describe 'Email Verification On Login', :clean_gitlab_redis_rate_limiting new_code = expect_instructions_email_and_extract_code verify_code(code) - expect(page).to have_content('The code is incorrect. Enter it again, or resend a new code.') + expect(page) + .to have_content(s_('IdentityVerification|The code is incorrect. Enter it again, or send a new code.')) travel Users::EmailVerification::ValidateTokenService::TOKEN_VALID_FOR_MINUTES.minutes + 1.second verify_code(new_code) - expect(page).to have_content('The code has expired. Resend a new code and try again.') + expect(page).to have_content(s_('IdentityVerification|The code has expired. Send a new code and try again.')) click_link 'Resend code' another_code = expect_instructions_email_and_extract_code @@ -296,7 +297,7 @@ RSpec.describe 'Email Verification On Login', :clean_gitlab_redis_rate_limiting it 'the unlock link still works' do # The user is locked and unlock instructions are sent - expect(page).to have_content('Invalid login or password.') + expect(page).to have_content(_('Invalid login or password.')) user.reload expect(user.locked_at).not_to be_nil expect(user.unlock_token).not_to be_nil @@ -334,15 +335,15 @@ RSpec.describe 'Email Verification On Login', :clean_gitlab_redis_rate_limiting def expect_instructions_email_and_extract_code mail = find_email_for(user) expect(mail.to).to match_array([user.email]) - expect(mail.subject).to eq('Verify your identity') + expect(mail.subject).to eq(s_('IdentityVerification|Verify your identity')) code = mail.body.parts.first.to_s[/\d{#{Users::EmailVerification::GenerateTokenService::TOKEN_LENGTH}}/o] reset_delivered_emails! code end def verify_code(code) - fill_in 'Verification code', with: code - click_button 'Verify code' + fill_in s_('IdentityVerification|Verification code'), with: code + click_button s_('IdentityVerification|Verify code') end def expect_log_message(event = nil, times = 1, reason: '', message: nil) diff --git a/spec/features/users/login_spec.rb b/spec/features/users/login_spec.rb index 4c294063a4e..5ca5bd72b79 100644 --- a/spec/features/users/login_spec.rb +++ b/spec/features/users/login_spec.rb @@ -105,6 +105,7 @@ RSpec.describe 'Login', :clean_gitlab_redis_sessions do before do stub_application_setting(send_user_confirmation_email: true) allow(User).to receive(:allow_unconfirmed_access_for).and_return grace_period + stub_feature_flags(identity_verification: false) end context 'within the grace period' do @@ -954,6 +955,7 @@ RSpec.describe 'Login', :clean_gitlab_redis_sessions do before do stub_application_setting(send_user_confirmation_email: true) stub_feature_flags(soft_email_confirmation: true) + stub_feature_flags(identity_verification: false) allow(User).to receive(:allow_unconfirmed_access_for).and_return grace_period end diff --git a/spec/features/users/signup_spec.rb b/spec/features/users/signup_spec.rb index 998570da8b2..de53e722603 100644 --- a/spec/features/users/signup_spec.rb +++ b/spec/features/users/signup_spec.rb @@ -203,6 +203,7 @@ RSpec.describe 'Signup' do context 'when soft email confirmation is not enabled' do before do stub_feature_flags(soft_email_confirmation: false) + stub_feature_flags(identity_verification: false) end it 'creates the user account and sends a confirmation email, and pre-fills email address after confirming' do diff --git a/spec/fixtures/packages/debian/distribution/OtherSHA256 b/spec/fixtures/packages/debian/distribution/OtherSHA256 new file mode 100644 index 00000000000..5c282d72c11 --- /dev/null +++ b/spec/fixtures/packages/debian/distribution/OtherSHA256 @@ -0,0 +1 @@ +Other SHA256
\ No newline at end of file diff --git a/spec/frontend/analytics/usage_trends/utils_spec.js b/spec/frontend/analytics/usage_trends/utils_spec.js index 656f310dda7..9982e96735e 100644 --- a/spec/frontend/analytics/usage_trends/utils_spec.js +++ b/spec/frontend/analytics/usage_trends/utils_spec.js @@ -16,17 +16,17 @@ describe('getAverageByMonth', () => { expect(getAverageByMonth(mockCountsData2)).toStrictEqual(countsMonthlyChartData2); }); - it('it transforms a data point to the first of the month', () => { + it('transforms a data point to the first of the month', () => { const item = mockCountsData1[0]; const firstOfTheMonth = item.recordedAt.replace(/-[0-9]{2}$/, '-01'); expect(getAverageByMonth([item])).toStrictEqual([[firstOfTheMonth, item.count]]); }); - it('it uses sane defaults', () => { + it('uses sane defaults', () => { expect(getAverageByMonth()).toStrictEqual([]); }); - it('it errors when passing null', () => { + it('errors when passing null', () => { expect(() => { getAverageByMonth(null); }).toThrow(); diff --git a/spec/frontend/batch_comments/components/preview_dropdown_spec.js b/spec/frontend/batch_comments/components/preview_dropdown_spec.js index 079b64225e4..283632cb560 100644 --- a/spec/frontend/batch_comments/components/preview_dropdown_spec.js +++ b/spec/frontend/batch_comments/components/preview_dropdown_spec.js @@ -53,7 +53,7 @@ describe('Batch comments preview dropdown', () => { }); describe('clicking draft', () => { - it('it toggles active file when viewDiffsFileByFile is true', async () => { + it('toggles active file when viewDiffsFileByFile is true', async () => { factory({ viewDiffsFileByFile: true, sortedDrafts: [{ id: 1, file_hash: 'hash' }], diff --git a/spec/frontend/batch_comments/components/preview_item_spec.js b/spec/frontend/batch_comments/components/preview_item_spec.js index cb71edd1238..91e6b84a216 100644 --- a/spec/frontend/batch_comments/components/preview_item_spec.js +++ b/spec/frontend/batch_comments/components/preview_item_spec.js @@ -118,7 +118,7 @@ describe('Batch comments draft preview item component', () => { ); }); - it('it renders thread resolved text', () => { + it('renders thread resolved text', () => { expect(vm.$el.querySelector('.draft-note-resolution').textContent).toContain( 'Thread will be resolved', ); diff --git a/spec/frontend/batch_comments/components/review_bar_spec.js b/spec/frontend/batch_comments/components/review_bar_spec.js index f50db6ab210..0a4c9ff62e4 100644 --- a/spec/frontend/batch_comments/components/review_bar_spec.js +++ b/spec/frontend/batch_comments/components/review_bar_spec.js @@ -24,7 +24,7 @@ describe('Batch comments review bar component', () => { wrapper.destroy(); }); - it('it adds review-bar-visible class to body when review bar is mounted', async () => { + it('adds review-bar-visible class to body when review bar is mounted', async () => { expect(document.body.classList.contains(REVIEW_BAR_VISIBLE_CLASS_NAME)).toBe(false); createComponent(); @@ -32,7 +32,7 @@ describe('Batch comments review bar component', () => { expect(document.body.classList.contains(REVIEW_BAR_VISIBLE_CLASS_NAME)).toBe(true); }); - it('it removes review-bar-visible class to body when review bar is destroyed', async () => { + it('removes review-bar-visible class to body when review bar is destroyed', async () => { createComponent(); wrapper.destroy(); diff --git a/spec/frontend/batch_comments/components/submit_dropdown_spec.js b/spec/frontend/batch_comments/components/submit_dropdown_spec.js index b28e6d68e40..462ef7e7280 100644 --- a/spec/frontend/batch_comments/components/submit_dropdown_spec.js +++ b/spec/frontend/batch_comments/components/submit_dropdown_spec.js @@ -92,7 +92,7 @@ describe('Batch comments submit dropdown', () => { canApprove | exists | existsText ${true} | ${true} | ${'shows'} ${false} | ${false} | ${'hides'} - `('it $existsText approve checkbox if can_approve is $canApprove', ({ canApprove, exists }) => { + `('$existsText approve checkbox if can_approve is $canApprove', ({ canApprove, exists }) => { factory({ canApprove }); expect(wrapper.findByTestId('approve_merge_request').exists()).toBe(exists); diff --git a/spec/frontend/boards/components/board_new_issue_spec.js b/spec/frontend/boards/components/board_new_issue_spec.js index 8b0100d069a..f097f42476a 100644 --- a/spec/frontend/boards/components/board_new_issue_spec.js +++ b/spec/frontend/boards/components/board_new_issue_spec.js @@ -90,7 +90,7 @@ describe('Issue boards new issue form', () => { }); }); - it('it uses the first issue ID as moveAfterId', async () => { + it('uses the first issue ID as moveAfterId', async () => { findBoardNewItem().vm.$emit('form-submit', { title: 'Foo' }); await nextTick(); diff --git a/spec/frontend/clusters_list/components/clusters_main_view_spec.js b/spec/frontend/clusters_list/components/clusters_main_view_spec.js index 218463b9adf..6f23ed47d2a 100644 --- a/spec/frontend/clusters_list/components/clusters_main_view_spec.js +++ b/spec/frontend/clusters_list/components/clusters_main_view_spec.js @@ -142,7 +142,7 @@ describe('ClustersMainViewComponent', () => { createWrapper({ certificateBasedClustersEnabled: false }); }); - it('it displays only the Agent tab', () => { + it('displays only the Agent tab', () => { expect(findAllTabs()).toHaveLength(1); const agentTab = findGlTabAtIndex(0); diff --git a/spec/frontend/code_navigation/utils/index_spec.js b/spec/frontend/code_navigation/utils/index_spec.js index b8448709f0b..700c912029c 100644 --- a/spec/frontend/code_navigation/utils/index_spec.js +++ b/spec/frontend/code_navigation/utils/index_spec.js @@ -17,7 +17,7 @@ describe('getCurrentHoverElement', () => { value ${'test'} ${undefined} - `('it returns cached current key', ({ value }) => { + `('returns cached current key', ({ value }) => { if (value) { cachedData.set('current', value); } @@ -52,7 +52,7 @@ describe('addInteractionClass', () => { ${1} | ${0} | ${0} ${1} | ${0} | ${0} `( - 'it sets code navigation attributes for line $line and character $char', + 'sets code navigation attributes for line $line and character $char', ({ line, char, index }) => { addInteractionClass({ path: 'index.js', d: { start_line: line, start_char: char } }); diff --git a/spec/frontend/cycle_analytics/value_stream_metrics_spec.js b/spec/frontend/cycle_analytics/value_stream_metrics_spec.js index 23e41f35b00..9c8cd6a3dbc 100644 --- a/spec/frontend/cycle_analytics/value_stream_metrics_spec.js +++ b/spec/frontend/cycle_analytics/value_stream_metrics_spec.js @@ -176,7 +176,7 @@ describe('ValueStreamMetrics', () => { await waitForPromises(); }); - it('it should render an error message', () => { + it('should render an error message', () => { expect(createFlash).toHaveBeenCalledWith({ message: `There was an error while fetching value stream analytics ${fakeReqName} data.`, }); diff --git a/spec/frontend/deprecated_jquery_dropdown_spec.js b/spec/frontend/deprecated_jquery_dropdown_spec.js index b18d53b317d..4a070395eaf 100644 --- a/spec/frontend/deprecated_jquery_dropdown_spec.js +++ b/spec/frontend/deprecated_jquery_dropdown_spec.js @@ -314,7 +314,7 @@ describe('deprecatedJQueryDropdown', () => { }); describe('with a trackSuggestionsClickedLabel', () => { - it('it includes data-track attributes', () => { + it('includes data-track attributes', () => { const dropdown = dropdownWithOptions({ trackSuggestionClickedLabel: 'some_value_for_label', }); @@ -333,7 +333,7 @@ describe('deprecatedJQueryDropdown', () => { expect(link).toHaveAttr('data-track-property', 'suggestion-category'); }); - it('it defaults property to no_category when category not provided', () => { + it('defaults property to no_category when category not provided', () => { const dropdown = dropdownWithOptions({ trackSuggestionClickedLabel: 'some_value_for_label', }); diff --git a/spec/frontend/diffs/components/app_spec.js b/spec/frontend/diffs/components/app_spec.js index 2b1bf19471a..b88206c3b9a 100644 --- a/spec/frontend/diffs/components/app_spec.js +++ b/spec/frontend/diffs/components/app_spec.js @@ -682,7 +682,7 @@ describe('diffs/components/app', () => { ${'123'} | ${2} ${'312'} | ${1} `( - 'it calls navigateToDiffFileIndex with $index when $link is clicked', + 'calls navigateToDiffFileIndex with $index when $link is clicked', async ({ currentDiffFileId, targetFile }) => { createComponent({ fileByFileUserPreference: true }, ({ state }) => { state.diffs.diffFiles.push({ file_hash: '123' }, { file_hash: '312' }); diff --git a/spec/frontend/diffs/components/tree_list_spec.js b/spec/frontend/diffs/components/tree_list_spec.js index 2e37425519d..ca7de8fd751 100644 --- a/spec/frontend/diffs/components/tree_list_spec.js +++ b/spec/frontend/diffs/components/tree_list_spec.js @@ -106,7 +106,7 @@ describe('Diffs tree list component', () => { ${'index.js'} | ${1} ${'app/*.js'} | ${1} ${'*.js, *.rb'} | ${2} - `('it returns $itemSize item for $extension', async ({ extension, itemSize }) => { + `('returns $itemSize item for $extension', async ({ extension, itemSize }) => { wrapper.find('[data-testid="diff-tree-search"]').setValue(extension); await nextTick(); diff --git a/spec/frontend/editor/components/source_editor_toolbar_spec.js b/spec/frontend/editor/components/source_editor_toolbar_spec.js index 6e99eadbd97..bead39ca744 100644 --- a/spec/frontend/editor/components/source_editor_toolbar_spec.js +++ b/spec/frontend/editor/components/source_editor_toolbar_spec.js @@ -68,7 +68,7 @@ describe('Source Editor Toolbar', () => { }); describe('buttons update', () => { - it('it properly updates buttons on Apollo cache update', async () => { + it('properly updates buttons on Apollo cache update', async () => { const item = buildButton('first', { group: EDITOR_TOOLBAR_RIGHT_GROUP, }); diff --git a/spec/frontend/editor/source_editor_instance_spec.js b/spec/frontend/editor/source_editor_instance_spec.js index 3ac77da5729..20ba23d56ff 100644 --- a/spec/frontend/editor/source_editor_instance_spec.js +++ b/spec/frontend/editor/source_editor_instance_spec.js @@ -382,7 +382,7 @@ describe('Source Editor Instance', () => { }, ); - it('it does not remove entry from the global registry to keep for potential future re-use', () => { + it('does not remove entry from the global registry to keep for potential future re-use', () => { const extensionStore = new Map(); seInstance = new SourceEditorInstance({}, extensionStore); const extensions = seInstance.use(fullExtensionsArray); diff --git a/spec/frontend/emoji/components/utils_spec.js b/spec/frontend/emoji/components/utils_spec.js index 56f514ee9a8..a17ddb3bb9a 100644 --- a/spec/frontend/emoji/components/utils_spec.js +++ b/spec/frontend/emoji/components/utils_spec.js @@ -4,13 +4,13 @@ import { getFrequentlyUsedEmojis, addToFrequentlyUsed } from '~/emoji/components jest.mock('~/lib/utils/cookies'); describe('getFrequentlyUsedEmojis', () => { - it('it returns null when no saved emojis set', () => { + it('returns null when no saved emojis set', () => { jest.spyOn(Cookies, 'get').mockReturnValue(null); expect(getFrequentlyUsedEmojis()).toBe(null); }); - it('it returns frequently used emojis object', () => { + it('returns frequently used emojis object', () => { jest.spyOn(Cookies, 'get').mockReturnValue('thumbsup,thumbsdown'); expect(getFrequentlyUsedEmojis()).toEqual({ diff --git a/spec/frontend/environments/environment_table_spec.js b/spec/frontend/environments/environment_table_spec.js index 49a643aaac8..a86cfdd56ba 100644 --- a/spec/frontend/environments/environment_table_spec.js +++ b/spec/frontend/environments/environment_table_spec.js @@ -363,7 +363,7 @@ describe('Environment table', () => { }); describe('sortedEnvironments', () => { - it('it should sort children as well', () => { + it('should sort children as well', () => { const mockItems = [ { name: 'production', diff --git a/spec/frontend/environments/new_environment_spec.js b/spec/frontend/environments/new_environment_spec.js index 5a1c1c7714c..2405cb82eac 100644 --- a/spec/frontend/environments/new_environment_spec.js +++ b/spec/frontend/environments/new_environment_spec.js @@ -65,7 +65,7 @@ describe('~/environments/components/new.vue', () => { input | value ${() => name} | ${'test'} ${() => url} | ${'https://example.org'} - `('it changes the value of the input to $value', async ({ input, value }) => { + `('changes the value of the input to $value', async ({ input, value }) => { await input().setValue(value); expect(input().element.value).toBe(value); diff --git a/spec/frontend/error_tracking/components/error_tracking_list_spec.js b/spec/frontend/error_tracking/components/error_tracking_list_spec.js index b7dffbbec04..805ada54509 100644 --- a/spec/frontend/error_tracking/components/error_tracking_list_spec.js +++ b/spec/frontend/error_tracking/components/error_tracking_list_spec.js @@ -164,19 +164,19 @@ describe('ErrorTrackingList', () => { expect(findSortDropdown().exists()).toBe(true); }); - it('it searches by query', () => { + it('searches by query', () => { findSearchBox().vm.$emit('input', 'search'); findSearchBox().trigger('keyup.enter'); expect(actions.searchByQuery.mock.calls[0][1]).toBe('search'); }); - it('it sorts by fields', () => { + it('sorts by fields', () => { const findSortItem = () => findSortDropdown().find('.dropdown-item'); findSortItem().trigger('click'); expect(actions.sortByField).toHaveBeenCalled(); }); - it('it filters by status', () => { + it('filters by status', () => { const findStatusFilter = () => findStatusFilterDropdown().find('.dropdown-item'); findStatusFilter().trigger('click'); expect(actions.filterByStatus).toHaveBeenCalled(); diff --git a/spec/frontend/filtered_search/droplab/drop_down_spec.js b/spec/frontend/filtered_search/droplab/drop_down_spec.js index f49dbfcf79c..6fbb4394944 100644 --- a/spec/frontend/filtered_search/droplab/drop_down_spec.js +++ b/spec/frontend/filtered_search/droplab/drop_down_spec.js @@ -557,11 +557,11 @@ describe('DropLab DropDown', () => { DropDown.prototype.show.call(testContext.dropdown); }); - it('it should set .list display to block', () => { + it('should set .list display to block', () => { expect(testContext.list.style.display).toBe('block'); }); - it('it should set .hidden to false', () => { + it('should set .hidden to false', () => { expect(testContext.dropdown.hidden).toBe(false); }); @@ -591,11 +591,11 @@ describe('DropLab DropDown', () => { DropDown.prototype.hide.call(testContext.dropdown); }); - it('it should set .list display to none', () => { + it('should set .list display to none', () => { expect(testContext.list.style.display).toBe('none'); }); - it('it should set .hidden to true', () => { + it('should set .hidden to true', () => { expect(testContext.dropdown.hidden).toBe(true); }); }); @@ -648,11 +648,11 @@ describe('DropLab DropDown', () => { DropDown.prototype.destroy.call(testContext.dropdown); }); - it('it should call .hide', () => { + it('should call .hide', () => { expect(testContext.dropdown.hide).toHaveBeenCalled(); }); - it('it should call .removeEventListener', () => { + it('should call .removeEventListener', () => { expect(testContext.list.removeEventListener).toHaveBeenCalledWith( 'click', testContext.eventWrapper.clickEvent, diff --git a/spec/frontend/groups/components/group_item_spec.js b/spec/frontend/groups/components/group_item_spec.js index fcf305d60e6..3aa66644c19 100644 --- a/spec/frontend/groups/components/group_item_spec.js +++ b/spec/frontend/groups/components/group_item_spec.js @@ -274,7 +274,7 @@ describe('GroupItemComponent', () => { ${'itemscope'} | ${'itemscope'} ${'itemtype'} | ${'https://schema.org/Organization'} ${'itemprop'} | ${'subOrganization'} - `('it does set correct $attr', ({ attr, value } = {}) => { + `('does set correct $attr', ({ attr, value } = {}) => { expect(wrapper.attributes(attr)).toBe(value); }); @@ -283,7 +283,7 @@ describe('GroupItemComponent', () => { ${'img'} | ${'logo'} ${'[data-testid="group-name"]'} | ${'name'} ${'[data-testid="group-description"]'} | ${'description'} - `('it does set correct $selector', ({ selector, propValue } = {}) => { + `('does set correct $selector', ({ selector, propValue } = {}) => { expect(wrapper.find(selector).attributes('itemprop')).toBe(propValue); }); }); diff --git a/spec/frontend/issues/create_merge_request_dropdown_spec.js b/spec/frontend/issues/create_merge_request_dropdown_spec.js index cb7173c56a8..cc2ee84348a 100644 --- a/spec/frontend/issues/create_merge_request_dropdown_spec.js +++ b/spec/frontend/issues/create_merge_request_dropdown_spec.js @@ -106,7 +106,7 @@ describe('CreateMergeRequestDropdown', () => { loading | hasClass ${true} | ${false} ${false} | ${true} - `('it toggle loading spinner when loading is $loading', ({ loading, hasClass }) => { + `('toggle loading spinner when loading is $loading', ({ loading, hasClass }) => { dropdown.setLoading(loading); expect(document.querySelector('.js-spinner').classList.contains('gl-display-none')).toEqual( diff --git a/spec/frontend/lib/utils/is_navigating_away_spec.js b/spec/frontend/lib/utils/is_navigating_away_spec.js index e1230fe96bf..b8a01a1706c 100644 --- a/spec/frontend/lib/utils/is_navigating_away_spec.js +++ b/spec/frontend/lib/utils/is_navigating_away_spec.js @@ -6,7 +6,7 @@ describe('isNavigatingAway', () => { setNavigatingForTestsOnly(false); }); - it.each([false, true])('it returns the navigation flag with value %s', (flag) => { + it.each([false, true])('returns the navigation flag with value %s', (flag) => { setNavigatingForTestsOnly(flag); expect(isNavigatingAway()).toEqual(flag); }); diff --git a/spec/frontend/lib/utils/navigation_utility_spec.js b/spec/frontend/lib/utils/navigation_utility_spec.js index 6d3a871eb33..4dbd50223d5 100644 --- a/spec/frontend/lib/utils/navigation_utility_spec.js +++ b/spec/frontend/lib/utils/navigation_utility_spec.js @@ -63,7 +63,7 @@ describe('initPrefetchLinks', () => { expect(newLink.addEventListener).toHaveBeenCalled(); }); - it('it is not fired when less then 100ms over link', () => { + it('is not fired when less then 100ms over link', () => { const mouseOverEvent = new Event('mouseover'); const mouseOutEvent = new Event('mouseout'); diff --git a/spec/frontend/merge_request_tabs_spec.js b/spec/frontend/merge_request_tabs_spec.js index 2001bb5f95e..c6e90a4b20d 100644 --- a/spec/frontend/merge_request_tabs_spec.js +++ b/spec/frontend/merge_request_tabs_spec.js @@ -333,7 +333,7 @@ describe('MergeRequestTabs', () => { ${'show'} | ${false} | ${'shows'} ${'diffs'} | ${true} | ${'hides'} ${'commits'} | ${true} | ${'hides'} - `('it $hidesText expand button on $tab tab', ({ tab, hides }) => { + `('$hidesText expand button on $tab tab', ({ tab, hides }) => { window.gon = { features: { movedMrSidebar: true } }; const expandButton = document.createElement('div'); diff --git a/spec/frontend/monitoring/components/dashboard_panel_spec.js b/spec/frontend/monitoring/components/dashboard_panel_spec.js index d797d9e2ad0..339c1710a9e 100644 --- a/spec/frontend/monitoring/components/dashboard_panel_spec.js +++ b/spec/frontend/monitoring/components/dashboard_panel_spec.js @@ -430,7 +430,7 @@ describe('Dashboard Panel', () => { expect(findTimeChart().props().projectPath).toBe(mockProjectPath); }); - it('it renders a time series chart with no errors', () => { + it('renders a time series chart with no errors', () => { expect(wrapper.findComponent(MonitorTimeSeriesChart).exists()).toBe(true); }); }); diff --git a/spec/frontend/monitoring/components/dashboard_spec.js b/spec/frontend/monitoring/components/dashboard_spec.js index 608404e5c5b..6109b40eee2 100644 --- a/spec/frontend/monitoring/components/dashboard_spec.js +++ b/spec/frontend/monitoring/components/dashboard_spec.js @@ -407,7 +407,7 @@ describe('Dashboard', () => { await nextTick(); }); - it('it does not show loading icons in any group', async () => { + it('does not show loading icons in any group', async () => { setupStoreWithData(store); await nextTick(); @@ -614,7 +614,7 @@ describe('Dashboard', () => { const findFirstDraggableRemoveButton = () => findDraggablePanels().at(0).find('.js-draggable-remove'); - it('it enables draggables', async () => { + it('enables draggables', async () => { findRearrangeButton().vm.$emit('click'); await nextTick(); @@ -656,7 +656,7 @@ describe('Dashboard', () => { expect(findDraggablePanels().length).toEqual(metricsDashboardPanelCount - 1); }); - it('it disables draggables when clicked again', async () => { + it('disables draggables when clicked again', async () => { findRearrangeButton().vm.$emit('click'); await nextTick(); diff --git a/spec/frontend/notes/components/discussion_resolve_with_issue_button_spec.js b/spec/frontend/notes/components/discussion_resolve_with_issue_button_spec.js index 71406eeb7b4..a185f11ffaa 100644 --- a/spec/frontend/notes/components/discussion_resolve_with_issue_button_spec.js +++ b/spec/frontend/notes/components/discussion_resolve_with_issue_button_spec.js @@ -19,7 +19,7 @@ describe('ResolveWithIssueButton', () => { wrapper.destroy(); }); - it('it should have a link with the provided link property as href', () => { + it('should have a link with the provided link property as href', () => { const button = wrapper.findComponent(GlButton); expect(button.attributes().href).toBe(url); diff --git a/spec/frontend/packages_and_registries/package_registry/components/details/nuget_installation_spec.js b/spec/frontend/packages_and_registries/package_registry/components/details/nuget_installation_spec.js index d324d43258c..9449c40c7c6 100644 --- a/spec/frontend/packages_and_registries/package_registry/components/details/nuget_installation_spec.js +++ b/spec/frontend/packages_and_registries/package_registry/components/details/nuget_installation_spec.js @@ -71,7 +71,7 @@ describe('NugetInstallation', () => { }); }); - it('it has docs link', () => { + it('has docs link', () => { expect(findSetupDocsLink().attributes()).toMatchObject({ href: NUGET_HELP_PATH, target: '_blank', diff --git a/spec/frontend/packages_and_registries/package_registry/components/list/tokens/package_type_token_spec.js b/spec/frontend/packages_and_registries/package_registry/components/list/tokens/package_type_token_spec.js index 9268dd0b049..8f3c8667c47 100644 --- a/spec/frontend/packages_and_registries/package_registry/components/list/tokens/package_type_token_spec.js +++ b/spec/frontend/packages_and_registries/package_registry/components/list/tokens/package_type_token_spec.js @@ -24,13 +24,13 @@ describe('packages_filter', () => { wrapper = null; }); - it('it binds all of his attrs to filtered search token', () => { + it('binds all of his attrs to filtered search token', () => { mountComponent({ attrs: { foo: 'bar' } }); expect(findFilteredSearchToken().attributes('foo')).toBe('bar'); }); - it('it binds all of his events to filtered search token', () => { + it('binds all of his events to filtered search token', () => { const clickListener = jest.fn(); mountComponent({ listeners: { click: clickListener } }); diff --git a/spec/frontend/packages_and_registries/package_registry/pages/details_spec.js b/spec/frontend/packages_and_registries/package_registry/pages/details_spec.js index 6078657daf4..83158d1cc5e 100644 --- a/spec/frontend/packages_and_registries/package_registry/pages/details_spec.js +++ b/spec/frontend/packages_and_registries/package_registry/pages/details_spec.js @@ -178,7 +178,7 @@ describe('PackagesApp', () => { ${PACKAGE_TYPE_PYPI} | ${true} ${PACKAGE_TYPE_NPM} | ${false} `( - `It is $visible that the component is visible when the package is $packageType`, + `is $visible that the component is visible when the package is $packageType`, async ({ packageType, visible }) => { createComponent({ resolver: jest.fn().mockResolvedValue( diff --git a/spec/frontend/pipelines/graph/graph_component_wrapper_spec.js b/spec/frontend/pipelines/graph/graph_component_wrapper_spec.js index a2097dda860..587a3c67168 100644 --- a/spec/frontend/pipelines/graph/graph_component_wrapper_spec.js +++ b/spec/frontend/pipelines/graph/graph_component_wrapper_spec.js @@ -554,7 +554,7 @@ describe('Pipeline graph wrapper', () => { mock.restore(); }); - it('it calls reportPerformance with expected arguments', () => { + it('calls reportPerformance with expected arguments', () => { expect(markAndMeasure).toHaveBeenCalled(); expect(reportPerformance).toHaveBeenCalled(); expect(reportPerformance).toHaveBeenCalledWith(metricsPath, metricsData); diff --git a/spec/frontend/pipelines/graph/job_item_spec.js b/spec/frontend/pipelines/graph/job_item_spec.js index 4f0da09fec6..05776ec0706 100644 --- a/spec/frontend/pipelines/graph/job_item_spec.js +++ b/spec/frontend/pipelines/graph/job_item_spec.js @@ -59,7 +59,7 @@ describe('pipeline graph job item', () => { }); }); - it('it should render status and name', () => { + it('should render status and name', () => { expect(wrapper.find('.ci-status-icon-success').exists()).toBe(true); expect(wrapper.find('a').exists()).toBe(false); @@ -72,7 +72,7 @@ describe('pipeline graph job item', () => { }); describe('action icon', () => { - it('it should render the action icon', () => { + it('should render the action icon', () => { createWrapper({ job: mockJob }); const actionComponent = findActionComponent(); @@ -82,7 +82,7 @@ describe('pipeline graph job item', () => { expect(actionComponent.attributes('disabled')).not.toBe('disabled'); }); - it('it should render disabled action icon when user cannot run the action', () => { + it('should render disabled action icon when user cannot run the action', () => { createWrapper({ job: mockJobWithUnauthorizedAction }); const actionComponent = findActionComponent(); diff --git a/spec/frontend/sidebar/components/assignees/assignee_avatar_link_spec.js b/spec/frontend/sidebar/components/assignees/assignee_avatar_link_spec.js index 517b4f12559..8cde70ff8da 100644 --- a/spec/frontend/sidebar/components/assignees/assignee_avatar_link_spec.js +++ b/spec/frontend/sidebar/components/assignees/assignee_avatar_link_spec.js @@ -143,7 +143,7 @@ describe('AssigneeAvatarLink component', () => { issuableType | userId ${'merge_request'} | ${undefined} ${'issue'} | ${'1'} - `('it sets data-user-id as $userId for $issuableType', ({ issuableType, userId }) => { + `('sets data-user-id as $userId for $issuableType', ({ issuableType, userId }) => { createComponent({ issuableType, }); diff --git a/spec/frontend/vue_merge_request_widget/mr_widget_options_spec.js b/spec/frontend/vue_merge_request_widget/mr_widget_options_spec.js index 330f5f6e036..cc894f94f80 100644 --- a/spec/frontend/vue_merge_request_widget/mr_widget_options_spec.js +++ b/spec/frontend/vue_merge_request_widget/mr_widget_options_spec.js @@ -845,7 +845,7 @@ describe('MrWidgetOptions', () => { ${'closed'} | ${false} | ${'hides'} ${'merged'} | ${true} | ${'shows'} ${'open'} | ${true} | ${'shows'} - `('it $showText merge error when state is $state', ({ state, show }) => { + `('$showText merge error when state is $state', ({ state, show }) => { createComponent({ ...mockData, state, merge_error: 'Error!' }); expect(wrapper.find('[data-testid="merge_error"]').exists()).toBe(show); diff --git a/spec/frontend/vue_shared/components/paginated_list_spec.js b/spec/frontend/vue_shared/components/paginated_list_spec.js index 9f819cc4e94..ae9c920ebd2 100644 --- a/spec/frontend/vue_shared/components/paginated_list_spec.js +++ b/spec/frontend/vue_shared/components/paginated_list_spec.js @@ -49,7 +49,7 @@ describe('Pagination links component', () => { }); describe('rendering', () => { - it('it renders the gl-paginated-list', () => { + it('renders the gl-paginated-list', () => { expect(wrapper.find('ul.list-group').exists()).toBe(true); expect(wrapper.findAll('li.list-group-item').length).toBe(2); }); diff --git a/spec/frontend/vue_shared/security_reports/components/manage_via_mr_spec.js b/spec/frontend/vue_shared/security_reports/components/manage_via_mr_spec.js index 39909e26ef0..0a5e46d9263 100644 --- a/spec/frontend/vue_shared/security_reports/components/manage_via_mr_spec.js +++ b/spec/frontend/vue_shared/security_reports/components/manage_via_mr_spec.js @@ -93,7 +93,7 @@ describe('ManageViaMr component', () => { createComponent({ apolloProvider, featureName, featureType, isFeatureConfigured: true }); }); - it('it does not render a button', () => { + it('does not render a button', () => { expect(findButton().exists()).toBe(false); }); }); @@ -104,7 +104,7 @@ describe('ManageViaMr component', () => { createComponent({ apolloProvider, featureName, featureType, isFeatureConfigured: false }); }); - it('it does render a button', () => { + it('does render a button', () => { expect(findButton().exists()).toBe(true); }); diff --git a/spec/graphql/types/branch_protections/merge_access_level_type_spec.rb b/spec/graphql/types/branch_protections/merge_access_level_type_spec.rb index 0c9c8553b6f..8cc1005d97e 100644 --- a/spec/graphql/types/branch_protections/merge_access_level_type_spec.rb +++ b/spec/graphql/types/branch_protections/merge_access_level_type_spec.rb @@ -9,5 +9,5 @@ RSpec.describe GitlabSchema.types['MergeAccessLevel'] do specify { is_expected.to require_graphql_authorizations(:read_protected_branch) } - specify { is_expected.to have_graphql_fields(fields) } + specify { is_expected.to have_graphql_fields(fields).at_least } end diff --git a/spec/graphql/types/branch_protection_type_spec.rb b/spec/graphql/types/branch_rules/branch_protection_type_spec.rb index 40f6a852813..bbc92fd8fef 100644 --- a/spec/graphql/types/branch_protection_type_spec.rb +++ b/spec/graphql/types/branch_rules/branch_protection_type_spec.rb @@ -9,5 +9,5 @@ RSpec.describe GitlabSchema.types['BranchProtection'] do specify { is_expected.to require_graphql_authorizations(:read_protected_branch) } - specify { is_expected.to have_graphql_fields(fields) } + specify { is_expected.to have_graphql_fields(fields).at_least } end diff --git a/spec/lib/gitlab/git/commit_spec.rb b/spec/lib/gitlab/git/commit_spec.rb index 95b49186d0f..d873151421d 100644 --- a/spec/lib/gitlab/git/commit_spec.rb +++ b/spec/lib/gitlab/git/commit_spec.rb @@ -2,8 +2,8 @@ require "spec_helper" -RSpec.describe Gitlab::Git::Commit, :seed_helper do - let(:repository) { Gitlab::Git::Repository.new('default', TEST_REPO_PATH, '', 'group/project') } +RSpec.describe Gitlab::Git::Commit do + let(:repository) { create(:project, :repository).repository.raw } let(:commit) { described_class.find(repository, SeedRepo::Commit::ID) } describe "Commit info from gitaly commit" do @@ -121,14 +121,6 @@ RSpec.describe Gitlab::Git::Commit, :seed_helper do it "returns nil for id containing NULL" do expect(described_class.find(repository, "HE\x00AD")).to be_nil end - - context 'with broken repo' do - let(:repository) { Gitlab::Git::Repository.new('default', TEST_BROKEN_REPO_PATH, '', 'group/project') } - - it 'returns nil' do - expect(described_class.find(repository, SeedRepo::Commit::ID)).to be_nil - end - end end describe '.find with Gitaly enabled' do @@ -154,7 +146,7 @@ RSpec.describe Gitlab::Git::Commit, :seed_helper do describe '#id' do subject { super().id } - it { is_expected.to eq(SeedRepo::LastCommit::ID) } + it { is_expected.to eq(TestEnv::BRANCH_SHA['master']) } end end @@ -223,7 +215,7 @@ RSpec.describe Gitlab::Git::Commit, :seed_helper do expect(subject.size).to eq(10) end - it { is_expected.to include(SeedRepo::EmptyCommit::ID) } + it { is_expected.to include(TestEnv::BRANCH_SHA['master']) } end context 'path is nil' do @@ -242,28 +234,7 @@ RSpec.describe Gitlab::Git::Commit, :seed_helper do expect(subject.size).to eq(10) end - it { is_expected.to include(SeedRepo::EmptyCommit::ID) } - end - - context 'ref is branch name' do - subject do - commits = described_class.where( - repo: repository, - ref: 'master', - path: 'files', - limit: 3, - offset: 1 - ) - - commits.map { |c| c.id } - end - - it 'has 3 elements' do - expect(subject.size).to eq(3) - end - - it { is_expected.to include("d14d6c0abdd253381df51a723d58691b2ee1ab08") } - it { is_expected.not_to include("eb49186cfa5c4338011f5f590fac11bd66c5c631") } + it { is_expected.to include(TestEnv::BRANCH_SHA['master']) } end context 'ref is commit id' do @@ -323,13 +294,12 @@ RSpec.describe Gitlab::Git::Commit, :seed_helper do context 'requesting a commit range' do let(:from) { 'v1.0.0' } - let(:to) { 'v1.2.0' } + let(:to) { 'v1.1.0' } let(:commits_in_range) do %w[ 570e7b2abdd848b95f2f578043fc23bd6f6fd24d 5937ac0a7beb003549fc5fd26fc247adbce4a52e - eb49186cfa5c4338011f5f590fac11bd66c5c631 ] end @@ -338,9 +308,9 @@ RSpec.describe Gitlab::Git::Commit, :seed_helper do end context 'limited' do - let(:limit) { 2 } + let(:limit) { 1 } - it { expect(commit_ids).to eq(commits_in_range.last(2)) } + it { expect(commit_ids).to eq(commits_in_range.last(1)) } end end end @@ -383,16 +353,8 @@ RSpec.describe Gitlab::Git::Commit, :seed_helper do commits.map(&:id) end - it 'has 34 elements' do - expect(subject.size).to eq(34) - end - - it 'includes the expected commits' do - expect(subject).to include( - SeedRepo::Commit::ID, - SeedRepo::Commit::PARENT_ID, - SeedRepo::FirstCommit::ID - ) + it 'has maximum elements' do + expect(subject.size).to eq(50) end end @@ -408,13 +370,13 @@ RSpec.describe Gitlab::Git::Commit, :seed_helper do commits.map(&:id) end - it 'has 24 elements' do - expect(subject.size).to eq(24) + it 'has 36 elements' do + expect(subject.size).to eq(36) end it 'includes the expected commits' do expect(subject).to include(SeedRepo::Commit::ID, SeedRepo::FirstCommit::ID) - expect(subject).not_to include(SeedRepo::LastCommit::ID) + expect(subject).not_to include(TestEnv::BRANCH_SHA['master']) end end end @@ -650,8 +612,8 @@ RSpec.describe Gitlab::Git::Commit, :seed_helper do subject { commit.ref_names(repository) } - it 'has 2 element' do - expect(subject.size).to eq(2) + it 'has 3 elements' do + expect(subject.size).to eq(3) end it { is_expected.to include("master") } @@ -681,6 +643,8 @@ RSpec.describe Gitlab::Git::Commit, :seed_helper do end it 'gets messages in one batch', :request_store do + repository # preload repository so that the project factory does not pollute request counts + expect { subject.map(&:itself) }.to change { Gitlab::GitalyClient.get_request_count }.by(1) end end diff --git a/spec/requests/api/ci/runner/jobs_request_post_spec.rb b/spec/requests/api/ci/runner/jobs_request_post_spec.rb index e5555eea487..b33b97f90d7 100644 --- a/spec/requests/api/ci/runner/jobs_request_post_spec.rb +++ b/spec/requests/api/ci/runner/jobs_request_post_spec.rb @@ -17,11 +17,12 @@ RSpec.describe API::Ci::Runner, :clean_gitlab_redis_shared_state do end describe '/api/v4/jobs' do - let(:group) { create(:group, :nested) } + let_it_be(:group) { create(:group, :nested) } + let_it_be(:user) { create(:user) } + let(:project) { create(:project, namespace: group, shared_runners_enabled: false) } - let(:pipeline) { create(:ci_pipeline, project: project, ref: 'master') } let(:runner) { create(:ci_runner, :project, projects: [project]) } - let(:user) { create(:user) } + let(:pipeline) { create(:ci_pipeline, project: project, ref: 'master') } let(:job) do create(:ci_build, :pending, :queued, :artifacts, :extended_options, pipeline: pipeline, name: 'spinach', stage: 'test', stage_idx: 0) @@ -354,6 +355,9 @@ RSpec.describe API::Ci::Runner, :clean_gitlab_redis_shared_state do end context 'when GIT_DEPTH is not specified and there is no default git depth for the project' do + let(:project) { create(:project, namespace: group, shared_runners_enabled: false) } + let(:runner) { create(:ci_runner, :project, projects: [project]) } + before do project.update!(ci_default_git_depth: nil) end @@ -411,7 +415,8 @@ RSpec.describe API::Ci::Runner, :clean_gitlab_redis_shared_state do context 'when job is made for merge request' do let(:pipeline) { create(:ci_pipeline, source: :merge_request_event, project: project, ref: 'feature', merge_request: merge_request) } let!(:job) { create(:ci_build, :pending, :queued, pipeline: pipeline, name: 'spinach', ref: 'feature', stage: 'test', stage_idx: 0) } - let(:merge_request) { create(:merge_request) } + + let_it_be(:merge_request) { create(:merge_request) } it 'sets branch as ref_type' do request_job @@ -728,7 +733,9 @@ RSpec.describe API::Ci::Runner, :clean_gitlab_redis_shared_state do describe 'timeout support' do context 'when project specifies job timeout' do - let(:project) { create(:project, shared_runners_enabled: false, build_timeout: 1234) } + let_it_be(:project) { create(:project, shared_runners_enabled: false, build_timeout: 1234) } + + let(:runner) { create(:ci_runner, :project, projects: [project]) } it 'contains info about timeout taken from project' do request_job @@ -926,8 +933,8 @@ RSpec.describe API::Ci::Runner, :clean_gitlab_redis_shared_state do end context 'when the runner is of group type' do - let(:group) { create(:group) } - let(:runner) { create(:ci_runner, :group, groups: [group]) } + let_it_be(:group) { create(:group) } + let_it_be(:runner) { create(:ci_runner, :group, groups: [group]) } it_behaves_like 'storing arguments in the application context for the API' do let(:expected_params) { { root_namespace: group.full_path_components.first, client_id: "runner/#{runner.id}" } } diff --git a/spec/requests/api/debian_group_packages_spec.rb b/spec/requests/api/debian_group_packages_spec.rb index 542ae05f996..9dbb75becf8 100644 --- a/spec/requests/api/debian_group_packages_spec.rb +++ b/spec/requests/api/debian_group_packages_spec.rb @@ -36,18 +36,36 @@ RSpec.describe API::DebianGroupPackages do it_behaves_like 'Debian packages read endpoint', 'GET', :success, /Description: This is an incomplete Packages file/ end + describe 'GET groups/:id/-/packages/debian/dists/*distribution/:component/binary-:architecture/by-hash/SHA256/:file_sha256' do + let(:url) { "/groups/#{container.id}/-/packages/debian/dists/#{distribution.codename}/#{component.name}/binary-#{architecture.name}/by-hash/SHA256/#{component_file_older_sha256.file_sha256}" } + + it_behaves_like 'Debian packages read endpoint', 'GET', :success, /^Other SHA256$/ + end + describe 'GET groups/:id/-/packages/debian/dists/*distribution/:component/source/Sources' do let(:url) { "/groups/#{container.id}/-/packages/debian/dists/#{distribution.codename}/#{component.name}/source/Sources" } it_behaves_like 'Debian packages read endpoint', 'GET', :success, /Description: This is an incomplete Sources file/ end + describe 'GET groups/:id/-/packages/debian/dists/*distribution/:component/source/by-hash/SHA256/:file_sha256' do + let(:url) { "/groups/#{container.id}/-/packages/debian/dists/#{distribution.codename}/#{component.name}/source/by-hash/SHA256/#{component_file_sources_older_sha256.file_sha256}" } + + it_behaves_like 'Debian packages read endpoint', 'GET', :success, /^Other SHA256$/ + end + describe 'GET groups/:id/-/packages/debian/dists/*distribution/:component/debian-installer/binary-:architecture/Packages' do let(:url) { "/groups/#{container.id}/-/packages/debian/dists/#{distribution.codename}/#{component.name}/debian-installer/binary-#{architecture.name}/Packages" } it_behaves_like 'Debian packages read endpoint', 'GET', :success, /Description: This is an incomplete D-I Packages file/ end + describe 'GET groups/:id/-/packages/debian/dists/*distribution/:component/debian-installer/binary-:architecture/by-hash/SHA256/:file_sha256' do + let(:url) { "/groups/#{container.id}/-/packages/debian/dists/#{distribution.codename}/#{component.name}/debian-installer/binary-#{architecture.name}/by-hash/SHA256/#{component_file_di_older_sha256.file_sha256}" } + + it_behaves_like 'Debian packages read endpoint', 'GET', :success, /^Other SHA256$/ + end + describe 'GET groups/:id/-/packages/debian/pool/:codename/:project_id/:letter/:package_name/:package_version/:file_name' do using RSpec::Parameterized::TableSyntax diff --git a/spec/requests/api/debian_project_packages_spec.rb b/spec/requests/api/debian_project_packages_spec.rb index f0cd0b6d5ed..6bef669cb3a 100644 --- a/spec/requests/api/debian_project_packages_spec.rb +++ b/spec/requests/api/debian_project_packages_spec.rb @@ -36,18 +36,36 @@ RSpec.describe API::DebianProjectPackages do it_behaves_like 'Debian packages read endpoint', 'GET', :success, /Description: This is an incomplete Packages file/ end + describe 'GET projects/:id/packages/debian/dists/*distribution/:component/binary-:architecture/by-hash/SHA256/:file_sha256' do + let(:url) { "/projects/#{container.id}/packages/debian/dists/#{distribution.codename}/#{component.name}/binary-#{architecture.name}/by-hash/SHA256/#{component_file_older_sha256.file_sha256}" } + + it_behaves_like 'Debian packages read endpoint', 'GET', :success, /^Other SHA256$/ + end + describe 'GET projects/:id/packages/debian/dists/*distribution/source/Sources' do let(:url) { "/projects/#{container.id}/packages/debian/dists/#{distribution.codename}/#{component.name}/source/Sources" } it_behaves_like 'Debian packages read endpoint', 'GET', :success, /Description: This is an incomplete Sources file/ end + describe 'GET projects/:id/packages/debian/dists/*distribution/source/by-hash/SHA256/:file_sha256' do + let(:url) { "/projects/#{container.id}/packages/debian/dists/#{distribution.codename}/#{component.name}/source/by-hash/SHA256/#{component_file_sources_older_sha256.file_sha256}" } + + it_behaves_like 'Debian packages read endpoint', 'GET', :success, /^Other SHA256$/ + end + describe 'GET projects/:id/packages/debian/dists/*distribution/:component/debian-installer/binary-:architecture/Packages' do let(:url) { "/projects/#{container.id}/packages/debian/dists/#{distribution.codename}/#{component.name}/debian-installer/binary-#{architecture.name}/Packages" } it_behaves_like 'Debian packages read endpoint', 'GET', :success, /Description: This is an incomplete D-I Packages file/ end + describe 'GET projects/:id/packages/debian/dists/*distribution/:component/debian-installer/binary-:architecture/by-hash/SHA256/:file_sha256' do + let(:url) { "/projects/#{container.id}/packages/debian/dists/#{distribution.codename}/#{component.name}/debian-installer/binary-#{architecture.name}/by-hash/SHA256/#{component_file_di_older_sha256.file_sha256}" } + + it_behaves_like 'Debian packages read endpoint', 'GET', :success, /^Other SHA256$/ + end + describe 'GET projects/:id/packages/debian/pool/:codename/:letter/:package_name/:package_version/:file_name' do using RSpec::Parameterized::TableSyntax diff --git a/spec/requests/api/rpm_project_packages_spec.rb b/spec/requests/api/rpm_project_packages_spec.rb index 80368ded830..6a646c26fd2 100644 --- a/spec/requests/api/rpm_project_packages_spec.rb +++ b/spec/requests/api/rpm_project_packages_spec.rb @@ -3,6 +3,9 @@ require 'spec_helper' RSpec.describe API::RpmProjectPackages do include HttpBasicAuthHelpers + include WorkhorseHelpers + + include_context 'workhorse headers' using RSpec::Parameterized::TableSyntax @@ -141,8 +144,9 @@ RSpec.describe API::RpmProjectPackages do describe 'POST /api/v4/projects/:project_id/packages/rpm' do let(:url) { "/projects/#{project.id}/packages/rpm" } + let(:file_upload) { fixture_file_upload('spec/fixtures/packages/rpm/hello-0.0.1-1.fc29.x86_64.rpm') } - subject { post api(url), headers: headers } + subject { post api(url), params: { file: file_upload }, headers: headers } context 'with user token' do context 'with valid project' do @@ -179,6 +183,41 @@ RSpec.describe API::RpmProjectPackages do it_behaves_like params[:shared_examples_name], params[:expected_status] end end + + context 'when user can upload file' do + before do + project.add_developer(user) + end + + let(:headers) { basic_auth_header(user.username, personal_access_token.token).merge(workhorse_headers) } + + context 'when file size too large' do + before do + allow_next_instance_of(UploadedFile) do |uploaded_file| + allow(uploaded_file).to receive(:size).and_return(project.actual_limits.rpm_max_file_size + 1) + end + end + + it 'returns an error' do + upload_file(params: { file: file_upload }, request_headers: headers) + + expect(response).to have_gitlab_http_status(:bad_request) + expect(response.body).to match(/File is too large/) + end + end + end + + def upload_file(params: {}, request_headers: headers) + url = "/projects/#{project.id}/packages/rpm" + workhorse_finalize( + api(url), + method: :post, + file_key: :file, + params: params, + headers: request_headers, + send_rewritten_field: true + ) + end end it_behaves_like 'a deploy token for RPM requests' diff --git a/spec/requests/verifies_with_email_spec.rb b/spec/requests/verifies_with_email_spec.rb index 2f249952455..e8d3e94bd0e 100644 --- a/spec/requests/verifies_with_email_spec.rb +++ b/spec/requests/verifies_with_email_spec.rb @@ -18,7 +18,7 @@ RSpec.describe 'VerifiesWithEmail', :clean_gitlab_redis_sessions, :clean_gitlab_ it 'sends an email' do mail = find_email_for(user) expect(mail.to).to match_array([user.email]) - expect(mail.subject).to eq('Verify your identity') + expect(mail.subject).to eq(s_('IdentityVerification|Verify your identity')) end end @@ -50,7 +50,7 @@ RSpec.describe 'VerifiesWithEmail', :clean_gitlab_redis_sessions, :clean_gitlab_ it 'adds a verification error message' do expect(response.body) .to include("You've reached the maximum amount of tries. "\ - 'Wait 10 minutes or resend a new code and try again.') + 'Wait 10 minutes or send a new code and try again.') end end @@ -62,7 +62,8 @@ RSpec.describe 'VerifiesWithEmail', :clean_gitlab_redis_sessions, :clean_gitlab_ it_behaves_like 'prompt for email verification' it 'adds a verification error message' do - expect(response.body).to include(('The code is incorrect. Enter it again, or resend a new code.')) + expect(response.body) + .to include((s_('IdentityVerification|The code is incorrect. Enter it again, or send a new code.'))) end end @@ -75,7 +76,8 @@ RSpec.describe 'VerifiesWithEmail', :clean_gitlab_redis_sessions, :clean_gitlab_ it_behaves_like 'prompt for email verification' it 'adds a verification error message' do - expect(response.body).to include(('The code has expired. Resend a new code and try again.')) + expect(response.body) + .to include((s_('IdentityVerification|The code has expired. Send a new code and try again.'))) end end @@ -112,7 +114,8 @@ RSpec.describe 'VerifiesWithEmail', :clean_gitlab_redis_sessions, :clean_gitlab_ it 'redirects to the login form and shows an alert message' do expect(response).to redirect_to(new_user_session_path) - expect(flash[:alert]).to eq('Maximum login attempts exceeded. Wait 10 minutes and try again.') + expect(flash[:alert]) + .to eq(s_('IdentityVerification|Maximum login attempts exceeded. Wait 10 minutes and try again.')) end end @@ -217,6 +220,7 @@ RSpec.describe 'VerifiesWithEmail', :clean_gitlab_redis_sessions, :clean_gitlab_ describe 'successful_verification' do before do + allow(user).to receive(:role_required?).and_return(true) # It skips the required signup info before_action sign_in(user) end diff --git a/spec/services/packages/rpm/repository_metadata/base_builder_spec.rb b/spec/services/packages/rpm/repository_metadata/base_builder_spec.rb new file mode 100644 index 00000000000..0fb58cc27d5 --- /dev/null +++ b/spec/services/packages/rpm/repository_metadata/base_builder_spec.rb @@ -0,0 +1,22 @@ +# frozen_string_literal: true +require 'spec_helper' + +RSpec.describe Packages::Rpm::RepositoryMetadata::BaseBuilder do + describe '#execute' do + subject { described_class.new.execute } + + before do + stub_const("#{described_class}::ROOT_TAG", 'test') + stub_const("#{described_class}::ROOT_ATTRIBUTES", { foo1: 'bar1', foo2: 'bar2' }) + end + + it 'generate valid xml' do + result = Nokogiri::XML::Document.parse(subject) + + expect(result.children.count).to eq(1) + expect(result.children.first.attributes.count).to eq(2) + expect(result.children.first.attributes['foo1'].value).to eq('bar1') + expect(result.children.first.attributes['foo2'].value).to eq('bar2') + end + end +end diff --git a/spec/services/packages/rpm/repository_metadata/build_filelist_xml_spec.rb b/spec/services/packages/rpm/repository_metadata/build_filelist_xml_spec.rb new file mode 100644 index 00000000000..2feb44c7c1b --- /dev/null +++ b/spec/services/packages/rpm/repository_metadata/build_filelist_xml_spec.rb @@ -0,0 +1,21 @@ +# frozen_string_literal: true +require 'spec_helper' + +RSpec.describe Packages::Rpm::RepositoryMetadata::BuildFilelistXml do + describe '#execute' do + subject { described_class.new.execute } + + context "when generate empty xml" do + let(:expected_xml) do + <<~XML + <?xml version="1.0" encoding="UTF-8"?> + <filelists xmlns="http://linux.duke.edu/metadata/filelists" packages="0"/> + XML + end + + it 'generate expected xml' do + expect(subject).to eq(expected_xml) + end + end + end +end diff --git a/spec/services/packages/rpm/repository_metadata/build_other_xml_spec.rb b/spec/services/packages/rpm/repository_metadata/build_other_xml_spec.rb new file mode 100644 index 00000000000..823aa18808a --- /dev/null +++ b/spec/services/packages/rpm/repository_metadata/build_other_xml_spec.rb @@ -0,0 +1,21 @@ +# frozen_string_literal: true +require 'spec_helper' + +RSpec.describe Packages::Rpm::RepositoryMetadata::BuildOtherXml do + describe '#execute' do + subject { described_class.new.execute } + + context "when generate empty xml" do + let(:expected_xml) do + <<~XML + <?xml version="1.0" encoding="UTF-8"?> + <otherdata xmlns="http://linux.duke.edu/metadata/other" packages="0"/> + XML + end + + it 'generate expected xml' do + expect(subject).to eq(expected_xml) + end + end + end +end diff --git a/spec/services/packages/rpm/repository_metadata/build_primary_xml_spec.rb b/spec/services/packages/rpm/repository_metadata/build_primary_xml_spec.rb new file mode 100644 index 00000000000..f5294d6f7f7 --- /dev/null +++ b/spec/services/packages/rpm/repository_metadata/build_primary_xml_spec.rb @@ -0,0 +1,21 @@ +# frozen_string_literal: true +require 'spec_helper' + +RSpec.describe Packages::Rpm::RepositoryMetadata::BuildPrimaryXml do + describe '#execute' do + subject { described_class.new.execute } + + context "when generate empty xml" do + let(:expected_xml) do + <<~XML + <?xml version="1.0" encoding="UTF-8"?> + <metadata xmlns="http://linux.duke.edu/metadata/common" xmlns:rpm="http://linux.duke.edu/metadata/rpm" packages="0"/> + XML + end + + it 'generate expected xml' do + expect(subject).to eq(expected_xml) + end + end + end +end diff --git a/spec/services/packages/rpm/repository_metadata/build_repomd_xml_spec.rb b/spec/services/packages/rpm/repository_metadata/build_repomd_xml_spec.rb new file mode 100644 index 00000000000..29b0f73e3c1 --- /dev/null +++ b/spec/services/packages/rpm/repository_metadata/build_repomd_xml_spec.rb @@ -0,0 +1,66 @@ +# frozen_string_literal: true +require 'spec_helper' + +RSpec.describe Packages::Rpm::RepositoryMetadata::BuildRepomdXml do + describe '#execute' do + subject { described_class.new(data).execute } + + let(:data) do + { + filelists: { + checksum: { type: "sha256", value: "123" }, + 'open-checksum': { type: "sha256", value: "123" }, + location: { href: "repodata/123-filelists.xml.gz" }, + timestamp: { value: 1644602784 }, + size: { value: 11111 }, + 'open-size': { value: 11111 } + }, + primary: { + checksum: { type: "sha256", value: "234" }, + 'open-checksum': { type: "sha256", value: "234" }, + location: { href: "repodata/234-primary.xml.gz" }, + timestamp: { value: 1644602784 }, + size: { value: 22222 }, + 'open-size': { value: 22222 } + }, + other: { + checksum: { type: "sha256", value: "345" }, + 'open-checksum': { type: "sha256", value: "345" }, + location: { href: "repodata/345-other.xml.gz" }, + timestamp: { value: 1644602784 }, + size: { value: 33333 }, + 'open-size': { value: 33333 } + } + } + end + + let(:creation_timestamp) { 111111 } + + before do + allow(Time).to receive(:now).and_return(creation_timestamp) + end + + it 'generate valid xml' do + # Have one root attribute + result = Nokogiri::XML::Document.parse(subject) + expect(result.children.count).to eq(1) + + # Root attribute name is 'repomd' + root = result.children.first + expect(root.name).to eq('repomd') + + # Have the same count of 'data' tags as count of keys in 'data' + expect(result.css('data').count).to eq(data.count) + end + + it 'has all data info' do + result = Nokogiri::XML::Document.parse(subject).remove_namespaces! + + data.each do |tag_name, tag_attributes| + tag_attributes.each_key do |key| + expect(result.at("//repomd/data[@type=\"#{tag_name}\"]/#{key}")).not_to be_nil + end + end + end + end +end diff --git a/spec/services/users/email_verification/validate_token_service_spec.rb b/spec/services/users/email_verification/validate_token_service_spec.rb index 279f73d6382..44af4a4d36f 100644 --- a/spec/services/users/email_verification/validate_token_service_spec.rb +++ b/spec/services/users/email_verification/validate_token_service_spec.rb @@ -25,7 +25,8 @@ RSpec.describe Users::EmailVerification::ValidateTokenService, :clean_gitlab_red context 'when rate limited' do before do - allow(Gitlab::ApplicationRateLimiter).to receive(:throttled?).and_return(true) + allow(Gitlab::ApplicationRateLimiter).to receive(:throttled?) + .with(:email_verification, scope: encrypted_token).and_return(true) end it 'returns a failure status' do @@ -33,8 +34,8 @@ RSpec.describe Users::EmailVerification::ValidateTokenService, :clean_gitlab_red { status: :failure, reason: :rate_limited, - message: "You've reached the maximum amount of tries. "\ - 'Wait 10 minutes or resend a new code and try again.' + message: format(s_("IdentityVerification|You've reached the maximum amount of tries. "\ + 'Wait %{interval} or send a new code and try again.'), interval: '10 minutes') } ) end @@ -48,7 +49,7 @@ RSpec.describe Users::EmailVerification::ValidateTokenService, :clean_gitlab_red { status: :failure, reason: :expired, - message: 'The code has expired. Resend a new code and try again.' + message: s_('IdentityVerification|The code has expired. Send a new code and try again.') } ) end @@ -62,7 +63,22 @@ RSpec.describe Users::EmailVerification::ValidateTokenService, :clean_gitlab_red { status: :failure, reason: :invalid, - message: 'The code is incorrect. Enter it again, or resend a new code.' + message: s_('IdentityVerification|The code is incorrect. Enter it again, or send a new code.') + } + ) + end + end + + context 'when encrypted token was not set and a blank token is provided' do + let(:encrypted_token) { nil } + let(:token) { '' } + + it 'returns a failure status' do + expect(service.execute).to eq( + { + status: :failure, + reason: :invalid, + message: s_('IdentityVerification|The code is incorrect. Enter it again, or send a new code.') } ) end diff --git a/spec/support/helpers/usage_data_helpers.rb b/spec/support/helpers/usage_data_helpers.rb index d8c9c5b7556..1aea3545ae0 100644 --- a/spec/support/helpers/usage_data_helpers.rb +++ b/spec/support/helpers/usage_data_helpers.rb @@ -6,7 +6,6 @@ module UsageDataHelpers snippet_update snippet_comment merge_request_comment - merge_request_create commit_comment wiki_pages_create wiki_pages_update @@ -15,9 +14,6 @@ module UsageDataHelpers cycle_analytics_views productivity_analytics_views source_code_pushes - design_management_designs_create - design_management_designs_update - design_management_designs_delete ).freeze COUNTS_KEYS = %i( @@ -122,7 +118,6 @@ module UsageDataHelpers uploads web_hooks user_preferences_user_gitpod_enabled - service_usage_data_download_payload_click ).push(*SMAU_KEYS) USAGE_DATA_KEYS = %i( diff --git a/spec/support/seed.rb b/spec/support/seed.rb deleted file mode 100644 index 36cb819763b..00000000000 --- a/spec/support/seed.rb +++ /dev/null @@ -1,9 +0,0 @@ -# frozen_string_literal: true - -RSpec.configure do |config| - config.include SeedHelper, :seed_helper - - config.before(:all, :seed_helper) do - ensure_seeds - end -end diff --git a/spec/support/shared_contexts/requests/api/debian_repository_shared_context.rb b/spec/support/shared_contexts/requests/api/debian_repository_shared_context.rb index e65e51eacc2..cf090c7a185 100644 --- a/spec/support/shared_contexts/requests/api/debian_repository_shared_context.rb +++ b/spec/support/shared_contexts/requests/api/debian_repository_shared_context.rb @@ -18,8 +18,11 @@ RSpec.shared_context 'Debian repository shared context' do |container_type, can_ let_it_be(:private_architecture_all, freeze: true) { create("debian_#{container_type}_architecture", distribution: private_distribution, name: 'all') } let_it_be(:private_architecture, freeze: true) { create("debian_#{container_type}_architecture", distribution: private_distribution, name: 'existing-arch') } let_it_be(:private_component_file) { create("debian_#{container_type}_component_file", component: private_component, architecture: private_architecture) } - let_it_be(:private_component_sources) { create("debian_#{container_type}_component_file", :sources, component: private_component) } + let_it_be(:private_component_file_sources) { create("debian_#{container_type}_component_file", :sources, component: private_component) } let_it_be(:private_component_file_di) { create("debian_#{container_type}_component_file", :di_packages, component: private_component, architecture: private_architecture) } + let_it_be(:private_component_file_older_sha256) { create("debian_#{container_type}_component_file", :older_sha256, component: private_component, architecture: private_architecture) } + let_it_be(:private_component_file_sources_older_sha256) { create("debian_#{container_type}_component_file", :sources, :older_sha256, component: private_component) } + let_it_be(:private_component_file_di_older_sha256) { create("debian_#{container_type}_component_file", :di_packages, :older_sha256, component: private_component, architecture: private_architecture) } let_it_be(:public_distribution, freeze: true) { create("debian_#{container_type}_distribution", :with_file, container: public_container, codename: 'existing-codename') } let_it_be(:public_distribution_key, freeze: true) { create("debian_#{container_type}_distribution_key", distribution: public_distribution) } @@ -29,6 +32,9 @@ RSpec.shared_context 'Debian repository shared context' do |container_type, can_ let_it_be(:public_component_file) { create("debian_#{container_type}_component_file", component: public_component, architecture: public_architecture) } let_it_be(:public_component_file_sources) { create("debian_#{container_type}_component_file", :sources, component: public_component) } let_it_be(:public_component_file_di) { create("debian_#{container_type}_component_file", :di_packages, component: public_component, architecture: public_architecture) } + let_it_be(:public_component_file_older_sha256) { create("debian_#{container_type}_component_file", :older_sha256, component: public_component, architecture: public_architecture) } + let_it_be(:public_component_file_sources_older_sha256) { create("debian_#{container_type}_component_file", :sources, :older_sha256, component: public_component) } + let_it_be(:public_component_file_di_older_sha256) { create("debian_#{container_type}_component_file", :di_packages, :older_sha256, component: public_component, architecture: public_architecture) } if container_type == :group let_it_be(:private_project) { create(:project, :private, group: private_container) } @@ -52,6 +58,9 @@ RSpec.shared_context 'Debian repository shared context' do |container_type, can_ let(:distribution) { { private: private_distribution, public: public_distribution }[visibility_level] } let(:architecture) { { private: private_architecture, public: public_architecture }[visibility_level] } let(:component) { { private: private_component, public: public_component }[visibility_level] } + let(:component_file_older_sha256) { { private: private_component_file_older_sha256, public: public_component_file_older_sha256 }[visibility_level] } + let(:component_file_sources_older_sha256) { { private: private_component_file_sources_older_sha256, public: public_component_file_sources_older_sha256 }[visibility_level] } + let(:component_file_di_older_sha256) { { private: private_component_file_di_older_sha256, public: public_component_file_di_older_sha256 }[visibility_level] } let(:package) { { private: private_package, public: public_package }[visibility_level] } let(:letter) { package.name[0..2] == 'lib' ? package.name[0..3] : package.name[0] } diff --git a/spec/support/shared_examples/services/packages/debian/generate_distribution_shared_examples.rb b/spec/support/shared_examples/services/packages/debian/generate_distribution_shared_examples.rb index 7fd20fc3909..ea79dc674a1 100644 --- a/spec/support/shared_examples/services/packages/debian/generate_distribution_shared_examples.rb +++ b/spec/support/shared_examples/services/packages/debian/generate_distribution_shared_examples.rb @@ -190,6 +190,7 @@ RSpec.shared_examples 'Generate Debian Distribution and component files' do Codename: unstable Date: Sat, 25 Jan 2020 15:17:18 +0000 Valid-Until: Mon, 27 Jan 2020 15:17:18 +0000 + Acquire-By-Hash: yes Architectures: all amd64 arm64 Components: contrib main MD5Sum: @@ -249,6 +250,7 @@ RSpec.shared_examples 'Generate Debian Distribution and component files' do Codename: unstable Date: Sat, 25 Jan 2020 15:17:18 +0000 Valid-Until: Mon, 27 Jan 2020 15:17:18 +0000 + Acquire-By-Hash: yes MD5Sum: SHA256: EOF |