From 2474bc08eda9b736e360572cf62d4efc0fa9ac20 Mon Sep 17 00:00:00 2001 From: Lucas <12496191+lucashuy@users.noreply.github.com> Date: Wed, 27 Sep 2023 13:25:24 -0700 Subject: [PATCH 1/3] Change esbuild binary fetching to look at build_dir since this already considers build in source/not build in source --- aws_lambda_builders/workflows/nodejs_npm_esbuild/workflow.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/aws_lambda_builders/workflows/nodejs_npm_esbuild/workflow.py b/aws_lambda_builders/workflows/nodejs_npm_esbuild/workflow.py index fdb07ce54..2faaf4f9a 100644 --- a/aws_lambda_builders/workflows/nodejs_npm_esbuild/workflow.py +++ b/aws_lambda_builders/workflows/nodejs_npm_esbuild/workflow.py @@ -178,7 +178,7 @@ def get_resolvers(self): def _get_esbuild_subprocess(self) -> SubprocessEsbuild: 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.") From 31eafba209c04639a52d6299fb2a506bf66660be Mon Sep 17 00:00:00 2001 From: Lucas <12496191+lucashuy@users.noreply.github.com> Date: Tue, 3 Oct 2023 15:58:39 -0700 Subject: [PATCH 2/3] Added unit test --- .../workflows/nodejs_npm_esbuild/workflow.py | 8 ++++++ .../nodejs_npm_esbuild/test_workflow.py | 25 +++++++++++++++++++ 2 files changed, 33 insertions(+) diff --git a/aws_lambda_builders/workflows/nodejs_npm_esbuild/workflow.py b/aws_lambda_builders/workflows/nodejs_npm_esbuild/workflow.py index a27cb3949..1ea3e898c 100644 --- a/aws_lambda_builders/workflows/nodejs_npm_esbuild/workflow.py +++ b/aws_lambda_builders/workflows/nodejs_npm_esbuild/workflow.py @@ -183,6 +183,14 @@ 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.build_dir) npm_bin_path = str(Path(npm_bin_path_root, ".bin")) diff --git a/tests/unit/workflows/nodejs_npm_esbuild/test_workflow.py b/tests/unit/workflows/nodejs_npm_esbuild/test_workflow.py index d528072c4..755d3a10e 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, @@ -440,3 +441,27 @@ 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") + def test_finds_correct_esbuild_binary( + self, is_building_in_source, expected_dir, 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) From adf6ae363b7c8de3489e3b9f1beb820515955512 Mon Sep 17 00:00:00 2001 From: Lucas <12496191+lucashuy@users.noreply.github.com> Date: Tue, 3 Oct 2023 16:10:46 -0700 Subject: [PATCH 3/3] Mock out Path and update old assert calls --- .../workflows/nodejs_npm_esbuild/test_workflow.py | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/tests/unit/workflows/nodejs_npm_esbuild/test_workflow.py b/tests/unit/workflows/nodejs_npm_esbuild/test_workflow.py index 755d3a10e..a851e7bc1 100644 --- a/tests/unit/workflows/nodejs_npm_esbuild/test_workflow.py +++ b/tests/unit/workflows/nodejs_npm_esbuild/test_workflow.py @@ -380,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") @@ -406,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") @@ -450,8 +450,9 @@ def test_workflow_revert_build_in_source(self, install_action_mock, install_link ) @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, subprocess_run_mock, install_links_mock + self, is_building_in_source, expected_dir, path_mock, subprocess_run_mock, install_links_mock ): install_links_mock.return_value = True