spec/kontena/cli/app/docker_helper_spec.rb in kontena-cli-0.12.3 vs spec/kontena/cli/app/docker_helper_spec.rb in kontena-cli-0.13.0

- old
+ new

@@ -5,10 +5,49 @@ let(:subject) do Class.new { include Kontena::Cli::Apps::DockerHelper}.new end + let(:services_with_valid_hooks) do + { + 'test_service' => { + 'build' => '.', + 'image' => 'test_service', + 'hooks' => { + 'pre_build' => [ + { 'cmd' => "echo PREBUILD1", 'name' => 'hook1' }, + { 'cmd' => "echo PREBUILD2", 'name' => 'hook2' } + ] + } + } + } + end + + let(:services_with_invalid_hook) do + { + 'test_service' => { + 'build' => '.', + 'image' => 'test_service', + 'hooks' => { + 'pre_build' => [ + { 'cmd' => "echo PREBUILD1", 'name' => 'hook1' }, + { 'cmd' => "some_non_existing_command", 'name' => 'failing hook' }, + ] + } + } + } + end + + let(:services_with_no_hook) do + { + 'test_service' => { + 'build' => '.', + 'image' => 'test_service', + } + } + end + describe '#validate_image_name' do context 'when image name is valid' do it 'returns true' do expect(subject.validate_image_name('registry.kontena.local/image-name:latest')).to be_truthy expect(subject.validate_image_name('my-registry.com/organization/image_name:latest')).to be_truthy @@ -27,6 +66,41 @@ expect(subject.validate_image_name('mysql 5.1')).to be_falsey expect(subject.validate_image_name('*.mydomain.com/mysql')).to be_falsey end end end + + describe '#run_pre_build_hook' do + + context 'when hook defined' do + it 'runs the hook' do + allow(subject).to receive(:build_docker_image) + allow(subject).to receive(:push_docker_image) + expect(subject).to receive(:system).with("echo PREBUILD1"). and_return(true) + expect(subject).to receive(:system).with("echo PREBUILD2"). and_return(true) + + subject.process_docker_images(services_with_valid_hooks) + end + + it 'fails to run the hook' do + allow(subject).to receive(:build_docker_image) + allow(subject).to receive(:push_docker_image) + expect(subject).to receive(:system).with("echo PREBUILD1"). and_return(true) + expect(subject).to receive(:system).with("some_non_existing_command"). and_return(false) + + expect { + subject.process_docker_images(services_with_invalid_hook) + }.to raise_error(SystemExit) + end + end + context 'when no hook defined' do + it 'runs no hooks' do + allow(subject).to receive(:build_docker_image) + allow(subject).to receive(:push_docker_image) + expect(subject).not_to receive(:run_pre_build_hook) + + subject.process_docker_images(services_with_no_hook) + end + end + end + end