@@ -130,7 +130,7 @@ def _mock_docker(**kwargs):
130130
131131 runner = CliRunner ()
132132 with patch .dict (
133- "sys.modules" , docker = docker_mock
133+ "sys.modules" , ** { " docker" : docker_mock , "docker.errors" : MagicMock ()}
134134 ), tempfile .TemporaryDirectory () as tmp_dir , patch (
135135 "data_pipelines_cli.cli_commands.compile.BUILD_DIR" , pathlib .Path (tmp_dir )
136136 ), patch (
@@ -146,6 +146,40 @@ def _mock_docker(**kwargs):
146146 self .assertEqual (0 , result .exit_code , msg = result .exception )
147147 self .assertEqual ("my_docker_repository_uri:aaa9876aaa" , docker_tag )
148148
149+ @patch ("pathlib.Path.cwd" , lambda : goldens_dir_path )
150+ @patch ("data_pipelines_cli.data_structures.git_revision_hash" )
151+ def test_docker_throw_build_error (self , mock_git_revision_hash ):
152+ commit_sha = "aaa9876aaa"
153+ mock_git_revision_hash .return_value = commit_sha
154+
155+ class MockException (Exception ):
156+ msg = "some error message"
157+ build_log = ["more" , "errors" ]
158+
159+ docker_errors_mock = MagicMock (BuildError = MockException )
160+ docker_images_mock = MagicMock (build = MagicMock (side_effect = MockException ))
161+ docker_client_mock = MagicMock (images = docker_images_mock )
162+ docker_mock = MagicMock (from_env = lambda : docker_client_mock , errors = docker_errors_mock )
163+
164+ with patch .dict (
165+ "sys.modules" , ** {"docker" : docker_mock , "docker.errors" : docker_errors_mock }
166+ ), tempfile .TemporaryDirectory () as tmp_dir , patch (
167+ "data_pipelines_cli.cli_commands.compile.BUILD_DIR" , pathlib .Path (tmp_dir )
168+ ), patch (
169+ "data_pipelines_cli.cli_constants.BUILD_DIR" , pathlib .Path (tmp_dir )
170+ ), patch (
171+ "data_pipelines_cli.config_generation.BUILD_DIR" , pathlib .Path (tmp_dir )
172+ ), patch (
173+ "data_pipelines_cli.dbt_utils.BUILD_DIR" , pathlib .Path (tmp_dir )
174+ ), patch (
175+ "data_pipelines_cli.dbt_utils.subprocess_run" , self ._mock_run
176+ ):
177+ with self .assertRaises (DataPipelinesError ):
178+ try :
179+ compile_project ("base" , True )
180+ except MockException :
181+ self .fail ()
182+
149183 @patch ("pathlib.Path.cwd" , lambda : goldens_dir_path )
150184 @patch ("data_pipelines_cli.data_structures.git_revision_hash" )
151185 def test_docker_throw_on_error (self , mock_git_revision_hash ):
@@ -159,15 +193,23 @@ def _mock_docker(**_kwargs):
159193 '"error":"An image cannot be built."}' ,
160194 ]
161195
196+ class MockException (Exception ):
197+ pass
198+
199+ docker_errors_mock = MagicMock ()
200+ docker_errors_mock .BuildError = MockException
201+
162202 docker_images_mock = MagicMock ()
163203 docker_images_mock .configure_mock (** {"build" : _mock_docker })
164204 docker_client_mock = MagicMock ()
165205 docker_client_mock .configure_mock (** {"images" : docker_images_mock })
166206 docker_mock = MagicMock ()
167- docker_mock .configure_mock (** {"from_env" : lambda : docker_client_mock })
207+ docker_mock .configure_mock (
208+ ** {"from_env" : lambda : docker_client_mock , "errors" : docker_errors_mock }
209+ )
168210
169211 with patch .dict (
170- "sys.modules" , docker = docker_mock
212+ "sys.modules" , ** { " docker" : docker_mock , "docker.errors" : docker_errors_mock }
171213 ), tempfile .TemporaryDirectory () as tmp_dir , patch (
172214 "data_pipelines_cli.cli_commands.compile.BUILD_DIR" , pathlib .Path (tmp_dir )
173215 ), patch (
0 commit comments