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>2020-02-17 12:08:52 +0300
committerGitLab Bot <gitlab-bot@gitlab.com>2020-02-17 12:08:52 +0300
commit53ae6b7e3f83591ad251a3f771f5bf3b8cf087ba (patch)
tree5180b96d6a84f36a515cedfa8e81d72de5ccf4fb /spec
parentcfe63cce6a90a1c70397c1b9f6d90480f25cae0a (diff)
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'spec')
-rw-r--r--spec/factories/projects.rb1
-rw-r--r--spec/features/markdown/mermaid_spec.rb30
-rw-r--r--spec/features/projects/user_uses_shortcuts_spec.rb53
-rw-r--r--spec/lib/gitlab/background_migration/link_lfs_objects_spec.rb66
-rw-r--r--spec/lib/quality/kubernetes_client_spec.rb2
-rw-r--r--spec/migrations/schedule_link_lfs_objects_spec.rb82
-rw-r--r--spec/models/deployment_spec.rb39
-rw-r--r--spec/models/project_ci_cd_setting_spec.rb6
-rw-r--r--spec/services/deployments/older_deployments_drop_service_spec.rb78
9 files changed, 208 insertions, 149 deletions
diff --git a/spec/factories/projects.rb b/spec/factories/projects.rb
index 490ae9e84e7..9be0b308680 100644
--- a/spec/factories/projects.rb
+++ b/spec/factories/projects.rb
@@ -37,6 +37,7 @@ FactoryBot.define do
group_runners_enabled { nil }
import_status { nil }
import_jid { nil }
+ forward_deployment_enabled { nil }
end
after(:create) do |project, evaluator|
diff --git a/spec/features/markdown/mermaid_spec.rb b/spec/features/markdown/mermaid_spec.rb
index 4520d1bb2da..542caccb18d 100644
--- a/spec/features/markdown/mermaid_spec.rb
+++ b/spec/features/markdown/mermaid_spec.rb
@@ -68,4 +68,34 @@ describe 'Mermaid rendering', :js do
expect(page).to have_selector('pre.mermaid')
end
end
+
+ it 'correctly sizes mermaid diagram inside <details> block', :js do
+ description = <<~MERMAID
+ <details>
+ <summary>Click to show diagram</summary>
+
+ ```mermaid
+ graph TD;
+ A-->B;
+ A-->C;
+ B-->D;
+ C-->D;
+ ```
+
+ </details>
+ MERMAID
+
+ project = create(:project, :public)
+ issue = create(:issue, project: project, description: description)
+
+ visit project_issue_path(project, issue)
+
+ page.within('.description') do
+ page.find('summary').click
+ svg = page.find('svg.mermaid')
+
+ expect(svg[:width].to_i).to be_within(5).of(120)
+ expect(svg[:height].to_i).to be_within(5).of(220)
+ end
+ end
end
diff --git a/spec/features/projects/user_uses_shortcuts_spec.rb b/spec/features/projects/user_uses_shortcuts_spec.rb
index c6efe1f1896..beed1c07e51 100644
--- a/spec/features/projects/user_uses_shortcuts_spec.rb
+++ b/spec/features/projects/user_uses_shortcuts_spec.rb
@@ -17,6 +17,59 @@ describe 'User uses shortcuts', :js do
wait_for_requests
end
+ context 'disabling shortcuts' do
+ before do
+ page.evaluate_script("localStorage.removeItem('shortcutsDisabled')")
+ end
+
+ it 'can disable shortcuts from help menu' do
+ open_modal_shortcut_keys
+ click_toggle_button
+ close_modal
+
+ open_modal_shortcut_keys
+
+ # modal-shortcuts still in the DOM, but hidden
+ expect(find('#modal-shortcuts', visible: false)).not_to be_visible
+
+ page.refresh
+ open_modal_shortcut_keys
+
+ # after reload, shortcuts modal doesn't exist at all until we add it
+ expect(page).not_to have_selector('#modal-shortcuts')
+ end
+
+ it 're-enables shortcuts' do
+ open_modal_shortcut_keys
+ click_toggle_button
+ close_modal
+
+ open_modal_from_help_menu
+ click_toggle_button
+ close_modal
+
+ open_modal_shortcut_keys
+ expect(find('#modal-shortcuts')).to be_visible
+ end
+
+ def open_modal_shortcut_keys
+ find('body').native.send_key('?')
+ end
+
+ def open_modal_from_help_menu
+ find('.header-help-dropdown-toggle').click
+ find('button', text: 'Keyboard shortcuts').click
+ end
+
+ def click_toggle_button
+ find('.js-toggle-shortcuts .gl-toggle').click
+ end
+
+ def close_modal
+ find('.modal button[aria-label="Close"]').click
+ end
+ end
+
context 'when navigating to the Project pages' do
it 'redirects to the details page' do
visit project_issues_path(project)
diff --git a/spec/lib/gitlab/background_migration/link_lfs_objects_spec.rb b/spec/lib/gitlab/background_migration/link_lfs_objects_spec.rb
deleted file mode 100644
index 2a33af2c644..00000000000
--- a/spec/lib/gitlab/background_migration/link_lfs_objects_spec.rb
+++ /dev/null
@@ -1,66 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-describe Gitlab::BackgroundMigration::LinkLfsObjects, :migration, schema: 2020_02_10_062432 do
- let(:namespaces) { table(:namespaces) }
- let(:projects) { table(:projects) }
- let(:fork_networks) { table(:fork_networks) }
- let(:fork_network_members) { table(:fork_network_members) }
- let(:lfs_objects) { table(:lfs_objects) }
- let(:lfs_objects_projects) { table(:lfs_objects_projects) }
- let(:namespace) { namespaces.create(name: 'GitLab', path: 'gitlab') }
- let(:source_project) { projects.create(namespace_id: namespace.id) }
- let(:another_source_project) { projects.create(namespace_id: namespace.id) }
- let(:project) { projects.create(namespace_id: namespace.id) }
- let(:another_project) { projects.create(namespace_id: namespace.id) }
- let(:other_project) { projects.create(namespace_id: namespace.id) }
- let(:linked_project) { projects.create(namespace_id: namespace.id) }
- let(:fork_network) { fork_networks.create(root_project_id: source_project.id) }
- let(:another_fork_network) { fork_networks.create(root_project_id: another_source_project.id) }
- let(:lfs_object) { lfs_objects.create(oid: 'abc123', size: 100) }
- let(:another_lfs_object) { lfs_objects.create(oid: 'def456', size: 200) }
-
- before do
- # Create links between projects
- fork_network_members.create(fork_network_id: fork_network.id, project_id: source_project.id, forked_from_project_id: nil)
-
- [project, another_project, linked_project].each do |p|
- fork_network_members.create(
- fork_network_id: fork_network.id,
- project_id: p.id,
- forked_from_project_id: fork_network.root_project_id
- )
- end
-
- fork_network_members.create(fork_network_id: another_fork_network.id, project_id: another_source_project.id, forked_from_project_id: nil)
- fork_network_members.create(fork_network_id: another_fork_network.id, project_id: other_project.id, forked_from_project_id: another_fork_network.root_project_id)
-
- # Links LFS objects to some projects
- [source_project, another_source_project, linked_project].each do |p|
- lfs_objects_projects.create(lfs_object_id: lfs_object.id, project_id: p.id)
- lfs_objects_projects.create(lfs_object_id: another_lfs_object.id, project_id: p.id)
- end
- end
-
- it 'creates LfsObjectsProject records for forks within the specified range of project IDs' do
- expect { subject.perform(project.id, other_project.id) }.to change { lfs_objects_projects.count }.by(6)
-
- expect(lfs_object_ids_for(project)).to match_array(lfs_object_ids_for(source_project))
- expect(lfs_object_ids_for(another_project)).to match_array(lfs_object_ids_for(source_project))
- expect(lfs_object_ids_for(other_project)).to match_array(lfs_object_ids_for(another_source_project))
-
- expect { subject.perform(project.id, other_project.id) }.not_to change { lfs_objects_projects.count }
- end
-
- context 'when it is not necessary to create LfsObjectProject records' do
- it 'does not create LfsObjectProject records' do
- expect { subject.perform(linked_project.id, linked_project.id) }
- .not_to change { lfs_objects_projects.count }
- end
- end
-
- def lfs_object_ids_for(project)
- lfs_objects_projects.where(project_id: project.id).pluck(:lfs_object_id)
- end
-end
diff --git a/spec/lib/quality/kubernetes_client_spec.rb b/spec/lib/quality/kubernetes_client_spec.rb
index 6a62ef456c1..3a362dfccbf 100644
--- a/spec/lib/quality/kubernetes_client_spec.rb
+++ b/spec/lib/quality/kubernetes_client_spec.rb
@@ -102,7 +102,7 @@ RSpec.describe Quality::KubernetesClient do
it 'calls kubectl to retrieve the resource names' do
expect(Gitlab::Popen).to receive(:popen_with_detail)
.with(["kubectl get #{described_class::RESOURCE_LIST} " +
- %(--namespace "#{namespace}" -o custom-columns=NAME:.metadata.name)])
+ %(--namespace "#{namespace}" -o name)])
.and_return(Gitlab::Popen::Result.new([], raw_resource_names_str, '', double(success?: true)))
expect(subject.__send__(:raw_resource_names)).to eq(raw_resource_names)
diff --git a/spec/migrations/schedule_link_lfs_objects_spec.rb b/spec/migrations/schedule_link_lfs_objects_spec.rb
deleted file mode 100644
index 87632bc7648..00000000000
--- a/spec/migrations/schedule_link_lfs_objects_spec.rb
+++ /dev/null
@@ -1,82 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-require Rails.root.join('db', 'post_migrate', '20200210062432_schedule_link_lfs_objects.rb')
-
-describe ScheduleLinkLfsObjects, :migration, :sidekiq do
- let(:namespaces) { table(:namespaces) }
- let(:projects) { table(:projects) }
- let(:fork_networks) { table(:fork_networks) }
- let(:fork_network_members) { table(:fork_network_members) }
- let(:lfs_objects) { table(:lfs_objects) }
- let(:lfs_objects_projects) { table(:lfs_objects_projects) }
- let(:namespace) { namespaces.create(name: 'GitLab', path: 'gitlab') }
- let(:fork_network) { fork_networks.create(root_project_id: source_project.id) }
- let(:another_fork_network) { fork_networks.create(root_project_id: another_source_project.id) }
- let(:source_project) { projects.create(namespace_id: namespace.id) }
- let(:another_source_project) { projects.create(namespace_id: namespace.id) }
- let(:project) { projects.create(namespace_id: namespace.id) }
- let(:another_project) { projects.create(namespace_id: namespace.id) }
- let(:other_project) { projects.create(namespace_id: namespace.id) }
- let(:linked_project) { projects.create(namespace_id: namespace.id) }
- let(:lfs_object) { lfs_objects.create(oid: 'abc123', size: 100) }
- let(:another_lfs_object) { lfs_objects.create(oid: 'def456', size: 200) }
-
- before do
- # Create links between projects
- fork_network_members.create(fork_network_id: fork_network.id, project_id: source_project.id, forked_from_project_id: nil)
-
- [project, another_project, linked_project].each do |p|
- fork_network_members.create(
- fork_network_id: fork_network.id,
- project_id: p.id,
- forked_from_project_id: fork_network.root_project_id
- )
- end
-
- fork_network_members.create(fork_network_id: another_fork_network.id, project_id: another_source_project.id, forked_from_project_id: nil)
- fork_network_members.create(fork_network_id: another_fork_network.id, project_id: other_project.id, forked_from_project_id: another_fork_network.root_project_id)
- end
-
- context 'when there are forks to be backfilled' do
- before do
- stub_const("#{described_class.name}::BATCH_SIZE", 2)
-
- # Links LFS objects to some projects
- [source_project, another_source_project, linked_project].each do |p|
- lfs_objects_projects.create(lfs_object_id: lfs_object.id, project_id: p.id)
- lfs_objects_projects.create(lfs_object_id: another_lfs_object.id, project_id: p.id)
- end
- end
-
- it 'schedules background migration to link LFS objects' do
- Sidekiq::Testing.fake! do
- migrate!
-
- expect(BackgroundMigrationWorker.jobs.size).to eq(2)
- expect(described_class::MIGRATION)
- .to be_scheduled_delayed_migration(2.minutes, project.id, another_project.id)
- expect(described_class::MIGRATION)
- .to be_scheduled_delayed_migration(4.minutes, other_project.id, other_project.id)
- end
- end
- end
-
- context 'when there are no forks to be backfilled' do
- before do
- # Links LFS objects to all projects
- projects.all.each do |p|
- lfs_objects_projects.create(lfs_object_id: lfs_object.id, project_id: p.id)
- lfs_objects_projects.create(lfs_object_id: another_lfs_object.id, project_id: p.id)
- end
- end
-
- it 'does not schedule any job' do
- Sidekiq::Testing.fake! do
- migrate!
-
- expect(BackgroundMigrationWorker.jobs.size).to eq(0)
- end
- end
- end
-end
diff --git a/spec/models/deployment_spec.rb b/spec/models/deployment_spec.rb
index 257f699a459..ab7e12cd43c 100644
--- a/spec/models/deployment_spec.rb
+++ b/spec/models/deployment_spec.rb
@@ -281,6 +281,45 @@ describe Deployment do
expect(last_deployments).to match_array(deployments.last(2))
end
end
+
+ describe 'active' do
+ subject { described_class.active }
+
+ it 'retrieves the active deployments' do
+ deployment1 = create(:deployment, status: :created )
+ deployment2 = create(:deployment, status: :running )
+ create(:deployment, status: :failed )
+ create(:deployment, status: :canceled )
+
+ is_expected.to contain_exactly(deployment1, deployment2)
+ end
+ end
+
+ describe 'older_than' do
+ let(:deployment) { create(:deployment) }
+
+ subject { described_class.older_than(deployment) }
+
+ it 'retrives the correct older deployments' do
+ older_deployment1 = create(:deployment)
+ older_deployment2 = create(:deployment)
+ deployment
+ create(:deployment)
+
+ is_expected.to contain_exactly(older_deployment1, older_deployment2)
+ end
+ end
+
+ describe 'with_deployable' do
+ subject { described_class.with_deployable }
+
+ it 'retrieves deployments with deployable builds' do
+ with_deployable = create(:deployment)
+ create(:deployment, deployable: nil)
+
+ is_expected.to contain_exactly(with_deployable)
+ end
+ end
end
describe '#includes_commit?' do
diff --git a/spec/models/project_ci_cd_setting_spec.rb b/spec/models/project_ci_cd_setting_spec.rb
index eb3a7e527c9..312cbbb0948 100644
--- a/spec/models/project_ci_cd_setting_spec.rb
+++ b/spec/models/project_ci_cd_setting_spec.rb
@@ -32,6 +32,12 @@ describe ProjectCiCdSetting do
end
end
+ describe '#forward_deployment_enabled' do
+ it 'is true by default' do
+ expect(described_class.new.forward_deployment_enabled).to be_truthy
+ end
+ end
+
describe '#default_git_depth' do
let(:default_value) { described_class::DEFAULT_GIT_DEPTH }
diff --git a/spec/services/deployments/older_deployments_drop_service_spec.rb b/spec/services/deployments/older_deployments_drop_service_spec.rb
new file mode 100644
index 00000000000..44e9af07e46
--- /dev/null
+++ b/spec/services/deployments/older_deployments_drop_service_spec.rb
@@ -0,0 +1,78 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+describe Deployments::OlderDeploymentsDropService do
+ let(:environment) { create(:environment) }
+ let(:deployment) { create(:deployment, environment: environment) }
+ let(:service) { described_class.new(deployment) }
+
+ describe '#execute' do
+ subject { service.execute }
+
+ shared_examples 'it does not drop any build' do
+ it do
+ expect { subject }.to not_change(Ci::Build.failed, :count)
+ end
+ end
+
+ context 'when deployment is nil' do
+ let(:deployment) { nil }
+
+ it_behaves_like 'it does not drop any build'
+ end
+
+ context 'when a deployment is passed in' do
+ context 'and there is no active deployment for the related environment' do
+ let(:deployment) { create(:deployment, :canceled, environment: environment) }
+ let(:deployment2) { create(:deployment, :canceled, environment: environment) }
+
+ before do
+ deployment
+ deployment2
+ end
+
+ it_behaves_like 'it does not drop any build'
+ end
+
+ context 'and there are active deployment for the related environment' do
+ let(:deployment) { create(:deployment, :running, environment: environment) }
+ let(:deployment2) { create(:deployment, :running, environment: environment) }
+
+ context 'and there is no older deployment than "deployment"' do
+ before do
+ deployment
+ deployment2
+ end
+
+ it_behaves_like 'it does not drop any build'
+ end
+
+ context 'and there is an older deployment than "deployment"' do
+ let(:older_deployment) { create(:deployment, :running, environment: environment) }
+
+ before do
+ older_deployment
+ deployment
+ deployment2
+ end
+
+ it 'drops that older deployment' do
+ deployable = older_deployment.deployable
+ expect(deployable.failed?).to be_falsey
+
+ subject
+
+ expect(deployable.reload.failed?).to be_truthy
+ end
+
+ context 'and there is no deployable for that older deployment' do
+ let(:older_deployment) { create(:deployment, :running, environment: environment, deployable: nil) }
+
+ it_behaves_like 'it does not drop any build'
+ end
+ end
+ end
+ end
+ end
+end