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