diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2023-10-11 12:11:29 +0300 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2023-10-11 12:11:29 +0300 |
commit | 289ce60cdc5fe83278ff01f9506db862e6f8e9ac (patch) | |
tree | afd09e3f3c66e5583f646b6bf9fd351fd7f363f0 /spec | |
parent | fd92c8afee165b1da0f0d2386fdf4382bf6d7ab2 (diff) |
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'spec')
-rw-r--r-- | spec/features/alert_management/alert_details_spec.rb | 2 | ||||
-rw-r--r-- | spec/features/alert_management/user_updates_alert_status_spec.rb | 2 | ||||
-rw-r--r-- | spec/features/merge_request/user_sees_merge_widget_spec.rb | 2 | ||||
-rw-r--r-- | spec/frontend/fixtures/autocomplete.rb | 20 | ||||
-rw-r--r-- | spec/frontend/fixtures/autocomplete_sources.rb | 18 | ||||
-rw-r--r-- | spec/frontend/fixtures/environments.rb | 34 | ||||
-rw-r--r-- | spec/frontend/fixtures/issues.rb | 34 | ||||
-rw-r--r-- | spec/frontend/fixtures/releases.rb | 130 | ||||
-rw-r--r-- | spec/frontend/fixtures/search.rb | 7 | ||||
-rw-r--r-- | spec/frontend/vue_shared/alert_details/alert_status_spec.js | 25 | ||||
-rw-r--r-- | spec/models/merge_request_spec.rb | 4 | ||||
-rw-r--r-- | spec/services/merge_requests/mergeability/check_not_preparing_service_spec.rb | 39 | ||||
-rw-r--r-- | spec/services/merge_requests/mergeability/detailed_merge_status_service_spec.rb | 8 | ||||
-rw-r--r-- | spec/support/helpers/features/dom_helpers.rb | 4 | ||||
-rw-r--r-- | spec/tasks/gitlab/cleanup_rake_spec.rb | 189 |
15 files changed, 347 insertions, 171 deletions
diff --git a/spec/features/alert_management/alert_details_spec.rb b/spec/features/alert_management/alert_details_spec.rb index b377d3a092b..66b7a9ca46c 100644 --- a/spec/features/alert_management/alert_details_spec.rb +++ b/spec/features/alert_management/alert_details_spec.rb @@ -63,7 +63,7 @@ RSpec.describe 'Alert details', :js, feature_category: :incident_management do expect(alert_status).to have_content('Triggered') find('.gl-button').click - find('.gl-dropdown-item', text: 'Acknowledged').click + find('.gl-new-dropdown-item', text: 'Acknowledged').click wait_for_requests diff --git a/spec/features/alert_management/user_updates_alert_status_spec.rb b/spec/features/alert_management/user_updates_alert_status_spec.rb index 98fd7449c4f..563b5072782 100644 --- a/spec/features/alert_management/user_updates_alert_status_spec.rb +++ b/spec/features/alert_management/user_updates_alert_status_spec.rb @@ -26,7 +26,7 @@ RSpec.describe 'User updates Alert Management status', :js, feature_category: :i it 'updates the alert status' do find('.dropdown-menu-selectable').click - find('.dropdown-item', text: 'Acknowledged').click + find('.gl-new-dropdown-item', text: 'Acknowledged').click wait_for_requests expect(find('.dropdown-menu-selectable')).to have_content('Acknowledged') diff --git a/spec/features/merge_request/user_sees_merge_widget_spec.rb b/spec/features/merge_request/user_sees_merge_widget_spec.rb index 73cd0d699c9..96cad397441 100644 --- a/spec/features/merge_request/user_sees_merge_widget_spec.rb +++ b/spec/features/merge_request/user_sees_merge_widget_spec.rb @@ -335,7 +335,7 @@ RSpec.describe 'Merge request > User sees merge widget', :js, feature_category: # Wait for the `ci_status` and `merge_check` requests wait_for_requests - expect(page).to have_selector('.accept-merge-request') + expect(page).not_to have_selector('.accept-merge-request') end end diff --git a/spec/frontend/fixtures/autocomplete.rb b/spec/frontend/fixtures/autocomplete.rb index 6215fa44e27..0ceacc41cdb 100644 --- a/spec/frontend/fixtures/autocomplete.rb +++ b/spec/frontend/fixtures/autocomplete.rb @@ -22,15 +22,17 @@ RSpec.describe ::AutocompleteController, '(JavaScript fixtures)', type: :control project.add_developer(user) end - get :users, - format: :json, - params: { - project_id: project.id, - active: true, - current_user: true, - author: merge_request.author.id, - merge_request_iid: merge_request.iid - } + get( + :users, + format: :json, + params: { + project_id: project.id, + active: true, + current_user: true, + author: merge_request.author.id, + merge_request_iid: merge_request.iid + } + ) expect(response).to be_successful end diff --git a/spec/frontend/fixtures/autocomplete_sources.rb b/spec/frontend/fixtures/autocomplete_sources.rb index 74bf58cc106..2c28440ab0c 100644 --- a/spec/frontend/fixtures/autocomplete_sources.rb +++ b/spec/frontend/fixtures/autocomplete_sources.rb @@ -26,14 +26,16 @@ RSpec.describe Projects::AutocompleteSourcesController, '(JavaScript fixtures)', create(:label, project: project, title: 'P3') create(:label, project: project, title: 'P4') - get :labels, - format: :json, - params: { - namespace_id: group.path, - project_id: project.path, - type: issue.class.name, - type_id: issue.id - } + get( + :labels, + format: :json, + params: { + namespace_id: group.path, + project_id: project.path, + type: issue.class.name, + type_id: issue.id + } + ) expect(response).to be_successful end diff --git a/spec/frontend/fixtures/environments.rb b/spec/frontend/fixtures/environments.rb index 81f1eb11e3e..8cf0977c5ed 100644 --- a/spec/frontend/fixtures/environments.rb +++ b/spec/frontend/fixtures/environments.rb @@ -27,13 +27,16 @@ RSpec.describe 'Environments (JavaScript fixtures)', feature_category: :environm query = get_graphql_query_as_string(environment_details_query_path) puts project.full_path puts environment.name - post_graphql(query, current_user: admin, - variables: - { - projectFullPath: project.full_path, - environmentName: environment.name, - pageSize: 10 - }) + post_graphql( + query, + current_user: admin, + variables: + { + projectFullPath: project.full_path, + environmentName: environment.name, + pageSize: 10 + } + ) expect_graphql_errors_to_be_empty end end @@ -58,13 +61,16 @@ RSpec.describe 'Environments (JavaScript fixtures)', feature_category: :environm it "graphql/#{environment_details_query_path}.json" do query = get_graphql_query_as_string(environment_details_query_path) - post_graphql(query, current_user: admin, - variables: - { - projectFullPath: project.full_path, - environmentName: environment.name, - pageSize: 10 - }) + post_graphql( + query, + current_user: admin, + variables: + { + projectFullPath: project.full_path, + environmentName: environment.name, + pageSize: 10 + } + ) expect_graphql_errors_to_be_empty end end diff --git a/spec/frontend/fixtures/issues.rb b/spec/frontend/fixtures/issues.rb index 9e6fcea2d17..90aa0544526 100644 --- a/spec/frontend/fixtures/issues.rb +++ b/spec/frontend/fixtures/issues.rb @@ -70,25 +70,29 @@ RSpec.describe API::Issues, '(JavaScript fixtures)', type: :request do issue_title = 'foo' issue_description = 'closed' milestone = create(:milestone, title: '1.0.0', project: project) - issue = create :issue, - author: user, - assignees: [user], - project: project, - milestone: milestone, - created_at: generate(:past_time), - updated_at: 1.hour.ago, - title: issue_title, - description: issue_description + issue = create( + :issue, + author: user, + assignees: [user], + project: project, + milestone: milestone, + created_at: generate(:past_time), + updated_at: 1.hour.ago, + title: issue_title, + description: issue_description + ) project.add_reporter(user) create_referencing_mr(user, project, issue) - create(:merge_request, - :simple, - author: user, - source_project: project, - target_project: project, - description: "Some description") + create( + :merge_request, + :simple, + author: user, + source_project: project, + target_project: project, + description: "Some description" + ) project2 = create(:project, :public, creator_id: user.id, namespace: user.namespace) create_referencing_mr(user, project2, issue).update!(head_pipeline: create(:ci_pipeline)) diff --git a/spec/frontend/fixtures/releases.rb b/spec/frontend/fixtures/releases.rb index c7e3d8fe804..32ebe174800 100644 --- a/spec/frontend/fixtures/releases.rb +++ b/spec/frontend/fixtures/releases.rb @@ -11,23 +11,27 @@ RSpec.describe 'Releases (JavaScript fixtures)' do let_it_be(:user) { create(:user, email: 'user@example.gitlab.com', username: 'user1') } let_it_be(:milestone_12_3) do - create(:milestone, - id: 123, - project: project, - title: '12.3', - description: 'The 12.3 milestone', - start_date: Time.zone.parse('2018-12-10'), - due_date: Time.zone.parse('2019-01-10')) + create( + :milestone, + id: 123, + project: project, + title: '12.3', + description: 'The 12.3 milestone', + start_date: Time.zone.parse('2018-12-10'), + due_date: Time.zone.parse('2019-01-10') + ) end let_it_be(:milestone_12_4) do - create(:milestone, - id: 124, - project: project, - title: '12.4', - description: 'The 12.4 milestone', - start_date: Time.zone.parse('2019-01-10'), - due_date: Time.zone.parse('2019-02-10')) + create( + :milestone, + id: 124, + project: project, + title: '12.4', + description: 'The 12.4 milestone', + start_date: Time.zone.parse('2019-01-10'), + due_date: Time.zone.parse('2019-02-10') + ) end let_it_be(:open_issues_12_3) do @@ -47,68 +51,78 @@ RSpec.describe 'Releases (JavaScript fixtures)' do end let_it_be(:release) do - create(:release, - milestones: [milestone_12_3, milestone_12_4], - project: project, - tag: 'v1.1', - name: 'The first release', - author: user, - description: 'Best. Release. **Ever.** :rocket:', - created_at: Time.zone.parse('2018-12-3'), - released_at: Time.zone.parse('2018-12-10')) + create( + :release, + milestones: [milestone_12_3, milestone_12_4], + project: project, + tag: 'v1.1', + name: 'The first release', + author: user, + description: 'Best. Release. **Ever.** :rocket:', + created_at: Time.zone.parse('2018-12-3'), + released_at: Time.zone.parse('2018-12-10') + ) end let_it_be(:evidence) do - create(:evidence, - release: release, - collected_at: Time.zone.parse('2018-12-03')) + create(:evidence, release: release, collected_at: Time.zone.parse('2018-12-03')) end let_it_be(:other_link) do - create(:release_link, - id: 10, - release: release, - name: 'linux-amd64 binaries', - filepath: '/binaries/linux-amd64', - url: 'https://downloads.example.com/bin/gitlab-linux-amd64') + create( + :release_link, + id: 10, + release: release, + name: 'linux-amd64 binaries', + filepath: '/binaries/linux-amd64', + url: 'https://downloads.example.com/bin/gitlab-linux-amd64' + ) end let_it_be(:runbook_link) do - create(:release_link, - id: 11, - release: release, - name: 'Runbook', - url: "#{release.project.web_url}/runbook", - link_type: :runbook) + create( + :release_link, + id: 11, + release: release, + name: 'Runbook', + url: "#{release.project.web_url}/runbook", + link_type: :runbook + ) end let_it_be(:package_link) do - create(:release_link, - id: 12, - release: release, - name: 'Package', - url: 'https://example.com/package', - link_type: :package) + create( + :release_link, + id: 12, + release: release, + name: 'Package', + url: 'https://example.com/package', + link_type: :package + ) end let_it_be(:image_link) do - create(:release_link, - id: 13, - release: release, - name: 'Image', - url: 'https://example.com/image', - link_type: :image) + create( + :release_link, + id: 13, + release: release, + name: 'Image', + url: 'https://example.com/image', + link_type: :image + ) end let_it_be(:another_release) do - create(:release, - project: project, - tag: 'v1.2', - name: 'The second release', - author: user, - description: 'An okay release :shrug:', - created_at: Time.zone.parse('2019-01-03'), - released_at: Time.zone.parse('2019-01-10')) + create( + :release, + project: project, + tag: 'v1.2', + name: 'The second release', + author: user, + description: 'An okay release :shrug:', + created_at: Time.zone.parse('2019-01-03'), + released_at: Time.zone.parse('2019-01-10') + ) end before do diff --git a/spec/frontend/fixtures/search.rb b/spec/frontend/fixtures/search.rb index b2da383d657..0036fb353a5 100644 --- a/spec/frontend/fixtures/search.rb +++ b/spec/frontend/fixtures/search.rb @@ -58,9 +58,10 @@ RSpec.describe SearchController, '(JavaScript fixtures)', type: :controller do project_id: project.id, startline: 2) ], - total_count: 4, - limit: 4, - offset: 0) + total_count: 4, + limit: 4, + offset: 0 + ) end before do diff --git a/spec/frontend/vue_shared/alert_details/alert_status_spec.js b/spec/frontend/vue_shared/alert_details/alert_status_spec.js index 90d29f0bfd4..478df81a966 100644 --- a/spec/frontend/vue_shared/alert_details/alert_status_spec.js +++ b/spec/frontend/vue_shared/alert_details/alert_status_spec.js @@ -1,7 +1,7 @@ import Vue from 'vue'; import VueApollo from 'vue-apollo'; -import { GlDropdown, GlDropdownItem } from '@gitlab/ui'; -import { shallowMountExtended } from 'helpers/vue_test_utils_helper'; +import { GlCollapsibleListbox, GlListboxItem } from '@gitlab/ui'; +import { mountExtended } from 'helpers/vue_test_utils_helper'; import waitForPromises from 'helpers/wait_for_promises'; import createMockApollo from 'helpers/mock_apollo_helper'; import updateAlertStatusMutation from '~/graphql_shared//mutations/alert_status_update.mutation.graphql'; @@ -34,13 +34,13 @@ describe('AlertManagementStatus', () => { }, }); - const findStatusDropdown = () => wrapper.findComponent(GlDropdown); - const findFirstStatusOption = () => findStatusDropdown().findComponent(GlDropdownItem); - const findAllStatusOptions = () => findStatusDropdown().findAllComponents(GlDropdownItem); - const findStatusDropdownHeader = () => wrapper.findByTestId('dropdown-header'); + const findStatusDropdown = () => wrapper.findComponent(GlCollapsibleListbox); + const findFirstStatusOption = () => findStatusDropdown().findComponent(GlListboxItem); + const findAllStatusOptions = () => findStatusDropdown().findAllComponents(GlListboxItem); + const findStatusDropdownHeader = () => wrapper.findByTestId('listbox-header-text'); const selectFirstStatusOption = () => { - findFirstStatusOption().vm.$emit('click'); + findFirstStatusOption().vm.$emit('select', new Event('click')); return waitForPromises(); }; @@ -57,7 +57,7 @@ describe('AlertManagementStatus', () => { provide = {}, handler = mockUpdatedMutationResult(), } = {}) { - wrapper = shallowMountExtended(AlertManagementStatus, { + wrapper = mountExtended(AlertManagementStatus, { apolloProvider: createMockApolloProvider(handler), propsData: { alert: { ...mockAlert }, @@ -82,7 +82,7 @@ describe('AlertManagementStatus', () => { it('shows the dropdown', () => { mountComponent({ props: { isSidebar: true, isDropdownShowing: true } }); - expect(wrapper.classes()).toContain('show'); + expect(wrapper.classes()).not.toContain('gl-display-none'); }); }); @@ -92,8 +92,7 @@ describe('AlertManagementStatus', () => { }); it('calls `$apollo.mutate` with `updateAlertStatus` mutation and variables containing `iid`, `status`, & `projectPath`', async () => { - findFirstStatusOption().vm.$emit('click'); - await waitForPromises(); + await selectFirstStatusOption(); expect(requestHandler).toHaveBeenCalledWith({ iid, @@ -194,9 +193,7 @@ describe('AlertManagementStatus', () => { handler: mockUpdatedMutationResult({ nodes: mockAlerts }), }); Tracking.event.mockClear(); - findFirstStatusOption().vm.$emit('click'); - - await waitForPromises(); + await selectFirstStatusOption(); const status = findFirstStatusOption().text(); const { category, action, label } = trackAlertStatusUpdateOptions; diff --git a/spec/models/merge_request_spec.rb b/spec/models/merge_request_spec.rb index 630b5dec62e..3b4c2ec7cd6 100644 --- a/spec/models/merge_request_spec.rb +++ b/spec/models/merge_request_spec.rb @@ -3694,7 +3694,7 @@ RSpec.describe MergeRequest, factory_default: :keep, feature_category: :code_rev allow(subject).to receive(:head_pipeline).and_return(nil) end - it { expect(subject.mergeable_ci_state?).to be_truthy } + it { expect(subject.mergeable_ci_state?).to be_falsey } end end @@ -3735,7 +3735,7 @@ RSpec.describe MergeRequest, factory_default: :keep, feature_category: :code_rev allow(subject).to receive(:head_pipeline).and_return(nil) end - it { expect(subject.mergeable_ci_state?).to be_truthy } + it { expect(subject.mergeable_ci_state?).to be_falsey } end end diff --git a/spec/services/merge_requests/mergeability/check_not_preparing_service_spec.rb b/spec/services/merge_requests/mergeability/check_not_preparing_service_spec.rb deleted file mode 100644 index 04db96e95ea..00000000000 --- a/spec/services/merge_requests/mergeability/check_not_preparing_service_spec.rb +++ /dev/null @@ -1,39 +0,0 @@ -# frozen_string_literal: true - -require 'spec_helper' - -RSpec.describe MergeRequests::Mergeability::CheckNotPreparingService, feature_category: :code_review_workflow do - let(:service) { described_class.new(merge_request: merge_request, params: {}) } - let(:merge_request) { build(:merge_request, merge_status: merge_status) } - let(:merge_status_value) { MergeRequest.state_machines[:merge_status].states[merge_status].value } - let(:merge_status) { :unchecked } - - describe '#execute' do - subject(:result) { service.execute } - - it 'is success when not preparing' do - expect(result.status).to eq Gitlab::MergeRequests::Mergeability::CheckResult::SUCCESS_STATUS - end - - context 'when the merge request is preparing' do - let(:merge_status) { :preparing } - - specify :aggregate_failures do - expect(result.status).to eq Gitlab::MergeRequests::Mergeability::CheckResult::FAILED_STATUS - expect(result.payload[:reason]).to eq(:preparing) - end - end - end - - describe '#skip?' do - subject { service.skip? } - - it { is_expected.to eq false } - end - - describe '#cacheable?' do - subject { service.cacheable? } - - it { is_expected.to eq false } - end -end diff --git a/spec/services/merge_requests/mergeability/detailed_merge_status_service_spec.rb b/spec/services/merge_requests/mergeability/detailed_merge_status_service_spec.rb index 632881dc361..66bcb948cb6 100644 --- a/spec/services/merge_requests/mergeability/detailed_merge_status_service_spec.rb +++ b/spec/services/merge_requests/mergeability/detailed_merge_status_service_spec.rb @@ -26,10 +26,10 @@ RSpec.describe ::MergeRequests::Mergeability::DetailedMergeStatusService, featur context 'when merge status is preparing and merge request diff is persisted' do let(:merge_request) { create(:merge_request, merge_status: :preparing) } - it 'returns :preparing' do + it 'returns :checking' do allow(merge_request.merge_request_diff).to receive(:persisted?).and_return(true) - expect(detailed_merge_status).to eq(:preparing) + expect(detailed_merge_status).to eq(:mergeable) end end @@ -69,7 +69,7 @@ RSpec.describe ::MergeRequests::Mergeability::DetailedMergeStatusService, featur end end - context 'when ci check is required' do + context 'when all but the ci check fails' do let(:merge_request) { create(:merge_request) } before do @@ -78,7 +78,7 @@ RSpec.describe ::MergeRequests::Mergeability::DetailedMergeStatusService, featur context 'when pipeline does not exist' do it 'returns the failure reason' do - expect(detailed_merge_status).to eq(:mergeable) + expect(detailed_merge_status).to eq(:ci_must_pass) end end diff --git a/spec/support/helpers/features/dom_helpers.rb b/spec/support/helpers/features/dom_helpers.rb index 258a8c1ada9..cbbb80dde36 100644 --- a/spec/support/helpers/features/dom_helpers.rb +++ b/spec/support/helpers/features/dom_helpers.rb @@ -6,8 +6,8 @@ module Features page.find("[data-testid='#{testid}']", **kwargs) end - def within_testid(testid, &block) - page.within("[data-testid='#{testid}']", &block) + def within_testid(testid, **kwargs, &block) + page.within("[data-testid='#{testid}']", **kwargs, &block) end end end diff --git a/spec/tasks/gitlab/cleanup_rake_spec.rb b/spec/tasks/gitlab/cleanup_rake_spec.rb index bd4d9643433..1d111d266e3 100644 --- a/spec/tasks/gitlab/cleanup_rake_spec.rb +++ b/spec/tasks/gitlab/cleanup_rake_spec.rb @@ -165,6 +165,195 @@ RSpec.describe 'gitlab:cleanup rake tasks', :silence_stdout do end end + shared_examples 'does not remove any branches' do + it 'does not delete any branches' do + expect(project.repository.raw.find_branch(delete_branch_name)).not_to be_nil + expect(project.repository.raw.find_branch(keep_branch_name)).not_to be_nil + expect(project.repository.raw.find_branch('test')).not_to be_nil + + rake_task + + expect(project.repository.raw.find_branch(delete_branch_name)).not_to be_nil + expect(project.repository.raw.find_branch(keep_branch_name)).not_to be_nil + expect(project.repository.raw.find_branch('test')).not_to be_nil + end + end + + describe 'gitlab:cleanup:remove_missed_source_branches' do + subject(:rake_task) { run_rake_task('gitlab:cleanup:remove_missed_source_branches', project.id, user.id, dry_run) } + + let(:project) { create(:project, :repository) } + # Merged merge request with force source branch 1 + # Merged merge request with force source branch 0 + # Non merged merge request with force source branch 1 + # Merged Merge request with delete not in project + # When can not delete source branch + + let!(:mr1) do + project.repository.raw.create_branch(delete_branch_name, "master") + + create(:merge_request, :merged, :remove_source_branch, source_project: project, target_project: project, + source_branch: delete_branch_name, target_branch: 'master') + end + + let!(:mr2) do + project.repository.raw.create_branch(keep_branch_name, "master") + + create(:merge_request, :merged, source_project: project, target_project: project, source_branch: keep_branch_name, + target_branch: 'master') + end + + let!(:mr3) do + create(:merge_request, :remove_source_branch, source_project: project, target_project: project, + source_branch: keep_branch_name, target_branch: 'master') + end + + let!(:mr4) do + create(:merge_request, :merged, :remove_source_branch, source_branch: keep_branch_name, target_branch: 'master') + end + + let!(:mr5) do + create(:merge_request, :merged, :remove_source_branch, source_branch: 'test', source_project: project, + target_project: project, target_branch: 'master') + end + + let!(:protected) do + create(:protected_branch, :create_branch_on_repository, project: project, name: mr5.source_branch) + end + + let(:user) { create(:user, :admin) } + let(:dry_run) { true } + let(:delete_branch_name) { "to-be-deleted-soon" } + let(:delete_me_not) { "delete_me_not" } + let(:keep_branch_name) { "not-to-be-deleted-soon" } + + before do + project.add_owner(user) + stub_env('USER_ID', user.id) + stub_env('PROJECT_ID', project.id) + end + + context 'when dry run is true' do + it_behaves_like 'does not remove any branches' + + context 'and when a valid batch size is given' do + it 'takes into account for the batch size' do + run_rake_task('gitlab:cleanup:remove_missed_source_branches', project.id, user.id, dry_run) + + stub_env('BATCH_SIZE', '1') + count_1 = ActiveRecord::QueryRecorder.new do + run_rake_task('gitlab:cleanup:remove_missed_source_branches', project.id, user.id, dry_run) + end.count + + stub_env('BATCH_SIZE', '2') + count_2 = ActiveRecord::QueryRecorder.new do + run_rake_task('gitlab:cleanup:remove_missed_source_branches', project.id, user.id, dry_run) + end.count + + expect(count_1).to be > count_2 + end + end + end + + context 'when dry run is false' do + let!(:mr6) do + project.repository.raw.create_branch(delete_me_not, "master") + + create(:merge_request, :merged, :remove_source_branch, source_project: project, target_project: project, + source_branch: delete_me_not, target_branch: 'master') + end + + before do + stub_env('DRY_RUN', 'false') + end + + it 'deletes the branches' do + expect(project.repository.raw.find_branch(delete_branch_name)).not_to be_nil + expect(project.repository.raw.find_branch(keep_branch_name)).not_to be_nil + expect(project.repository.raw.find_branch(delete_me_not)).not_to be_nil + expect(project.repository.raw.find_branch('test')).not_to be_nil + + rake_task + + expect(project.repository.raw.find_branch(delete_branch_name)).to be_nil + expect(project.repository.raw.find_branch(delete_me_not)).to be_nil + expect(project.repository.raw.find_branch(keep_branch_name)).not_to be_nil + expect(project.repository.raw.find_branch('test')).not_to be_nil + end + + context 'when a limit is set' do + before do + stub_env('LIMIT_TO_DELETE', 1) + end + + it 'deletes only one branch' do + expect(project.repository.raw.find_branch(delete_branch_name)).not_to be_nil + expect(project.repository.raw.find_branch(keep_branch_name)).not_to be_nil + expect(project.repository.raw.find_branch(delete_me_not)).not_to be_nil + expect(project.repository.raw.find_branch('test')).not_to be_nil + + rake_task + + expect(project.repository.raw.find_branch(delete_branch_name)).to be_nil + expect(project.repository.raw.find_branch(delete_me_not)).not_to be_nil + expect(project.repository.raw.find_branch(keep_branch_name)).not_to be_nil + expect(project.repository.raw.find_branch('test')).not_to be_nil + end + end + + context 'when the branch has a merged and opened mr' do + let!(:mr7) do + project.repository.raw.create_branch(delete_me_not, "master") + + create(:merge_request, :opened, :remove_source_branch, source_project: project, target_project: project, + source_branch: delete_me_not, target_branch: 'master') + end + + it 'does not delete the branch of the merged/open mr' do + expect(project.repository.raw.find_branch(delete_me_not)).not_to be_nil + + rake_task + + expect(project.repository.raw.find_branch(delete_me_not)).not_to be_nil + end + end + + context 'when an valid batch size is given' do + before do + stub_env('BATCH_SIZE', '1') + end + + it 'deletes the branches' do + expect(project.repository.raw.find_branch(delete_branch_name)).not_to be_nil + expect(project.repository.raw.find_branch(keep_branch_name)).not_to be_nil + expect(project.repository.raw.find_branch('test')).not_to be_nil + + rake_task + + expect(project.repository.raw.find_branch(delete_branch_name)).to be_nil + expect(project.repository.raw.find_branch(keep_branch_name)).not_to be_nil + expect(project.repository.raw.find_branch('test')).not_to be_nil + end + end + + context 'when an invalid batch size is given' do + before do + stub_env('BATCH_SIZE', '-1') + end + + it_behaves_like 'does not remove any branches' + end + + context 'when an invalid limit to delete is given' do + before do + stub_env('LIMIT_TO_DELETE', '-1') + end + + it_behaves_like 'does not remove any branches' + end + end + end + context 'sessions' do describe 'gitlab:cleanup:sessions:active_sessions_lookup_keys', :clean_gitlab_redis_sessions do subject(:rake_task) { run_rake_task('gitlab:cleanup:sessions:active_sessions_lookup_keys') } |