From b193e8497444a19e4ea541f73f82eb7e21aa8879 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9my=20Coutable?= Date: Tue, 29 Nov 2016 19:21:25 +0100 Subject: Move task helpers to a module MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Rémy Coutable --- spec/tasks/gitlab/backup_rake_spec.rb | 2 +- .../gitlab/mail_google_schema_whitelisting.rb | 2 +- spec/tasks/gitlab/task_helpers_spec.rb | 89 ++++++++++++---------- spec/tasks/gitlab/users_rake_spec.rb | 2 +- spec/tasks/gitlab/workhorse_rake_spec.rb | 16 +--- 5 files changed, 55 insertions(+), 56 deletions(-) (limited to 'spec/tasks') diff --git a/spec/tasks/gitlab/backup_rake_spec.rb b/spec/tasks/gitlab/backup_rake_spec.rb index 287d83344db..ecbfc236d3d 100644 --- a/spec/tasks/gitlab/backup_rake_spec.rb +++ b/spec/tasks/gitlab/backup_rake_spec.rb @@ -5,7 +5,7 @@ describe 'gitlab:app namespace rake task' do let(:enable_registry) { true } before :all do - Rake.application.rake_require 'tasks/gitlab/task_helpers' + Rake.application.rake_require 'tasks/gitlab/helpers' Rake.application.rake_require 'tasks/gitlab/backup' Rake.application.rake_require 'tasks/gitlab/shell' Rake.application.rake_require 'tasks/gitlab/db' diff --git a/spec/tasks/gitlab/mail_google_schema_whitelisting.rb b/spec/tasks/gitlab/mail_google_schema_whitelisting.rb index 37feb5e6faf..80fc8c48fed 100644 --- a/spec/tasks/gitlab/mail_google_schema_whitelisting.rb +++ b/spec/tasks/gitlab/mail_google_schema_whitelisting.rb @@ -3,7 +3,7 @@ require 'rake' describe 'gitlab:mail_google_schema_whitelisting rake task' do before :all do - Rake.application.rake_require "tasks/gitlab/task_helpers" + Rake.application.rake_require "tasks/gitlab/helpers" Rake.application.rake_require "tasks/gitlab/mail_google_schema_whitelisting" # empty task as env is already loaded Rake::Task.define_task :environment 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 diff --git a/spec/tasks/gitlab/users_rake_spec.rb b/spec/tasks/gitlab/users_rake_spec.rb index e6ebef82b78..972670e7f91 100644 --- a/spec/tasks/gitlab/users_rake_spec.rb +++ b/spec/tasks/gitlab/users_rake_spec.rb @@ -5,7 +5,7 @@ describe 'gitlab:users namespace rake task' do let(:enable_registry) { true } before :all do - Rake.application.rake_require 'tasks/gitlab/task_helpers' + Rake.application.rake_require 'tasks/gitlab/helpers' Rake.application.rake_require 'tasks/gitlab/users' # empty task as env is already loaded diff --git a/spec/tasks/gitlab/workhorse_rake_spec.rb b/spec/tasks/gitlab/workhorse_rake_spec.rb index 87bc1b128bf..b695abce091 100644 --- a/spec/tasks/gitlab/workhorse_rake_spec.rb +++ b/spec/tasks/gitlab/workhorse_rake_spec.rb @@ -1,18 +1,8 @@ -require 'spec_helper' -require 'rake' +require 'rake_helper' describe 'gitlab:workhorse namespace rake task' do before :all do - Rake.application.rake_require 'tasks/gitlab/task_helpers' Rake.application.rake_require 'tasks/gitlab/workhorse' - - # empty task as env is already loaded - Rake::Task.define_task :environment - end - - def run_rake_task(task_name, *args) - Rake::Task[task_name].reenable - Rake.application.invoke_task("#{task_name}[#{args.join(',')}]") end describe 'install' do @@ -20,13 +10,13 @@ describe 'gitlab:workhorse namespace rake task' do let(:clone_path) { Rails.root.join('tmp/tests/gitlab-workhorse').to_s } let(:tag) { "v#{File.read(Rails.root.join(Gitlab::Workhorse::VERSION_FILE)).chomp}" } before do - # avoid writing task output to spec progress - allow($stdout).to receive :write allow(ENV).to receive(:[]) end context 'no dir given' do it 'aborts and display a help message' do + # avoid writing task output to spec progress + allow($stderr).to receive :write expect { run_rake_task('gitlab:workhorse:install') }.to raise_error /Please specify the directory where you want to install gitlab-workhorse/ end end -- cgit v1.2.1