diff --git a/aws_lambda_builders/workflows/nodejs_npm_esbuild/workflow.py b/aws_lambda_builders/workflows/nodejs_npm_esbuild/workflow.py index 478b5dfc4..1ea3e898c 100644 --- a/aws_lambda_builders/workflows/nodejs_npm_esbuild/workflow.py +++ b/aws_lambda_builders/workflows/nodejs_npm_esbuild/workflow.py @@ -183,8 +183,16 @@ def get_resolvers(self): return [PathResolver(runtime=self.runtime, binary="npm")] def _get_esbuild_subprocess(self) -> SubprocessEsbuild: + """ + Creates a subprocess object that is able to invoke the esbuild executable. + + Returns + ------- + SubprocessEsbuild + An esbuild specific subprocess object + """ try: - npm_bin_path_root = self.subprocess_npm.run(["root"], cwd=self.scratch_dir) + npm_bin_path_root = self.subprocess_npm.run(["root"], cwd=self.build_dir) npm_bin_path = str(Path(npm_bin_path_root, ".bin")) except FileNotFoundError: raise EsbuildExecutionError(message="The esbuild workflow couldn't find npm installed on your system.") diff --git a/tests/unit/workflows/nodejs_npm_esbuild/test_workflow.py b/tests/unit/workflows/nodejs_npm_esbuild/test_workflow.py index d528072c4..a851e7bc1 100644 --- a/tests/unit/workflows/nodejs_npm_esbuild/test_workflow.py +++ b/tests/unit/workflows/nodejs_npm_esbuild/test_workflow.py @@ -3,6 +3,7 @@ from unittest import TestCase from unittest.mock import ANY, patch, call +from parameterized import parameterized from aws_lambda_builders.actions import ( CopySourceAction, CleanUpAction, @@ -379,10 +380,10 @@ def test_workflow_sets_up_npm_actions_with_download_dependencies_without_depende self.assertIsInstance(workflow.actions[0], CopySourceAction) self.assertIsInstance(workflow.actions[1], CopySourceAction) - self.assertEquals(workflow.actions[1].source_dir, "not_source") - self.assertEquals(workflow.actions[1].dest_dir, "scratch_dir") + self.assertEqual(workflow.actions[1].source_dir, "not_source") + self.assertEqual(workflow.actions[1].dest_dir, "scratch_dir") self.assertIsInstance(workflow.actions[2], NodejsNpmInstallAction) - self.assertEquals(workflow.actions[2].install_dir, "scratch_dir") + self.assertEqual(workflow.actions[2].install_dir, "scratch_dir") self.assertIsInstance(workflow.actions[3], EsbuildBundleAction) @patch("aws_lambda_builders.workflows.nodejs_npm.workflow.NodejsNpmWorkflow.can_use_install_links") @@ -405,10 +406,10 @@ def test_workflow_sets_up_npm_actions_with_download_dependencies_without_depende self.assertEqual(len(workflow.actions), 3) self.assertIsInstance(workflow.actions[0], NodejsNpmInstallAction) - self.assertEquals(workflow.actions[0].install_dir, "not_source") + self.assertEqual(workflow.actions[0].install_dir, "not_source") self.assertIsInstance(workflow.actions[1], LinkSinglePathAction) - self.assertEquals(workflow.actions[1]._source, os.path.join("not_source", "node_modules")) - self.assertEquals(workflow.actions[1]._dest, os.path.join("source", "node_modules")) + self.assertEqual(workflow.actions[1]._source, os.path.join("not_source", "node_modules")) + self.assertEqual(workflow.actions[1]._dest, os.path.join("source", "node_modules")) self.assertIsInstance(workflow.actions[2], EsbuildBundleAction) @patch("aws_lambda_builders.workflows.nodejs_npm.workflow.NodejsNpmWorkflow.can_use_install_links") @@ -440,3 +441,28 @@ def test_workflow_revert_build_in_source(self, install_action_mock, install_link build_options=ANY, install_links=False, ) + + @parameterized.expand( + [ + (True, "source"), + (False, "scratch_dir"), + ] + ) + @patch("aws_lambda_builders.workflows.nodejs_npm.workflow.NodejsNpmWorkflow.can_use_install_links") + @patch("aws_lambda_builders.workflows.nodejs_npm_esbuild.workflow.SubprocessNpm.run") + @patch("aws_lambda_builders.workflows.nodejs_npm_esbuild.workflow.Path") + def test_finds_correct_esbuild_binary( + self, is_building_in_source, expected_dir, path_mock, subprocess_run_mock, install_links_mock + ): + install_links_mock.return_value = True + + NodejsNpmEsbuildWorkflow( + source_dir="source", + artifacts_dir="artifacts", + scratch_dir="scratch_dir", + manifest_path="source/manifest", + osutils=self.osutils, + build_in_source=is_building_in_source, + ) + + subprocess_run_mock.assert_called_with(ANY, cwd=expected_dir)