diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2023-06-09 21:09:32 +0300 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2023-06-09 21:09:32 +0300 |
commit | 1268cfeaf73a73c5593f13639530513716826e2b (patch) | |
tree | 2508ffb2fddaa666d99b4e5984d3340eb9194782 /spec/lib | |
parent | be769d5fcced48143e92f83c997b7d5ba14873e1 (diff) |
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'spec/lib')
-rw-r--r-- | spec/lib/backup/repositories_spec.rb | 93 | ||||
-rw-r--r-- | spec/lib/gitlab/slash_commands/incident_management/incident_new_spec.rb | 63 |
2 files changed, 155 insertions, 1 deletions
diff --git a/spec/lib/backup/repositories_spec.rb b/spec/lib/backup/repositories_spec.rb index b11538b93b7..d8794ba68a0 100644 --- a/spec/lib/backup/repositories_spec.rb +++ b/spec/lib/backup/repositories_spec.rb @@ -7,6 +7,7 @@ RSpec.describe Backup::Repositories, feature_category: :backup_restore do let(:strategy) { spy(:strategy) } let(:storages) { [] } let(:paths) { [] } + let(:skip_paths) { [] } let(:destination) { 'repositories' } let(:backup_id) { 'backup_id' } @@ -15,7 +16,8 @@ RSpec.describe Backup::Repositories, feature_category: :backup_restore do progress, strategy: strategy, storages: storages, - paths: paths + paths: paths, + skip_paths: skip_paths ) end @@ -155,6 +157,51 @@ RSpec.describe Backup::Repositories, feature_category: :backup_restore do end end end + + describe 'skip_paths' do + let_it_be(:project) { create(:project, :repository) } + let_it_be(:excluded_project) { create(:project, :repository) } + + context 'project path' do + let(:skip_paths) { [excluded_project.full_path] } + + it 'calls enqueue for all repositories on the specified project', :aggregate_failures do + excluded_project_snippet = create(:project_snippet, :repository, project: excluded_project) + included_personal_snippet = create(:personal_snippet, :repository, author: excluded_project.first_owner) + + subject.dump(destination, backup_id) + + expect(strategy).to have_received(:start).with(:create, destination, backup_id: backup_id) + expect(strategy).not_to have_received(:enqueue).with(excluded_project, Gitlab::GlRepository::PROJECT) + expect(strategy).not_to have_received(:enqueue).with(excluded_project_snippet, Gitlab::GlRepository::SNIPPET) + expect(strategy).to have_received(:enqueue).with(included_personal_snippet, Gitlab::GlRepository::SNIPPET) + expect(strategy).to have_received(:enqueue).with(project, Gitlab::GlRepository::PROJECT) + expect(strategy).to have_received(:enqueue).with(project, Gitlab::GlRepository::WIKI) + expect(strategy).to have_received(:enqueue).with(project, Gitlab::GlRepository::DESIGN) + expect(strategy).to have_received(:finish!) + end + end + + context 'group path' do + let(:skip_paths) { [excluded_project.namespace.full_path] } + + it 'calls enqueue for all repositories on all descendant projects', :aggregate_failures do + excluded_project_snippet = create(:project_snippet, :repository, project: excluded_project) + included_personal_snippet = create(:personal_snippet, :repository, author: excluded_project.first_owner) + + subject.dump(destination, backup_id) + + expect(strategy).to have_received(:start).with(:create, destination, backup_id: backup_id) + expect(strategy).not_to have_received(:enqueue).with(excluded_project, Gitlab::GlRepository::PROJECT) + expect(strategy).not_to have_received(:enqueue).with(excluded_project_snippet, Gitlab::GlRepository::SNIPPET) + expect(strategy).to have_received(:enqueue).with(included_personal_snippet, Gitlab::GlRepository::SNIPPET) + expect(strategy).to have_received(:enqueue).with(project, Gitlab::GlRepository::PROJECT) + expect(strategy).to have_received(:enqueue).with(project, Gitlab::GlRepository::WIKI) + expect(strategy).to have_received(:enqueue).with(project, Gitlab::GlRepository::DESIGN) + expect(strategy).to have_received(:finish!) + end + end + end end describe '#restore' do @@ -301,5 +348,49 @@ RSpec.describe Backup::Repositories, feature_category: :backup_restore do end end end + + context 'skip_paths' do + let_it_be(:excluded_project) { create(:project, :repository) } + + context 'project path' do + let(:skip_paths) { [excluded_project.full_path] } + + it 'calls enqueue for all repositories on the specified project', :aggregate_failures do + excluded_project_snippet = create(:project_snippet, :repository, project: excluded_project) + included_personal_snippet = create(:personal_snippet, :repository, author: excluded_project.first_owner) + + subject.restore(destination) + + expect(strategy).to have_received(:start).with(:restore, destination, remove_all_repositories: %w[default]) + expect(strategy).not_to have_received(:enqueue).with(excluded_project, Gitlab::GlRepository::PROJECT) + expect(strategy).not_to have_received(:enqueue).with(excluded_project_snippet, Gitlab::GlRepository::SNIPPET) + expect(strategy).to have_received(:enqueue).with(included_personal_snippet, Gitlab::GlRepository::SNIPPET) + expect(strategy).to have_received(:enqueue).with(project, Gitlab::GlRepository::PROJECT) + expect(strategy).to have_received(:enqueue).with(project, Gitlab::GlRepository::WIKI) + expect(strategy).to have_received(:enqueue).with(project, Gitlab::GlRepository::DESIGN) + expect(strategy).to have_received(:finish!) + end + end + + context 'group path' do + let(:skip_paths) { [excluded_project.namespace.full_path] } + + it 'calls enqueue for all repositories on all descendant projects', :aggregate_failures do + excluded_project_snippet = create(:project_snippet, :repository, project: excluded_project) + included_personal_snippet = create(:personal_snippet, :repository, author: excluded_project.first_owner) + + subject.restore(destination) + + expect(strategy).to have_received(:start).with(:restore, destination, remove_all_repositories: %w[default]) + expect(strategy).not_to have_received(:enqueue).with(excluded_project, Gitlab::GlRepository::PROJECT) + expect(strategy).not_to have_received(:enqueue).with(excluded_project_snippet, Gitlab::GlRepository::SNIPPET) + expect(strategy).to have_received(:enqueue).with(included_personal_snippet, Gitlab::GlRepository::SNIPPET) + expect(strategy).to have_received(:enqueue).with(project, Gitlab::GlRepository::PROJECT) + expect(strategy).to have_received(:enqueue).with(project, Gitlab::GlRepository::WIKI) + expect(strategy).to have_received(:enqueue).with(project, Gitlab::GlRepository::DESIGN) + expect(strategy).to have_received(:finish!) + end + end + end end end diff --git a/spec/lib/gitlab/slash_commands/incident_management/incident_new_spec.rb b/spec/lib/gitlab/slash_commands/incident_management/incident_new_spec.rb new file mode 100644 index 00000000000..9f891ceacbf --- /dev/null +++ b/spec/lib/gitlab/slash_commands/incident_management/incident_new_spec.rb @@ -0,0 +1,63 @@ +# frozen_string_literal: true + +require 'spec_helper' + +RSpec.describe Gitlab::SlashCommands::IncidentManagement::IncidentNew, feature_category: :incident_management do + let_it_be(:project) { create(:project) } + let_it_be(:user) { create(:user) } + let_it_be(:chat_name) { create(:chat_name, user: user) } + let_it_be(:regex_match) { described_class.match('incident declare') } + + subject do + described_class.new(project, chat_name) + end + + describe '#execute' do + before do + allow_next_instance_of( + Integrations::SlackInteractions::IncidentManagement::IncidentModalOpenedService + ) do |modal_service| + allow(modal_service).to receive(:execute).and_return( + ServiceResponse.success(message: 'Please fill the incident creation form.') + ) + end + end + + context 'when invoked' do + it 'sends ephemeral response' do + response = subject.execute(regex_match) + + expect(response[:response_type]).to be(:ephemeral) + expect(response[:text]).to eq('Please fill the incident creation form.') + end + end + end + + describe '#allowed?' do + it 'returns true' do + expect(described_class).to be_allowed(project, user) + end + + context 'when feature flag is disabled' do + before do + stub_feature_flags(incident_declare_slash_command: false) + end + + it 'returns false in allowed?' do + expect(described_class).not_to be_allowed(project, user) + end + end + end + + describe '#collection' do + context 'when collection method id called' do + it 'calls IssuesFinder' do + expect_next_instance_of(IssuesFinder) do |finder| + expect(finder).to receive(:execute) + end + + subject.collection + end + end + end +end |