summaryrefslogtreecommitdiff
path: root/spec
diff options
context:
space:
mode:
authorGitLab Bot <gitlab-bot@gitlab.com>2020-02-21 21:08:57 +0000
committerGitLab Bot <gitlab-bot@gitlab.com>2020-02-21 21:08:57 +0000
commita6c2be7cd20a9515b347e72d63c5b47bb9b79457 (patch)
tree568212b4debeb2a35bb1133209b98e1468d9ee85 /spec
parent74a2d57b337034cfdcd719615e4da06643b69114 (diff)
downloadgitlab-ce-a6c2be7cd20a9515b347e72d63c5b47bb9b79457.tar.gz
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'spec')
-rw-r--r--spec/features/projects/releases/user_views_edit_release_spec.rb72
-rw-r--r--spec/graphql/mutations/issues/update_spec.rb53
-rw-r--r--spec/lib/gitlab/file_type_detection_spec.rb29
-rw-r--r--spec/lib/gitlab/import_export/all_models.yml2
-rw-r--r--spec/lib/gitlab/import_export/base_relation_factory_spec.rb2
-rw-r--r--spec/lib/gitlab/import_export/project_relation_factory_spec.rb2
-rw-r--r--spec/lib/gitlab/import_export/safe_model_attributes.yml2
-rw-r--r--spec/migrations/create_environment_for_self_monitoring_project_spec.rb68
-rw-r--r--spec/models/lfs_object_spec.rb9
-rw-r--r--spec/services/projects/lfs_pointers/lfs_link_service_spec.rb4
-rw-r--r--spec/services/projects/update_pages_service_spec.rb3
-rw-r--r--spec/support/shared_examples/tasks/gitlab/uploads/migration_shared_examples.rb31
-rw-r--r--spec/support/shared_examples/uploaders/workers/object_storage/migrate_uploads_shared_examples.rb120
-rw-r--r--spec/tasks/gitlab/uploads/migrate_rake_spec.rb42
-rw-r--r--spec/uploaders/workers/object_storage/migrate_uploads_worker_spec.rb109
-rw-r--r--spec/views/admin/application_settings/integrations.html.haml_spec.rb1
16 files changed, 400 insertions, 149 deletions
diff --git a/spec/features/projects/releases/user_views_edit_release_spec.rb b/spec/features/projects/releases/user_views_edit_release_spec.rb
new file mode 100644
index 00000000000..d4c88065b90
--- /dev/null
+++ b/spec/features/projects/releases/user_views_edit_release_spec.rb
@@ -0,0 +1,72 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+describe 'User edits Release', :js do
+ let_it_be(:project) { create(:project, :repository) }
+ let_it_be(:release) { create(:release, project: project, name: 'The first release' ) }
+ let_it_be(:user) { create(:user) }
+
+ before do
+ project.add_developer(user)
+
+ gitlab_sign_in(user)
+
+ visit edit_project_release_path(project, release)
+ end
+
+ def fill_out_form_and_click(button_to_click)
+ fill_in 'Release title', with: 'Updated Release title'
+ fill_in 'Release notes', with: 'Updated Release notes'
+
+ click_button button_to_click
+
+ wait_for_requests
+ end
+
+ it 'renders the breadcrumbs' do
+ within('.breadcrumbs') do
+ expect(page).to have_content("#{project.creator.name} #{project.name} Edit Release")
+
+ expect(page).to have_link(project.creator.name, href: user_path(project.creator))
+ expect(page).to have_link(project.name, href: project_path(project))
+ expect(page).to have_link('Edit Release', href: edit_project_release_path(project, release))
+ end
+ end
+
+ it 'renders the edit Release form' do
+ expect(page).to have_content('Releases are based on Git tags. We recommend naming tags that fit within semantic versioning, for example v1.0, v2.0-pre.')
+
+ expect(find_field('Tag name', { disabled: true }).value).to eq(release.tag)
+ expect(find_field('Release title').value).to eq(release.name)
+ expect(find_field('Release notes').value).to eq(release.description)
+
+ expect(page).to have_button('Save changes')
+ expect(page).to have_button('Cancel')
+ end
+
+ it 'redirects to the main Releases page without updating the Release when "Cancel" is clicked' do
+ original_name = release.name
+ original_description = release.description
+
+ fill_out_form_and_click 'Cancel'
+
+ expect(current_path).to eq(project_releases_path(project))
+
+ release.reload
+
+ expect(release.name).to eq(original_name)
+ expect(release.description).to eq(original_description)
+ end
+
+ it 'updates the Release and redirects to the main Releases page when "Save changes" is clicked' do
+ fill_out_form_and_click 'Save changes'
+
+ expect(current_path).to eq(project_releases_path(project))
+
+ release.reload
+
+ expect(release.name).to eq('Updated Release title')
+ expect(release.description).to eq('Updated Release notes')
+ end
+end
diff --git a/spec/graphql/mutations/issues/update_spec.rb b/spec/graphql/mutations/issues/update_spec.rb
new file mode 100644
index 00000000000..3d671680ccf
--- /dev/null
+++ b/spec/graphql/mutations/issues/update_spec.rb
@@ -0,0 +1,53 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+describe Mutations::Issues::Update do
+ let(:issue) { create(:issue) }
+ let(:user) { create(:user) }
+ let(:expected_attributes) do
+ {
+ title: 'new title',
+ description: 'new description',
+ confidential: true,
+ due_date: Date.tomorrow
+ }
+ end
+ let(:mutation) { described_class.new(object: nil, context: { current_user: user }) }
+ let(:mutated_issue) { subject[:issue] }
+
+ describe '#resolve' do
+ let(:mutation_params) do
+ {
+ project_path: issue.project.full_path,
+ iid: issue.iid
+ }.merge(expected_attributes)
+ end
+
+ subject { mutation.resolve(mutation_params) }
+
+ it 'raises an error if the resource is not accessible to the user' do
+ expect { subject }.to raise_error(Gitlab::Graphql::Errors::ResourceNotAvailable)
+ end
+
+ context 'when the user can update the issue' do
+ before do
+ issue.project.add_developer(user)
+ end
+
+ it 'updates issue with correct values' do
+ subject
+
+ expect(issue.reload).to have_attributes(expected_attributes)
+ end
+
+ context 'when iid does not exist' do
+ it 'raises resource not available error' do
+ mutation_params[:iid] = 99999
+
+ expect { subject }.to raise_error(Gitlab::Graphql::Errors::ResourceNotAvailable)
+ end
+ end
+ end
+ end
+end
diff --git a/spec/lib/gitlab/file_type_detection_spec.rb b/spec/lib/gitlab/file_type_detection_spec.rb
index 05008bf895c..2f1fc57c559 100644
--- a/spec/lib/gitlab/file_type_detection_spec.rb
+++ b/spec/lib/gitlab/file_type_detection_spec.rb
@@ -2,6 +2,35 @@
require 'spec_helper'
describe Gitlab::FileTypeDetection do
+ describe '.extension_match?' do
+ let(:extensions) { %w[foo bar] }
+
+ it 'returns false when filename is blank' do
+ expect(described_class.extension_match?(nil, extensions)).to eq(false)
+ expect(described_class.extension_match?('', extensions)).to eq(false)
+ end
+
+ it 'returns true when filename matches extensions' do
+ expect(described_class.extension_match?('file.foo', extensions)).to eq(true)
+ expect(described_class.extension_match?('file.bar', extensions)).to eq(true)
+ end
+
+ it 'returns false when filename does not match extensions' do
+ expect(described_class.extension_match?('file.baz', extensions)).to eq(false)
+ end
+
+ it 'can match case insensitive filenames' do
+ expect(described_class.extension_match?('file.FOO', extensions)).to eq(true)
+ end
+
+ it 'can match filenames with periods' do
+ expect(described_class.extension_match?('my.file.foo', extensions)).to eq(true)
+ end
+
+ it 'can match filenames with directories' do
+ expect(described_class.extension_match?('my/file.foo', extensions)).to eq(true)
+ end
+ end
context 'when class is an uploader' do
let(:uploader) do
example_uploader = Class.new(CarrierWave::Uploader::Base) do
diff --git a/spec/lib/gitlab/import_export/all_models.yml b/spec/lib/gitlab/import_export/all_models.yml
index 6c9a4bbfc71..db45b9c42fd 100644
--- a/spec/lib/gitlab/import_export/all_models.yml
+++ b/spec/lib/gitlab/import_export/all_models.yml
@@ -567,6 +567,8 @@ designs: *design
actions:
- design
- version
+- uploads
+- file_uploads
versions: &version
- author
- issue
diff --git a/spec/lib/gitlab/import_export/base_relation_factory_spec.rb b/spec/lib/gitlab/import_export/base_relation_factory_spec.rb
index def3e43de9b..e02d8f3d2e6 100644
--- a/spec/lib/gitlab/import_export/base_relation_factory_spec.rb
+++ b/spec/lib/gitlab/import_export/base_relation_factory_spec.rb
@@ -7,7 +7,6 @@ describe Gitlab::ImportExport::BaseRelationFactory do
let(:project) { create(:project) }
let(:members_mapper) { double('members_mapper').as_null_object }
let(:relation_sym) { :project_snippets }
- let(:merge_requests_mapping) { {} }
let(:relation_hash) { {} }
let(:excluded_keys) { [] }
@@ -16,7 +15,6 @@ describe Gitlab::ImportExport::BaseRelationFactory do
relation_hash: relation_hash,
object_builder: Gitlab::ImportExport::GroupProjectObjectBuilder,
members_mapper: members_mapper,
- merge_requests_mapping: merge_requests_mapping,
user: user,
importable: project,
excluded_keys: excluded_keys)
diff --git a/spec/lib/gitlab/import_export/project_relation_factory_spec.rb b/spec/lib/gitlab/import_export/project_relation_factory_spec.rb
index 0ade7ac4fc7..d0e89b2e57b 100644
--- a/spec/lib/gitlab/import_export/project_relation_factory_spec.rb
+++ b/spec/lib/gitlab/import_export/project_relation_factory_spec.rb
@@ -6,7 +6,6 @@ describe Gitlab::ImportExport::ProjectRelationFactory do
let(:group) { create(:group) }
let(:project) { create(:project, :repository, group: group) }
let(:members_mapper) { double('members_mapper').as_null_object }
- let(:merge_requests_mapping) { {} }
let(:user) { create(:admin) }
let(:excluded_keys) { [] }
let(:created_object) do
@@ -14,7 +13,6 @@ describe Gitlab::ImportExport::ProjectRelationFactory do
relation_hash: relation_hash,
object_builder: Gitlab::ImportExport::GroupProjectObjectBuilder,
members_mapper: members_mapper,
- merge_requests_mapping: merge_requests_mapping,
user: user,
importable: project,
excluded_keys: excluded_keys)
diff --git a/spec/lib/gitlab/import_export/safe_model_attributes.yml b/spec/lib/gitlab/import_export/safe_model_attributes.yml
index 807b017a67c..365b23e04e9 100644
--- a/spec/lib/gitlab/import_export/safe_model_attributes.yml
+++ b/spec/lib/gitlab/import_export/safe_model_attributes.yml
@@ -769,7 +769,9 @@ DesignManagement::Design:
- project_id
- filename
DesignManagement::Action:
+- id
- event
+- image_v432x230
DesignManagement::Version:
- id
- created_at
diff --git a/spec/migrations/create_environment_for_self_monitoring_project_spec.rb b/spec/migrations/create_environment_for_self_monitoring_project_spec.rb
new file mode 100644
index 00000000000..ba1081c5006
--- /dev/null
+++ b/spec/migrations/create_environment_for_self_monitoring_project_spec.rb
@@ -0,0 +1,68 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+require Rails.root.join('db', 'post_migrate', '20200214214934_create_environment_for_self_monitoring_project')
+
+describe CreateEnvironmentForSelfMonitoringProject, :migration do
+ let(:application_settings_table) { table(:application_settings) }
+
+ let(:environments) { table(:environments) }
+
+ let(:instance_administrators_group) do
+ table(:namespaces).create!(
+ id: 1,
+ name: 'GitLab Instance Administrators',
+ path: 'gitlab-instance-administrators-random',
+ type: 'Group'
+ )
+ end
+
+ let(:self_monitoring_project) do
+ table(:projects).create!(
+ id: 2,
+ name: 'Self Monitoring',
+ path: 'self_monitoring',
+ namespace_id: instance_administrators_group.id
+ )
+ end
+
+ context 'when the self monitoring project ID is not set' do
+ it 'does not make changes' do
+ expect(environments.find_by(project_id: self_monitoring_project.id)).to be_nil
+
+ migrate!
+
+ expect(environments.find_by(project_id: self_monitoring_project.id)).to be_nil
+ end
+ end
+
+ context 'when the self monitoring project ID is set' do
+ before do
+ application_settings_table.create!(instance_administration_project_id: self_monitoring_project.id)
+ end
+
+ context 'when the environment already exists' do
+ let!(:environment) do
+ environments.create!(project_id: self_monitoring_project.id, name: 'production', slug: 'production')
+ end
+
+ it 'does not make changes' do
+ expect(environments.find_by(project_id: self_monitoring_project.id)).to eq(environment)
+
+ migrate!
+
+ expect(environments.find_by(project_id: self_monitoring_project.id)).to eq(environment)
+ end
+ end
+
+ context 'when the environment does not exist' do
+ it 'creates the environment' do
+ expect(environments.find_by(project_id: self_monitoring_project.id)).to be_nil
+
+ migrate!
+
+ expect(environments.find_by(project_id: self_monitoring_project.id)).to be
+ end
+ end
+ end
+end
diff --git a/spec/models/lfs_object_spec.rb b/spec/models/lfs_object_spec.rb
index 51713906d06..09a64dabb08 100644
--- a/spec/models/lfs_object_spec.rb
+++ b/spec/models/lfs_object_spec.rb
@@ -13,6 +13,15 @@ describe LfsObject do
expect(described_class.not_linked_to_project(project)).to contain_exactly(other_lfs_object)
end
end
+
+ describe '.for_oids' do
+ it 'returns the correct LfsObjects' do
+ lfs_object_1, lfs_object_2 = create_list(:lfs_object, 2)
+
+ expect(described_class.for_oids(lfs_object_1.oid)).to contain_exactly(lfs_object_1)
+ expect(described_class.for_oids([lfs_object_1.oid, lfs_object_2.oid])).to contain_exactly(lfs_object_1, lfs_object_2)
+ end
+ end
end
it 'has a distinct has_many :projects relation through lfs_objects_projects' do
diff --git a/spec/services/projects/lfs_pointers/lfs_link_service_spec.rb b/spec/services/projects/lfs_pointers/lfs_link_service_spec.rb
index aca59079b3c..b64662f3782 100644
--- a/spec/services/projects/lfs_pointers/lfs_link_service_spec.rb
+++ b/spec/services/projects/lfs_pointers/lfs_link_service_spec.rb
@@ -60,8 +60,8 @@ describe Projects::LfsPointers::LfsLinkService do
stub_const("#{described_class}::BATCH_SIZE", 1)
oids = %w(one two)
- expect(LfsObject).to receive(:where).with(oid: %w(one)).once.and_call_original
- expect(LfsObject).to receive(:where).with(oid: %w(two)).once.and_call_original
+ expect(LfsObject).to receive(:for_oids).with(%w(one)).once.and_call_original
+ expect(LfsObject).to receive(:for_oids).with(%w(two)).once.and_call_original
subject.execute(oids)
end
diff --git a/spec/services/projects/update_pages_service_spec.rb b/spec/services/projects/update_pages_service_spec.rb
index 52ec80c252b..f561a303be4 100644
--- a/spec/services/projects/update_pages_service_spec.rb
+++ b/spec/services/projects/update_pages_service_spec.rb
@@ -82,6 +82,9 @@ describe Projects::UpdatePagesService do
expect(execute).not_to eq(:success)
expect(project.pages_metadatum).not_to be_deployed
+
+ expect(deploy_status).to be_failed
+ expect(deploy_status.description).to eq('build SHA is outdated for this ref')
end
context 'when using empty file' do
diff --git a/spec/support/shared_examples/tasks/gitlab/uploads/migration_shared_examples.rb b/spec/support/shared_examples/tasks/gitlab/uploads/migration_shared_examples.rb
new file mode 100644
index 00000000000..b37a8059574
--- /dev/null
+++ b/spec/support/shared_examples/tasks/gitlab/uploads/migration_shared_examples.rb
@@ -0,0 +1,31 @@
+# frozen_string_literal: true
+
+# Expects the calling spec to define:
+# - uploader_class
+# - model_class
+# - mounted_as
+RSpec.shared_examples 'enqueue upload migration jobs in batch' do |batch:|
+ def run(task)
+ args = [uploader_class.to_s, model_class.to_s, mounted_as].compact
+ run_rake_task(task, *args)
+ end
+
+ it 'migrates local storage to remote object storage' do
+ expect(ObjectStorage::MigrateUploadsWorker)
+ .to receive(:perform_async).exactly(batch).times
+ .and_return("A fake job.")
+
+ run('gitlab:uploads:migrate')
+ end
+
+ it 'migrates remote object storage to local storage' do
+ expect(Upload).to receive(:where).exactly(batch + 1).times { Upload.all }
+ expect(ObjectStorage::MigrateUploadsWorker)
+ .to receive(:perform_async)
+ .with(anything, model_class.name, mounted_as, ObjectStorage::Store::LOCAL)
+ .exactly(batch).times
+ .and_return("A fake job.")
+
+ run('gitlab:uploads:migrate_to_local')
+ end
+end
diff --git a/spec/support/shared_examples/uploaders/workers/object_storage/migrate_uploads_shared_examples.rb b/spec/support/shared_examples/uploaders/workers/object_storage/migrate_uploads_shared_examples.rb
new file mode 100644
index 00000000000..f143cbc7165
--- /dev/null
+++ b/spec/support/shared_examples/uploaders/workers/object_storage/migrate_uploads_shared_examples.rb
@@ -0,0 +1,120 @@
+# frozen_string_literal: true
+
+# Expects the calling spec to define:
+# - model_class
+# - mounted_as
+# - to_store
+RSpec.shared_examples 'uploads migration worker' do
+ def perform(uploads, store = nil)
+ described_class.new.perform(uploads.ids, model_class.to_s, mounted_as, store || to_store)
+ rescue ObjectStorage::MigrateUploadsWorker::Report::MigrationFailures
+ # swallow
+ end
+
+ describe '.enqueue!' do
+ def enqueue!
+ described_class.enqueue!(uploads, model_class, mounted_as, to_store)
+ end
+
+ it 'is guarded by .sanity_check!' do
+ expect(described_class).to receive(:perform_async)
+ expect(described_class).to receive(:sanity_check!)
+
+ enqueue!
+ end
+
+ context 'sanity_check! fails' do
+ include_context 'sanity_check! fails'
+
+ it 'does not enqueue a job' do
+ expect(described_class).not_to receive(:perform_async)
+
+ expect { enqueue! }.to raise_error(described_class::SanityCheckError)
+ end
+ end
+ end
+
+ describe '.sanity_check!' do
+ shared_examples 'raises a SanityCheckError' do |expected_message|
+ let(:mount_point) { nil }
+
+ it do
+ expect { described_class.sanity_check!(uploads, model_class, mount_point) }
+ .to raise_error(described_class::SanityCheckError).with_message(expected_message)
+ end
+ end
+
+ context 'uploader types mismatch' do
+ let!(:outlier) { create(:upload, uploader: 'GitlabUploader') }
+
+ include_examples 'raises a SanityCheckError', /Multiple uploaders found/
+ end
+
+ context 'mount point not found' do
+ include_examples 'raises a SanityCheckError', /Mount point [a-z:]+ not found in/ do
+ let(:mount_point) { :potato }
+ end
+ end
+ end
+
+ describe '#perform' do
+ shared_examples 'outputs correctly' do |success: 0, failures: 0|
+ total = success + failures
+
+ if success > 0
+ it 'outputs the reports' do
+ expect(Rails.logger).to receive(:info).with(%r{Migrated #{success}/#{total} files})
+
+ perform(uploads)
+ end
+ end
+
+ if failures > 0
+ it 'outputs upload failures' do
+ expect(Rails.logger).to receive(:warn).with(/Error .* I am a teapot/)
+
+ perform(uploads)
+ end
+ end
+ end
+
+ it_behaves_like 'outputs correctly', success: 10
+
+ it 'migrates files to remote storage' do
+ perform(uploads)
+
+ expect(Upload.where(store: ObjectStorage::Store::LOCAL).count).to eq(0)
+ end
+
+ context 'reversed' do
+ let(:to_store) { ObjectStorage::Store::LOCAL }
+
+ before do
+ perform(uploads, ObjectStorage::Store::REMOTE)
+ end
+
+ it 'migrates files to local storage' do
+ expect(Upload.where(store: ObjectStorage::Store::REMOTE).count).to eq(10)
+
+ perform(uploads)
+
+ expect(Upload.where(store: ObjectStorage::Store::LOCAL).count).to eq(10)
+ end
+ end
+
+ context 'migration is unsuccessful' do
+ before do
+ allow_any_instance_of(ObjectStorage::Concern)
+ .to receive(:migrate!).and_raise(CarrierWave::UploadError, 'I am a teapot.')
+ end
+
+ it_behaves_like 'outputs correctly', failures: 10
+ end
+ end
+end
+
+RSpec.shared_context 'sanity_check! fails' do
+ before do
+ expect(described_class).to receive(:sanity_check!).and_raise(described_class::SanityCheckError)
+ end
+end
diff --git a/spec/tasks/gitlab/uploads/migrate_rake_spec.rb b/spec/tasks/gitlab/uploads/migrate_rake_spec.rb
index 2f773bdfeec..8ea0a98a1dc 100644
--- a/spec/tasks/gitlab/uploads/migrate_rake_spec.rb
+++ b/spec/tasks/gitlab/uploads/migrate_rake_spec.rb
@@ -16,32 +16,6 @@ describe 'gitlab:uploads:migrate and migrate_to_local rake tasks' do
allow(ObjectStorage::MigrateUploadsWorker).to receive(:perform_async)
end
- def run(task)
- args = [uploader_class.to_s, model_class.to_s, mounted_as].compact
- run_rake_task(task, *args)
- end
-
- shared_examples 'enqueue jobs in batch' do |batch:|
- it 'migrates local storage to remote object storage' do
- expect(ObjectStorage::MigrateUploadsWorker)
- .to receive(:perform_async).exactly(batch).times
- .and_return("A fake job.")
-
- run('gitlab:uploads:migrate')
- end
-
- it 'migrates remote object storage to local storage' do
- expect(Upload).to receive(:where).exactly(batch + 1).times { Upload.all }
- expect(ObjectStorage::MigrateUploadsWorker)
- .to receive(:perform_async)
- .with(anything, model_class.name, mounted_as, ObjectStorage::Store::LOCAL)
- .exactly(batch).times
- .and_return("A fake job.")
-
- run('gitlab:uploads:migrate_to_local')
- end
- end
-
context "for AvatarUploader" do
let(:uploader_class) { AvatarUploader }
let(:mounted_as) { :avatar }
@@ -50,7 +24,7 @@ describe 'gitlab:uploads:migrate and migrate_to_local rake tasks' do
let(:model_class) { Project }
let!(:projects) { create_list(:project, 10, :with_avatar) }
- it_behaves_like 'enqueue jobs in batch', batch: 4
+ it_behaves_like 'enqueue upload migration jobs in batch', batch: 4
end
context "for Group" do
@@ -60,7 +34,7 @@ describe 'gitlab:uploads:migrate and migrate_to_local rake tasks' do
create_list(:group, 10, :with_avatar)
end
- it_behaves_like 'enqueue jobs in batch', batch: 4
+ it_behaves_like 'enqueue upload migration jobs in batch', batch: 4
end
context "for User" do
@@ -70,7 +44,7 @@ describe 'gitlab:uploads:migrate and migrate_to_local rake tasks' do
create_list(:user, 10, :with_avatar)
end
- it_behaves_like 'enqueue jobs in batch', batch: 4
+ it_behaves_like 'enqueue upload migration jobs in batch', batch: 4
end
end
@@ -85,7 +59,7 @@ describe 'gitlab:uploads:migrate and migrate_to_local rake tasks' do
create_list(:note, 10, :with_attachment)
end
- it_behaves_like 'enqueue jobs in batch', batch: 4
+ it_behaves_like 'enqueue upload migration jobs in batch', batch: 4
end
context "for Appearance" do
@@ -97,7 +71,7 @@ describe 'gitlab:uploads:migrate and migrate_to_local rake tasks' do
end
%i(logo header_logo).each do |mount|
- it_behaves_like 'enqueue jobs in batch', batch: 1 do
+ it_behaves_like 'enqueue upload migration jobs in batch', batch: 1 do
let(:mounted_as) { mount }
end
end
@@ -115,7 +89,7 @@ describe 'gitlab:uploads:migrate and migrate_to_local rake tasks' do
end
end
- it_behaves_like 'enqueue jobs in batch', batch: 4
+ it_behaves_like 'enqueue upload migration jobs in batch', batch: 4
end
context "for PersonalFileUploader" do
@@ -129,7 +103,7 @@ describe 'gitlab:uploads:migrate and migrate_to_local rake tasks' do
end
end
- it_behaves_like 'enqueue jobs in batch', batch: 4
+ it_behaves_like 'enqueue upload migration jobs in batch', batch: 4
end
context "for NamespaceFileUploader" do
@@ -143,6 +117,6 @@ describe 'gitlab:uploads:migrate and migrate_to_local rake tasks' do
end
end
- it_behaves_like 'enqueue jobs in batch', batch: 4
+ it_behaves_like 'enqueue upload migration jobs in batch', batch: 4
end
end
diff --git a/spec/uploaders/workers/object_storage/migrate_uploads_worker_spec.rb b/spec/uploaders/workers/object_storage/migrate_uploads_worker_spec.rb
index 89a1fa80943..fcb8f4e51b5 100644
--- a/spec/uploaders/workers/object_storage/migrate_uploads_worker_spec.rb
+++ b/spec/uploaders/workers/object_storage/migrate_uploads_worker_spec.rb
@@ -3,12 +3,6 @@
require 'spec_helper'
describe ObjectStorage::MigrateUploadsWorker do
- shared_context 'sanity_check! fails' do
- before do
- expect(described_class).to receive(:sanity_check!).and_raise(described_class::SanityCheckError)
- end
- end
-
let(:model_class) { Project }
let(:uploads) { Upload.all }
let(:to_store) { ObjectStorage::Store::REMOTE }
@@ -19,109 +13,6 @@ describe ObjectStorage::MigrateUploadsWorker do
# swallow
end
- shared_examples "uploads migration worker" do
- describe '.enqueue!' do
- def enqueue!
- described_class.enqueue!(uploads, Project, mounted_as, to_store)
- end
-
- it 'is guarded by .sanity_check!' do
- expect(described_class).to receive(:perform_async)
- expect(described_class).to receive(:sanity_check!)
-
- enqueue!
- end
-
- context 'sanity_check! fails' do
- include_context 'sanity_check! fails'
-
- it 'does not enqueue a job' do
- expect(described_class).not_to receive(:perform_async)
-
- expect { enqueue! }.to raise_error(described_class::SanityCheckError)
- end
- end
- end
-
- describe '.sanity_check!' do
- shared_examples 'raises a SanityCheckError' do |expected_message|
- let(:mount_point) { nil }
-
- it do
- expect { described_class.sanity_check!(uploads, model_class, mount_point) }
- .to raise_error(described_class::SanityCheckError).with_message(expected_message)
- end
- end
-
- context 'uploader types mismatch' do
- let!(:outlier) { create(:upload, uploader: 'GitlabUploader') }
-
- include_examples 'raises a SanityCheckError', /Multiple uploaders found/
- end
-
- context 'mount point not found' do
- include_examples 'raises a SanityCheckError', /Mount point [a-z:]+ not found in/ do
- let(:mount_point) { :potato }
- end
- end
- end
-
- describe '#perform' do
- shared_examples 'outputs correctly' do |success: 0, failures: 0|
- total = success + failures
-
- if success > 0
- it 'outputs the reports' do
- expect(Rails.logger).to receive(:info).with(%r{Migrated #{success}/#{total} files})
-
- perform(uploads)
- end
- end
-
- if failures > 0
- it 'outputs upload failures' do
- expect(Rails.logger).to receive(:warn).with(/Error .* I am a teapot/)
-
- perform(uploads)
- end
- end
- end
-
- it_behaves_like 'outputs correctly', success: 10
-
- it 'migrates files to remote storage' do
- perform(uploads)
-
- expect(Upload.where(store: ObjectStorage::Store::LOCAL).count).to eq(0)
- end
-
- context 'reversed' do
- let(:to_store) { ObjectStorage::Store::LOCAL }
-
- before do
- perform(uploads, ObjectStorage::Store::REMOTE)
- end
-
- it 'migrates files to local storage' do
- expect(Upload.where(store: ObjectStorage::Store::REMOTE).count).to eq(10)
-
- perform(uploads)
-
- expect(Upload.where(store: ObjectStorage::Store::LOCAL).count).to eq(10)
- end
- end
-
- context 'migration is unsuccessful' do
- before do
- allow_any_instance_of(ObjectStorage::Concern)
- .to receive(:migrate!).and_raise(CarrierWave::UploadError, "I am a teapot.")
- end
-
- it_behaves_like 'outputs correctly', failures: 10
- end
- end
- end
-
context "for AvatarUploader" do
let!(:projects) { create_list(:project, 10, :with_avatar) }
let(:mounted_as) { :avatar }
diff --git a/spec/views/admin/application_settings/integrations.html.haml_spec.rb b/spec/views/admin/application_settings/integrations.html.haml_spec.rb
index 392d43ef2d4..e51cbb9fbfe 100644
--- a/spec/views/admin/application_settings/integrations.html.haml_spec.rb
+++ b/spec/views/admin/application_settings/integrations.html.haml_spec.rb
@@ -11,6 +11,7 @@ describe 'admin/application_settings/integrations.html.haml' do
before do
assign(:application_setting, app_settings)
allow(Gitlab::Sourcegraph).to receive(:feature_available?).and_return(sourcegraph_flag)
+ allow(License).to receive(:feature_available?).with(:elastic_search).and_return(false) if defined?(License)
end
context 'when sourcegraph feature is enabled' do