diff options
author | Rémy Coutable <remy@rymai.me> | 2016-09-28 12:45:46 +0200 |
---|---|---|
committer | Rémy Coutable <remy@rymai.me> | 2016-11-30 10:34:59 +0100 |
commit | fbbf177e3b604bebce3b10f8eea8920ff5606fca (patch) | |
tree | 0767679c9a58b642ebbd54499c0ad6f824610d18 /spec/tasks/gitlab/task_helpers_spec.rb | |
parent | 098066050d148deb024fdec6c36bfe9320c674bd (diff) | |
download | gitlab-ce-fbbf177e3b604bebce3b10f8eea8920ff5606fca.tar.gz |
New `gitlab:workhorse:install` rake task
Signed-off-by: Rémy Coutable <remy@rymai.me>
Diffstat (limited to 'spec/tasks/gitlab/task_helpers_spec.rb')
-rw-r--r-- | spec/tasks/gitlab/task_helpers_spec.rb | 87 |
1 files changed, 87 insertions, 0 deletions
diff --git a/spec/tasks/gitlab/task_helpers_spec.rb b/spec/tasks/gitlab/task_helpers_spec.rb new file mode 100644 index 00000000000..2a2d4a39ba8 --- /dev/null +++ b/spec/tasks/gitlab/task_helpers_spec.rb @@ -0,0 +1,87 @@ +require 'spec_helper' +require 'rake' + +describe 'gitlab:workhorse namespace rake task' do + before :all do + Rake.application.rake_require 'tasks/gitlab/task_helpers' + + # empty task as env is already loaded + Rake::Task.define_task :environment + end + + describe '#checkout_or_clone_tag' do + let(:repo) { 'https://gitlab.com/gitlab-org/gitlab-test.git' } + let(:clone_path) { Rails.root.join('tmp/tests/task_helpers_tests').to_s } + let(:tag) { 'v1.1.0' } + before do + FileUtils.rm_rf(clone_path) + allow_any_instance_of(Object).to receive(:run_command) + expect_any_instance_of(Object).to receive(:reset_to_tag).with(tag) + end + + after do + FileUtils.rm_rf(clone_path) + end + + context 'target_dir does not exist' do + it 'clones the repo, retrieve the tag from origin, and checkout the tag' do + expect(Dir).to receive(:chdir).and_call_original + expect_any_instance_of(Object). + to receive(:run_command).with(%W[#{Gitlab.config.git.bin_path} clone -- #{repo} #{clone_path}]) { FileUtils.mkdir_p(clone_path) } # Fake the cloning + + checkout_or_clone_tag(tag: tag, repo: repo, target_dir: clone_path) + end + end + + context 'target_dir exists' do + before do + FileUtils.mkdir_p(clone_path) + end + + it 'fetch and checkout the tag' do + expect(Dir).to receive(:chdir).twice.and_call_original + expect_any_instance_of(Object). + to receive(:run_command).with(%W[#{Gitlab.config.git.bin_path} fetch --tags --quiet]) + expect_any_instance_of(Object). + to receive(:run_command).with(%W[#{Gitlab.config.git.bin_path} checkout --quiet #{tag}]) + + checkout_or_clone_tag(tag: tag, repo: repo, target_dir: clone_path) + end + end + end + + describe '#reset_to_tag' do + let(:tag) { 'v1.1.0' } + before do + expect_any_instance_of(Object). + to receive(:run_command).with(%W[#{Gitlab.config.git.bin_path} reset --hard #{tag}]) + end + + context 'when the tag is not checked out locally' do + before do + expect(Gitlab::Popen). + to receive(:popen).with(%W[#{Gitlab.config.git.bin_path} describe -- #{tag}]).and_return(['', 42]) + end + + it 'fetch origin, ensure the tag exists, and resets --hard to the given tag' do + expect_any_instance_of(Object). + to receive(:run_command).with(%W[#{Gitlab.config.git.bin_path} fetch origin]) + expect_any_instance_of(Object). + to receive(:run_command).with(%W[#{Gitlab.config.git.bin_path} describe -- origin/#{tag}]).and_return(tag) + + reset_to_tag(tag) + end + end + + context 'when the tag is checked out locally' do + before do + expect(Gitlab::Popen). + to receive(:popen).with(%W[#{Gitlab.config.git.bin_path} describe -- #{tag}]).and_return([tag, 0]) + end + + it 'resets --hard to the given tag' do + reset_to_tag(tag) + end + end + end +end |