summaryrefslogtreecommitdiff
path: root/spec/tasks/gitlab/task_helpers_spec.rb
diff options
context:
space:
mode:
authorRémy Coutable <remy@rymai.me>2016-11-29 19:21:25 +0100
committerRémy Coutable <remy@rymai.me>2016-11-30 12:20:21 +0100
commitb193e8497444a19e4ea541f73f82eb7e21aa8879 (patch)
tree4009e3426dc331e586584314eafc3d6543a92dfa /spec/tasks/gitlab/task_helpers_spec.rb
parenta9c250eaddf758f99ac8c868dc86f4df0cc157f4 (diff)
downloadgitlab-ce-b193e8497444a19e4ea541f73f82eb7e21aa8879.tar.gz
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.rb89
1 files changed, 49 insertions, 40 deletions
diff --git a/spec/tasks/gitlab/task_helpers_spec.rb b/spec/tasks/gitlab/task_helpers_spec.rb
index dccb3b4cf9a..86e42d845ce 100644
--- a/spec/tasks/gitlab/task_helpers_spec.rb
+++ b/spec/tasks/gitlab/task_helpers_spec.rb
@@ -1,86 +1,95 @@
require 'spec_helper'
-require 'rake'
+require 'tasks/gitlab/task_helpers'
-describe 'gitlab:workhorse namespace rake task' do
- before :all do
- Rake.application.rake_require 'tasks/gitlab/task_helpers'
+class TestHelpersTest
+ include Gitlab::TaskHelpers
+end
- # empty task as env is already loaded
- Rake::Task.define_task :environment
- end
+describe Gitlab::TaskHelpers do
+ subject { TestHelpersTest.new }
+
+ 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' }
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)
+ allow(subject).to receive(:run_command!)
+ expect(subject).to receive(:reset_to_tag).with(tag, 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
+ expect(subject).to receive(:clone_repo).with(repo, clone_path)
- checkout_or_clone_tag(tag: tag, repo: repo, target_dir: clone_path)
+ subject.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)
+ expect(Dir).to receive(:exist?).and_return(true)
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}])
+ expect(subject).to receive(:checkout_tag).with(tag, clone_path)
- checkout_or_clone_tag(tag: tag, repo: repo, target_dir: clone_path)
+ subject.checkout_or_clone_tag(tag: tag, repo: repo, target_dir: clone_path)
end
end
end
+ describe '#clone_repo' do
+ it 'clones the repo in the target dir' do
+ expect(subject).
+ to receive(:run_command!).with(%W[#{Gitlab.config.git.bin_path} clone -- #{repo} #{clone_path}])
+
+ subject.clone_repo(repo, clone_path)
+ end
+ end
+
+ describe '#checkout_tag' do
+ it 'clones the repo in the target dir' do
+ expect(subject).
+ to receive(:run_command!).with(%W[#{Gitlab.config.git.bin_path} -C #{clone_path} fetch --tags --quiet])
+ expect(subject).
+ to receive(:run_command!).with(%W[#{Gitlab.config.git.bin_path} -C #{clone_path} checkout --quiet #{tag}])
+
+ subject.checkout_tag(tag, clone_path)
+ 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}])
+ expect(subject).
+ to receive(:run_command!).with(%W[#{Gitlab.config.git.bin_path} -C #{clone_path} reset --hard #{tag}])
end
context 'when the tag is not checked out locally' do
before do
- expect_any_instance_of(Object).
- to receive(:run_command!).with(%W[#{Gitlab.config.git.bin_path} describe -- #{tag}]).and_raise(Gitlab::TaskFailedError)
+ expect(subject).
+ to receive(:run_command!).with(%W[#{Gitlab.config.git.bin_path} -C #{clone_path} describe -- #{tag}]).and_raise(Gitlab::TaskFailedError)
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)
+ expect(subject).
+ to receive(:run_command!).with(%W[#{Gitlab.config.git.bin_path} -C #{clone_path} fetch origin])
+ expect(subject).
+ to receive(:run_command!).with(%W[#{Gitlab.config.git.bin_path} -C #{clone_path} describe -- origin/#{tag}]).and_return(tag)
- reset_to_tag(tag)
+ subject.reset_to_tag(tag, clone_path)
end
end
context 'when the tag is checked out locally' do
before do
- expect_any_instance_of(Object).
- to receive(:run_command!).with(%W[#{Gitlab.config.git.bin_path} describe -- #{tag}]).and_return(tag)
+ expect(subject).
+ to receive(:run_command!).with(%W[#{Gitlab.config.git.bin_path} -C #{clone_path} describe -- #{tag}]).and_return(tag)
end
it 'resets --hard to the given tag' do
- reset_to_tag(tag)
+ subject.reset_to_tag(tag, clone_path)
end
end
end