diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2020-02-17 09:08:52 +0000 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2020-02-17 09:08:52 +0000 |
commit | 53ae6b7e3f83591ad251a3f771f5bf3b8cf087ba (patch) | |
tree | 5180b96d6a84f36a515cedfa8e81d72de5ccf4fb /spec | |
parent | cfe63cce6a90a1c70397c1b9f6d90480f25cae0a (diff) | |
download | gitlab-ce-53ae6b7e3f83591ad251a3f771f5bf3b8cf087ba.tar.gz |
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'spec')
-rw-r--r-- | spec/factories/projects.rb | 1 | ||||
-rw-r--r-- | spec/features/markdown/mermaid_spec.rb | 30 | ||||
-rw-r--r-- | spec/features/projects/user_uses_shortcuts_spec.rb | 53 | ||||
-rw-r--r-- | spec/lib/gitlab/background_migration/link_lfs_objects_spec.rb | 66 | ||||
-rw-r--r-- | spec/lib/quality/kubernetes_client_spec.rb | 2 | ||||
-rw-r--r-- | spec/migrations/schedule_link_lfs_objects_spec.rb | 82 | ||||
-rw-r--r-- | spec/models/deployment_spec.rb | 39 | ||||
-rw-r--r-- | spec/models/project_ci_cd_setting_spec.rb | 6 | ||||
-rw-r--r-- | spec/services/deployments/older_deployments_drop_service_spec.rb | 78 |
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 |