Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/spec
diff options
context:
space:
mode:
authorGitLab Bot <gitlab-bot@gitlab.com>2023-10-11 12:11:29 +0300
committerGitLab Bot <gitlab-bot@gitlab.com>2023-10-11 12:11:29 +0300
commit289ce60cdc5fe83278ff01f9506db862e6f8e9ac (patch)
treeafd09e3f3c66e5583f646b6bf9fd351fd7f363f0 /spec
parentfd92c8afee165b1da0f0d2386fdf4382bf6d7ab2 (diff)
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'spec')
-rw-r--r--spec/features/alert_management/alert_details_spec.rb2
-rw-r--r--spec/features/alert_management/user_updates_alert_status_spec.rb2
-rw-r--r--spec/features/merge_request/user_sees_merge_widget_spec.rb2
-rw-r--r--spec/frontend/fixtures/autocomplete.rb20
-rw-r--r--spec/frontend/fixtures/autocomplete_sources.rb18
-rw-r--r--spec/frontend/fixtures/environments.rb34
-rw-r--r--spec/frontend/fixtures/issues.rb34
-rw-r--r--spec/frontend/fixtures/releases.rb130
-rw-r--r--spec/frontend/fixtures/search.rb7
-rw-r--r--spec/frontend/vue_shared/alert_details/alert_status_spec.js25
-rw-r--r--spec/models/merge_request_spec.rb4
-rw-r--r--spec/services/merge_requests/mergeability/check_not_preparing_service_spec.rb39
-rw-r--r--spec/services/merge_requests/mergeability/detailed_merge_status_service_spec.rb8
-rw-r--r--spec/support/helpers/features/dom_helpers.rb4
-rw-r--r--spec/tasks/gitlab/cleanup_rake_spec.rb189
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') }