summaryrefslogtreecommitdiff
path: root/spec/lib
diff options
context:
space:
mode:
Diffstat (limited to 'spec/lib')
-rw-r--r--spec/lib/backup/artifacts_spec.rb2
-rw-r--r--spec/lib/backup/files_spec.rb12
-rw-r--r--spec/lib/backup/gitaly_backup_spec.rb30
-rw-r--r--spec/lib/backup/lfs_spec.rb2
-rw-r--r--spec/lib/backup/manager_spec.rb13
-rw-r--r--spec/lib/backup/object_backup_spec.rb2
-rw-r--r--spec/lib/backup/pages_spec.rb2
-rw-r--r--spec/lib/backup/repositories_spec.rb13
-rw-r--r--spec/lib/backup/task_spec.rb2
-rw-r--r--spec/lib/backup/uploads_spec.rb2
-rw-r--r--spec/lib/gitlab/background_migration/backfill_group_features_spec.rb28
-rw-r--r--spec/lib/gitlab/ci/config/external/file/artifact_spec.rb16
-rw-r--r--spec/lib/gitlab/ci/config/external/file/base_spec.rb27
-rw-r--r--spec/lib/gitlab/ci/config/external/file/local_spec.rb25
-rw-r--r--spec/lib/gitlab/ci/config/external/file/project_spec.rb23
-rw-r--r--spec/lib/gitlab/ci/config/external/file/remote_spec.rb30
-rw-r--r--spec/lib/gitlab/ci/config/external/file/template_spec.rb13
17 files changed, 144 insertions, 98 deletions
diff --git a/spec/lib/backup/artifacts_spec.rb b/spec/lib/backup/artifacts_spec.rb
index d830692d96b..f9cd21d5f79 100644
--- a/spec/lib/backup/artifacts_spec.rb
+++ b/spec/lib/backup/artifacts_spec.rb
@@ -18,7 +18,7 @@ RSpec.describe Backup::Artifacts do
expect(backup).to receive(:tar).and_return('blabla-tar')
expect(backup).to receive(:run_pipeline!).with([%w(blabla-tar --exclude=lost+found --exclude=./tmp -C /var/gitlab-artifacts -cf - .), 'gzip -c -1'], any_args).and_return([[true, true], ''])
expect(backup).to receive(:pipeline_succeeded?).and_return(true)
- backup.dump('artifacts.tar.gz')
+ backup.dump('artifacts.tar.gz', 'backup_id')
end
end
end
diff --git a/spec/lib/backup/files_spec.rb b/spec/lib/backup/files_spec.rb
index bbc465a26c9..b3e71d5b0bf 100644
--- a/spec/lib/backup/files_spec.rb
+++ b/spec/lib/backup/files_spec.rb
@@ -118,14 +118,14 @@ RSpec.describe Backup::Files do
end
it 'raises no errors' do
- expect { subject.dump('registry.tar.gz') }.not_to raise_error
+ expect { subject.dump('registry.tar.gz', 'backup_id') }.not_to raise_error
end
it 'excludes tmp dirs from archive' do
expect(subject).to receive(:tar).and_return('blabla-tar')
expect(subject).to receive(:run_pipeline!).with([%w(blabla-tar --exclude=lost+found --exclude=./@pages.tmp -C /var/gitlab-pages -cf - .), 'gzip -c -1'], any_args)
- subject.dump('registry.tar.gz')
+ subject.dump('registry.tar.gz', 'backup_id')
end
it 'raises an error on failure' do
@@ -133,7 +133,7 @@ RSpec.describe Backup::Files do
expect(subject).to receive(:pipeline_succeeded?).and_return(false)
expect do
- subject.dump('registry.tar.gz')
+ subject.dump('registry.tar.gz', 'backup_id')
end.to raise_error(/Failed to create compressed file/)
end
@@ -149,7 +149,7 @@ RSpec.describe Backup::Files do
.with(%w(rsync -a --delete --exclude=lost+found --exclude=/gitlab-pages/@pages.tmp /var/gitlab-pages /var/gitlab-backup))
.and_return(['', 0])
- subject.dump('registry.tar.gz')
+ subject.dump('registry.tar.gz', 'backup_id')
end
it 'retries if rsync fails due to vanishing files' do
@@ -158,7 +158,7 @@ RSpec.describe Backup::Files do
.and_return(['rsync failed', 24], ['', 0])
expect do
- subject.dump('registry.tar.gz')
+ subject.dump('registry.tar.gz', 'backup_id')
end.to output(/files vanished during rsync, retrying/).to_stdout
end
@@ -168,7 +168,7 @@ RSpec.describe Backup::Files do
.and_return(['rsync failed', 1])
expect do
- subject.dump('registry.tar.gz')
+ subject.dump('registry.tar.gz', 'backup_id')
end.to output(/rsync failed/).to_stdout
.and raise_error(/Failed to create compressed file/)
end
diff --git a/spec/lib/backup/gitaly_backup_spec.rb b/spec/lib/backup/gitaly_backup_spec.rb
index c1b232290dc..399e4ffa72b 100644
--- a/spec/lib/backup/gitaly_backup_spec.rb
+++ b/spec/lib/backup/gitaly_backup_spec.rb
@@ -25,11 +25,11 @@ RSpec.describe Backup::GitalyBackup do
progress.close
end
- subject { described_class.new(progress, max_parallelism: max_parallelism, storage_parallelism: storage_parallelism, backup_id: backup_id) }
+ subject { described_class.new(progress, max_parallelism: max_parallelism, storage_parallelism: storage_parallelism) }
context 'unknown' do
it 'fails to start unknown' do
- expect { subject.start(:unknown, destination) }.to raise_error(::Backup::Error, 'unknown backup type: unknown')
+ expect { subject.start(:unknown, destination, backup_id: backup_id) }.to raise_error(::Backup::Error, 'unknown backup type: unknown')
end
end
@@ -44,7 +44,7 @@ RSpec.describe Backup::GitalyBackup do
expect(Open3).to receive(:popen2).with(expected_env, anything, 'create', '-path', anything, '-layout', 'pointer', '-id', backup_id).and_call_original
- subject.start(:create, destination)
+ subject.start(:create, destination, backup_id: backup_id)
subject.enqueue(project, Gitlab::GlRepository::PROJECT)
subject.enqueue(project, Gitlab::GlRepository::WIKI)
subject.enqueue(project, Gitlab::GlRepository::DESIGN)
@@ -65,7 +65,7 @@ RSpec.describe Backup::GitalyBackup do
it 'passes parallel option through' do
expect(Open3).to receive(:popen2).with(expected_env, anything, 'create', '-path', anything, '-parallel', '3', '-layout', 'pointer', '-id', backup_id).and_call_original
- subject.start(:create, destination)
+ subject.start(:create, destination, backup_id: backup_id)
subject.finish!
end
end
@@ -76,7 +76,7 @@ RSpec.describe Backup::GitalyBackup do
it 'passes parallel option through' do
expect(Open3).to receive(:popen2).with(expected_env, anything, 'create', '-path', anything, '-parallel-storage', '3', '-layout', 'pointer', '-id', backup_id).and_call_original
- subject.start(:create, destination)
+ subject.start(:create, destination, backup_id: backup_id)
subject.finish!
end
end
@@ -84,14 +84,14 @@ RSpec.describe Backup::GitalyBackup do
it 'raises when the exit code not zero' do
expect(subject).to receive(:bin_path).and_return(Gitlab::Utils.which('false'))
- subject.start(:create, destination)
+ subject.start(:create, destination, backup_id: backup_id)
expect { subject.finish! }.to raise_error(::Backup::Error, 'gitaly-backup exit status 1')
end
it 'raises when gitaly_backup_path is not set' do
stub_backup_setting(gitaly_backup_path: nil)
- expect { subject.start(:create, destination) }.to raise_error(::Backup::Error, 'gitaly-backup binary not found and gitaly_backup_path is not configured')
+ expect { subject.start(:create, destination, backup_id: backup_id) }.to raise_error(::Backup::Error, 'gitaly-backup binary not found and gitaly_backup_path is not configured')
end
context 'feature flag incremental_repository_backup disabled' do
@@ -108,7 +108,7 @@ RSpec.describe Backup::GitalyBackup do
expect(Open3).to receive(:popen2).with(expected_env, anything, 'create', '-path', anything).and_call_original
- subject.start(:create, destination)
+ subject.start(:create, destination, backup_id: backup_id)
subject.enqueue(project, Gitlab::GlRepository::PROJECT)
subject.enqueue(project, Gitlab::GlRepository::WIKI)
subject.enqueue(project, Gitlab::GlRepository::DESIGN)
@@ -152,7 +152,7 @@ RSpec.describe Backup::GitalyBackup do
it 'passes through SSL envs' do
expect(Open3).to receive(:popen2).with(ssl_env, anything, 'create', '-path', anything, '-layout', 'pointer', '-id', backup_id).and_call_original
- subject.start(:create, destination)
+ subject.start(:create, destination, backup_id: backup_id)
subject.finish!
end
end
@@ -177,7 +177,7 @@ RSpec.describe Backup::GitalyBackup do
expect(Open3).to receive(:popen2).with(expected_env, anything, 'restore', '-path', anything, '-layout', 'pointer').and_call_original
- subject.start(:restore, destination)
+ subject.start(:restore, destination, backup_id: backup_id)
subject.enqueue(project, Gitlab::GlRepository::PROJECT)
subject.enqueue(project, Gitlab::GlRepository::WIKI)
subject.enqueue(project, Gitlab::GlRepository::DESIGN)
@@ -200,7 +200,7 @@ RSpec.describe Backup::GitalyBackup do
it 'passes parallel option through' do
expect(Open3).to receive(:popen2).with(expected_env, anything, 'restore', '-path', anything, '-parallel', '3', '-layout', 'pointer').and_call_original
- subject.start(:restore, destination)
+ subject.start(:restore, destination, backup_id: backup_id)
subject.finish!
end
end
@@ -211,7 +211,7 @@ RSpec.describe Backup::GitalyBackup do
it 'passes parallel option through' do
expect(Open3).to receive(:popen2).with(expected_env, anything, 'restore', '-path', anything, '-parallel-storage', '3', '-layout', 'pointer').and_call_original
- subject.start(:restore, destination)
+ subject.start(:restore, destination, backup_id: backup_id)
subject.finish!
end
end
@@ -230,7 +230,7 @@ RSpec.describe Backup::GitalyBackup do
expect(Open3).to receive(:popen2).with(expected_env, anything, 'restore', '-path', anything).and_call_original
- subject.start(:restore, destination)
+ subject.start(:restore, destination, backup_id: backup_id)
subject.enqueue(project, Gitlab::GlRepository::PROJECT)
subject.enqueue(project, Gitlab::GlRepository::WIKI)
subject.enqueue(project, Gitlab::GlRepository::DESIGN)
@@ -251,14 +251,14 @@ RSpec.describe Backup::GitalyBackup do
it 'raises when the exit code not zero' do
expect(subject).to receive(:bin_path).and_return(Gitlab::Utils.which('false'))
- subject.start(:restore, destination)
+ subject.start(:restore, destination, backup_id: backup_id)
expect { subject.finish! }.to raise_error(::Backup::Error, 'gitaly-backup exit status 1')
end
it 'raises when gitaly_backup_path is not set' do
stub_backup_setting(gitaly_backup_path: nil)
- expect { subject.start(:restore, destination) }.to raise_error(::Backup::Error, 'gitaly-backup binary not found and gitaly_backup_path is not configured')
+ expect { subject.start(:restore, destination, backup_id: backup_id) }.to raise_error(::Backup::Error, 'gitaly-backup binary not found and gitaly_backup_path is not configured')
end
end
end
diff --git a/spec/lib/backup/lfs_spec.rb b/spec/lib/backup/lfs_spec.rb
index a27f60f20d0..130012e4935 100644
--- a/spec/lib/backup/lfs_spec.rb
+++ b/spec/lib/backup/lfs_spec.rb
@@ -20,7 +20,7 @@ RSpec.describe Backup::Lfs do
expect(backup).to receive(:run_pipeline!).with([%w(blabla-tar --exclude=lost+found -C /var/lfs-objects -cf - .), 'gzip -c -1'], any_args).and_return([[true, true], ''])
expect(backup).to receive(:pipeline_succeeded?).and_return(true)
- backup.dump('lfs.tar.gz')
+ backup.dump('lfs.tar.gz', 'backup_id')
end
end
end
diff --git a/spec/lib/backup/manager_spec.rb b/spec/lib/backup/manager_spec.rb
index 04045c00981..f640a0dba9c 100644
--- a/spec/lib/backup/manager_spec.rb
+++ b/spec/lib/backup/manager_spec.rb
@@ -147,7 +147,8 @@ RSpec.describe Backup::Manager do
describe '#create' do
let(:incremental_env) { 'false' }
let(:expected_backup_contents) { %w{backup_information.yml task1.tar.gz task2.tar.gz} }
- let(:tar_file) { '1546300800_2019_01_01_12.3_gitlab_backup.tar' }
+ let(:backup_id) { '1546300800_2019_01_01_12.3' }
+ let(:tar_file) { "#{backup_id}_gitlab_backup.tar" }
let(:tar_system_options) { { out: [tar_file, 'w', Gitlab.config.backup.archive_permissions] } }
let(:tar_cmdline) { ['tar', '-cf', '-', *expected_backup_contents, tar_system_options] }
let(:backup_information) do
@@ -176,8 +177,8 @@ RSpec.describe Backup::Manager do
.and_return(backup_information)
allow(subject).to receive(:backup_information).and_return(backup_information)
- allow(task1).to receive(:dump).with(File.join(Gitlab.config.backup.path, 'task1.tar.gz'))
- allow(task2).to receive(:dump).with(File.join(Gitlab.config.backup.path, 'task2.tar.gz'))
+ allow(task1).to receive(:dump).with(File.join(Gitlab.config.backup.path, 'task1.tar.gz'), backup_id)
+ allow(task2).to receive(:dump).with(File.join(Gitlab.config.backup.path, 'task2.tar.gz'), backup_id)
end
it 'executes tar' do
@@ -201,7 +202,7 @@ RSpec.describe Backup::Manager do
end
context 'when BACKUP is set' do
- let(:tar_file) { 'custom_gitlab_backup.tar' }
+ let(:backup_id) { 'custom' }
it 'uses the given value as tar file name' do
stub_env('BACKUP', '/ignored/path/custom')
@@ -581,7 +582,8 @@ RSpec.describe Backup::Manager do
context 'incremental' do
let(:incremental_env) { 'true' }
let(:gitlab_version) { Gitlab::VERSION }
- let(:tar_file) { "1546300800_2019_01_01_#{gitlab_version}_gitlab_backup.tar" }
+ let(:backup_id) { "1546300800_2019_01_01_#{gitlab_version}" }
+ let(:tar_file) { "#{backup_id}_gitlab_backup.tar" }
let(:backup_information) do
{
backup_created_at: Time.zone.parse('2019-01-01'),
@@ -645,6 +647,7 @@ RSpec.describe Backup::Manager do
end
context 'when BACKUP variable is set to a correct file' do
+ let(:backup_id) { '1451606400_2016_01_01_1.2.3' }
let(:tar_cmdline) { %w{tar -xf 1451606400_2016_01_01_1.2.3_gitlab_backup.tar} }
before do
diff --git a/spec/lib/backup/object_backup_spec.rb b/spec/lib/backup/object_backup_spec.rb
index 85658173b0e..c0284942001 100644
--- a/spec/lib/backup/object_backup_spec.rb
+++ b/spec/lib/backup/object_backup_spec.rb
@@ -21,7 +21,7 @@ RSpec.shared_examples 'backup object' do |setting|
expect(backup).to receive(:run_pipeline!).with([%W(blabla-tar --exclude=lost+found --exclude=./tmp -C #{backup_path} -cf - .), 'gzip -c -1'], any_args).and_return([[true, true], ''])
expect(backup).to receive(:pipeline_succeeded?).and_return(true)
- backup.dump('backup_object.tar.gz')
+ backup.dump('backup_object.tar.gz', 'backup_id')
end
end
end
diff --git a/spec/lib/backup/pages_spec.rb b/spec/lib/backup/pages_spec.rb
index 095dda61cf4..3af8de306ce 100644
--- a/spec/lib/backup/pages_spec.rb
+++ b/spec/lib/backup/pages_spec.rb
@@ -19,7 +19,7 @@ RSpec.describe Backup::Pages do
expect(subject).to receive(:tar).and_return('blabla-tar')
expect(subject).to receive(:run_pipeline!).with([%w(blabla-tar --exclude=lost+found --exclude=./@pages.tmp -C /var/gitlab-pages -cf - .), 'gzip -c -1'], any_args).and_return([[true, true], ''])
expect(subject).to receive(:pipeline_succeeded?).and_return(true)
- subject.dump('pages.tar.gz')
+ subject.dump('pages.tar.gz', 'backup_id')
end
end
end
diff --git a/spec/lib/backup/repositories_spec.rb b/spec/lib/backup/repositories_spec.rb
index 911a8895be3..c6f611e727c 100644
--- a/spec/lib/backup/repositories_spec.rb
+++ b/spec/lib/backup/repositories_spec.rb
@@ -6,6 +6,7 @@ RSpec.describe Backup::Repositories do
let(:progress) { spy(:stdout) }
let(:strategy) { spy(:strategy) }
let(:destination) { 'repositories' }
+ let(:backup_id) { 'backup_id' }
subject do
described_class.new(
@@ -22,9 +23,9 @@ RSpec.describe Backup::Repositories do
project_snippet = create(:project_snippet, :repository, project: project)
personal_snippet = create(:personal_snippet, :repository, author: project.first_owner)
- subject.dump(destination)
+ subject.dump(destination, backup_id)
- expect(strategy).to have_received(:start).with(:create, destination)
+ expect(strategy).to have_received(:start).with(:create, destination, backup_id: backup_id)
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)
@@ -50,25 +51,25 @@ RSpec.describe Backup::Repositories do
it 'enqueue_project raises an error' do
allow(strategy).to receive(:enqueue).with(anything, Gitlab::GlRepository::PROJECT).and_raise(IOError)
- expect { subject.dump(destination) }.to raise_error(IOError)
+ expect { subject.dump(destination, backup_id) }.to raise_error(IOError)
end
it 'project query raises an error' do
allow(Project).to receive_message_chain(:includes, :find_each).and_raise(ActiveRecord::StatementTimeout)
- expect { subject.dump(destination) }.to raise_error(ActiveRecord::StatementTimeout)
+ expect { subject.dump(destination, backup_id) }.to raise_error(ActiveRecord::StatementTimeout)
end
end
it 'avoids N+1 database queries' do
control_count = ActiveRecord::QueryRecorder.new do
- subject.dump(destination)
+ subject.dump(destination, backup_id)
end.count
create_list(:project, 2, :repository)
expect do
- subject.dump(destination)
+ subject.dump(destination, backup_id)
end.not_to exceed_query_limit(control_count)
end
end
diff --git a/spec/lib/backup/task_spec.rb b/spec/lib/backup/task_spec.rb
index b0eb885d3f4..f6c6e44ce6b 100644
--- a/spec/lib/backup/task_spec.rb
+++ b/spec/lib/backup/task_spec.rb
@@ -15,7 +15,7 @@ RSpec.describe Backup::Task do
describe '#dump' do
it 'must be implemented by the subclass' do
- expect { subject.dump('some/path') }.to raise_error(NotImplementedError)
+ expect { subject.dump('some/path', 'backup_id') }.to raise_error(NotImplementedError)
end
end
diff --git a/spec/lib/backup/uploads_spec.rb b/spec/lib/backup/uploads_spec.rb
index 0cfc80a9cb9..4a05f592208 100644
--- a/spec/lib/backup/uploads_spec.rb
+++ b/spec/lib/backup/uploads_spec.rb
@@ -19,7 +19,7 @@ RSpec.describe Backup::Uploads do
expect(backup).to receive(:tar).and_return('blabla-tar')
expect(backup).to receive(:run_pipeline!).with([%w(blabla-tar --exclude=lost+found --exclude=./tmp -C /var/uploads -cf - .), 'gzip -c -1'], any_args).and_return([[true, true], ''])
expect(backup).to receive(:pipeline_succeeded?).and_return(true)
- backup.dump('uploads.tar.gz')
+ backup.dump('uploads.tar.gz', 'backup_id')
end
end
end
diff --git a/spec/lib/gitlab/background_migration/backfill_group_features_spec.rb b/spec/lib/gitlab/background_migration/backfill_group_features_spec.rb
new file mode 100644
index 00000000000..4705f0d0ab9
--- /dev/null
+++ b/spec/lib/gitlab/background_migration/backfill_group_features_spec.rb
@@ -0,0 +1,28 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+RSpec.describe Gitlab::BackgroundMigration::BackfillGroupFeatures, :migration, schema: 20220302114046 do
+ let(:group_features) { table(:group_features) }
+ let(:namespaces) { table(:namespaces) }
+
+ subject { described_class.new(connection: ActiveRecord::Base.connection) }
+
+ describe '#perform' do
+ it 'creates settings for all group namespaces in range' do
+ namespaces.create!(id: 1, name: 'group1', path: 'group1', type: 'Group')
+ namespaces.create!(id: 2, name: 'user', path: 'user')
+ namespaces.create!(id: 3, name: 'group2', path: 'group2', type: 'Group')
+
+ # Checking that no error is raised if the group_feature for a group already exists
+ namespaces.create!(id: 4, name: 'group3', path: 'group3', type: 'Group')
+ group_features.create!(id: 1, group_id: 4)
+ expect(group_features.count).to eq 1
+
+ expect { subject.perform(1, 4, :namespaces, :id, 10, 0, 4) }.to change { group_features.count }.by(2)
+
+ expect(group_features.count).to eq 3
+ expect(group_features.all.pluck(:group_id)).to contain_exactly(1, 3, 4)
+ end
+ end
+end
diff --git a/spec/lib/gitlab/ci/config/external/file/artifact_spec.rb b/spec/lib/gitlab/ci/config/external/file/artifact_spec.rb
index 8dd92c5b5fd..3678b46c8ff 100644
--- a/spec/lib/gitlab/ci/config/external/file/artifact_spec.rb
+++ b/spec/lib/gitlab/ci/config/external/file/artifact_spec.rb
@@ -29,14 +29,15 @@ RSpec.describe Gitlab::Ci::Config::External::File::Artifact do
end
describe '#valid?' do
- shared_examples 'is invalid' do
- it 'is not valid' do
- expect(external_file).not_to be_valid
- end
+ subject(:valid?) do
+ external_file.validate!
+ external_file.valid?
+ end
+ shared_examples 'is invalid' do
it 'sets the expected error' do
- expect(external_file.errors)
- .to contain_exactly(expected_error)
+ expect(valid?).to be_falsy
+ expect(external_file.errors).to contain_exactly(expected_error)
end
end
@@ -142,7 +143,7 @@ RSpec.describe Gitlab::Ci::Config::External::File::Artifact do
context 'when file is not empty' do
it 'is valid' do
- expect(external_file).to be_valid
+ expect(valid?).to be_truthy
expect(external_file.content).to be_present
end
@@ -154,6 +155,7 @@ RSpec.describe Gitlab::Ci::Config::External::File::Artifact do
user: anything
}
expect(context).to receive(:mutate).with(expected_attrs).and_call_original
+ external_file.validate!
external_file.content
end
end
diff --git a/spec/lib/gitlab/ci/config/external/file/base_spec.rb b/spec/lib/gitlab/ci/config/external/file/base_spec.rb
index 445edb253fd..a3a319313c4 100644
--- a/spec/lib/gitlab/ci/config/external/file/base_spec.rb
+++ b/spec/lib/gitlab/ci/config/external/file/base_spec.rb
@@ -16,7 +16,7 @@ RSpec.describe Gitlab::Ci::Config::External::File::Base do
end
end
- subject { test_class.new(location, context) }
+ subject(:file) { test_class.new(location, context) }
before do
allow_any_instance_of(test_class)
@@ -31,7 +31,7 @@ RSpec.describe Gitlab::Ci::Config::External::File::Base do
let(:location) { 'some-location' }
it 'returns true' do
- expect(subject).to be_matching
+ expect(file).to be_matching
end
end
@@ -39,40 +39,45 @@ RSpec.describe Gitlab::Ci::Config::External::File::Base do
let(:location) { nil }
it 'returns false' do
- expect(subject).not_to be_matching
+ expect(file).not_to be_matching
end
end
end
describe '#valid?' do
+ subject(:valid?) do
+ file.validate!
+ file.valid?
+ end
+
context 'when location is not a string' do
let(:location) { %w(some/file.txt other/file.txt) }
- it { is_expected.not_to be_valid }
+ it { is_expected.to be_falsy }
end
context 'when location is not a YAML file' do
let(:location) { 'some/file.txt' }
- it { is_expected.not_to be_valid }
+ it { is_expected.to be_falsy }
end
context 'when location has not a valid naming scheme' do
let(:location) { 'some/file/.yml' }
- it { is_expected.not_to be_valid }
+ it { is_expected.to be_falsy }
end
context 'when location is a valid .yml extension' do
let(:location) { 'some/file/config.yml' }
- it { is_expected.to be_valid }
+ it { is_expected.to be_truthy }
end
context 'when location is a valid .yaml extension' do
let(:location) { 'some/file/config.yaml' }
- it { is_expected.to be_valid }
+ it { is_expected.to be_truthy }
end
context 'when there are YAML syntax errors' do
@@ -84,8 +89,8 @@ RSpec.describe Gitlab::Ci::Config::External::File::Base do
end
it 'is not a valid file' do
- expect(subject).not_to be_valid
- expect(subject.error_message).to match /does not have valid YAML syntax/
+ expect(valid?).to be_falsy
+ expect(file.error_message).to match /does not have valid YAML syntax/
end
end
end
@@ -101,7 +106,7 @@ RSpec.describe Gitlab::Ci::Config::External::File::Base do
end
it 'does expand hash to include the template' do
- expect(subject.to_hash).to include(:before_script)
+ expect(file.to_hash).to include(:before_script)
end
end
end
diff --git a/spec/lib/gitlab/ci/config/external/file/local_spec.rb b/spec/lib/gitlab/ci/config/external/file/local_spec.rb
index dec3eebe7b1..a13e4410207 100644
--- a/spec/lib/gitlab/ci/config/external/file/local_spec.rb
+++ b/spec/lib/gitlab/ci/config/external/file/local_spec.rb
@@ -54,6 +54,11 @@ RSpec.describe Gitlab::Ci::Config::External::File::Local do
end
describe '#valid?' do
+ subject(:valid?) do
+ local_file.validate!
+ local_file.valid?
+ end
+
context 'when is a valid local path' do
let(:location) { '/lib/gitlab/ci/templates/existent-file.yml' }
@@ -61,25 +66,19 @@ RSpec.describe Gitlab::Ci::Config::External::File::Local do
allow_any_instance_of(described_class).to receive(:fetch_local_content).and_return("image: 'ruby2:2'")
end
- it 'returns true' do
- expect(local_file.valid?).to be_truthy
- end
+ it { is_expected.to be_truthy }
end
context 'when is not a valid local path' do
let(:location) { '/lib/gitlab/ci/templates/non-existent-file.yml' }
- it 'returns false' do
- expect(local_file.valid?).to be_falsy
- end
+ it { is_expected.to be_falsy }
end
context 'when is not a yaml file' do
let(:location) { '/config/application.rb' }
- it 'returns false' do
- expect(local_file.valid?).to be_falsy
- end
+ it { is_expected.to be_falsy }
end
context 'when the given sha is not valid' do
@@ -87,7 +86,7 @@ RSpec.describe Gitlab::Ci::Config::External::File::Local do
let(:sha) { ':' }
it 'returns false and adds an error message stating that included file does not exist' do
- expect(local_file).not_to be_valid
+ expect(valid?).to be_falsy
expect(local_file.errors).to include("Sha #{sha} is not valid!")
end
end
@@ -128,6 +127,10 @@ RSpec.describe Gitlab::Ci::Config::External::File::Local do
describe '#error_message' do
let(:location) { '/lib/gitlab/ci/templates/non-existent-file.yml' }
+ before do
+ local_file.validate!
+ end
+
it 'returns an error message' do
expect(local_file.error_message).to eq("Local file `#{location}` does not exist!")
end
@@ -162,6 +165,8 @@ RSpec.describe Gitlab::Ci::Config::External::File::Local do
allow(project.repository).to receive(:blob_data_at).with(sha, another_location)
.and_return(another_content)
+
+ local_file.validate!
end
it 'does expand hash to include the template' do
diff --git a/spec/lib/gitlab/ci/config/external/file/project_spec.rb b/spec/lib/gitlab/ci/config/external/file/project_spec.rb
index c53914c5772..96d67b65abe 100644
--- a/spec/lib/gitlab/ci/config/external/file/project_spec.rb
+++ b/spec/lib/gitlab/ci/config/external/file/project_spec.rb
@@ -65,6 +65,11 @@ RSpec.describe Gitlab::Ci::Config::External::File::Project do
end
describe '#valid?' do
+ subject(:valid?) do
+ project_file.validate!
+ project_file.valid?
+ end
+
context 'when a valid path is used' do
let(:params) do
{ project: project.full_path, file: '/file.yml' }
@@ -76,15 +81,13 @@ RSpec.describe Gitlab::Ci::Config::External::File::Project do
stub_project_blob(root_ref_sha, '/file.yml') { 'image: ruby:2.7' }
end
- it 'returns true' do
- expect(project_file).to be_valid
- end
+ it { is_expected.to be_truthy }
context 'when user does not have permission to access file' do
let(:context_user) { create(:user) }
it 'returns false' do
- expect(project_file).not_to be_valid
+ expect(valid?).to be_falsy
expect(project_file.error_message).to include("Project `#{project.full_path}` not found or access denied!")
end
end
@@ -101,9 +104,7 @@ RSpec.describe Gitlab::Ci::Config::External::File::Project do
stub_project_blob(ref_sha, '/file.yml') { 'image: ruby:2.7' }
end
- it 'returns true' do
- expect(project_file).to be_valid
- end
+ it { is_expected.to be_truthy }
end
context 'when an empty file is used' do
@@ -118,7 +119,7 @@ RSpec.describe Gitlab::Ci::Config::External::File::Project do
end
it 'returns false' do
- expect(project_file).not_to be_valid
+ expect(valid?).to be_falsy
expect(project_file.error_message).to include("Project `#{project.full_path}` file `/file.yml` is empty!")
end
end
@@ -129,7 +130,7 @@ RSpec.describe Gitlab::Ci::Config::External::File::Project do
end
it 'returns false' do
- expect(project_file).not_to be_valid
+ expect(valid?).to be_falsy
expect(project_file.error_message).to include("Project `#{project.full_path}` reference `I-Do-Not-Exist` does not exist!")
end
end
@@ -140,7 +141,7 @@ RSpec.describe Gitlab::Ci::Config::External::File::Project do
end
it 'returns false' do
- expect(project_file).not_to be_valid
+ expect(valid?).to be_falsy
expect(project_file.error_message).to include("Project `#{project.full_path}` file `/invalid-file.yml` does not exist!")
end
end
@@ -151,7 +152,7 @@ RSpec.describe Gitlab::Ci::Config::External::File::Project do
end
it 'returns false' do
- expect(project_file).not_to be_valid
+ expect(valid?).to be_falsy
expect(project_file.error_message).to include('Included file `/invalid-file` does not have YAML extension!')
end
end
diff --git a/spec/lib/gitlab/ci/config/external/file/remote_spec.rb b/spec/lib/gitlab/ci/config/external/file/remote_spec.rb
index ab60ac215ba..56113532787 100644
--- a/spec/lib/gitlab/ci/config/external/file/remote_spec.rb
+++ b/spec/lib/gitlab/ci/config/external/file/remote_spec.rb
@@ -53,22 +53,23 @@ RSpec.describe Gitlab::Ci::Config::External::File::Remote do
end
describe "#valid?" do
+ subject(:valid?) do
+ remote_file.validate!
+ remote_file.valid?
+ end
+
context 'when is a valid remote url' do
before do
stub_full_request(location).to_return(body: remote_file_content)
end
- it 'returns true' do
- expect(remote_file.valid?).to be_truthy
- end
+ it { is_expected.to be_truthy }
end
context 'with an irregular url' do
let(:location) { 'not-valid://gitlab.com/gitlab-org/gitlab-foss/blob/1234/.gitlab-ci-1.yml' }
- it 'returns false' do
- expect(remote_file.valid?).to be_falsy
- end
+ it { is_expected.to be_falsy }
end
context 'with a timeout' do
@@ -76,25 +77,19 @@ RSpec.describe Gitlab::Ci::Config::External::File::Remote do
allow(Gitlab::HTTP).to receive(:get).and_raise(Timeout::Error)
end
- it 'is falsy' do
- expect(remote_file.valid?).to be_falsy
- end
+ it { is_expected.to be_falsy }
end
context 'when is not a yaml file' do
let(:location) { 'https://asdasdasdaj48ggerexample.com' }
- it 'is falsy' do
- expect(remote_file.valid?).to be_falsy
- end
+ it { is_expected.to be_falsy }
end
context 'with an internal url' do
let(:location) { 'http://localhost:8080' }
- it 'is falsy' do
- expect(remote_file.valid?).to be_falsy
- end
+ it { is_expected.to be_falsy }
end
end
@@ -141,7 +136,10 @@ RSpec.describe Gitlab::Ci::Config::External::File::Remote do
end
describe "#error_message" do
- subject { remote_file.error_message }
+ subject(:error_message) do
+ remote_file.validate!
+ remote_file.error_message
+ end
context 'when remote file location is not valid' do
let(:location) { 'not-valid://gitlab.com/gitlab-org/gitlab-foss/blob/1234/.gitlab-ci-1.yml' }
diff --git a/spec/lib/gitlab/ci/config/external/file/template_spec.rb b/spec/lib/gitlab/ci/config/external/file/template_spec.rb
index 75b22c1516c..2bbaa46a8c4 100644
--- a/spec/lib/gitlab/ci/config/external/file/template_spec.rb
+++ b/spec/lib/gitlab/ci/config/external/file/template_spec.rb
@@ -45,19 +45,22 @@ RSpec.describe Gitlab::Ci::Config::External::File::Template do
end
describe "#valid?" do
+ subject(:valid?) do
+ template_file.validate!
+ template_file.valid?
+ end
+
context 'when is a valid template name' do
let(:template) { 'Auto-DevOps.gitlab-ci.yml' }
- it 'returns true' do
- expect(template_file).to be_valid
- end
+ it { is_expected.to be_truthy }
end
context 'with invalid template name' do
let(:template) { 'Template.yml' }
it 'returns false' do
- expect(template_file).not_to be_valid
+ expect(valid?).to be_falsy
expect(template_file.error_message).to include('Template file `Template.yml` is not a valid location!')
end
end
@@ -66,7 +69,7 @@ RSpec.describe Gitlab::Ci::Config::External::File::Template do
let(:template) { 'I-Do-Not-Have-This-Template.gitlab-ci.yml' }
it 'returns false' do
- expect(template_file).not_to be_valid
+ expect(valid?).to be_falsy
expect(template_file.error_message).to include('Included file `I-Do-Not-Have-This-Template.gitlab-ci.yml` is empty or does not exist!')
end
end