diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2020-02-21 21:08:57 +0000 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2020-02-21 21:08:57 +0000 |
commit | a6c2be7cd20a9515b347e72d63c5b47bb9b79457 (patch) | |
tree | 568212b4debeb2a35bb1133209b98e1468d9ee85 /spec | |
parent | 74a2d57b337034cfdcd719615e4da06643b69114 (diff) | |
download | gitlab-ce-a6c2be7cd20a9515b347e72d63c5b47bb9b79457.tar.gz |
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'spec')
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 |