Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 9 additions & 1 deletion aws_lambda_builders/workflows/nodejs_npm_esbuild/workflow.py
Original file line number Diff line number Diff line change
Expand Up @@ -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.")
Expand Down
38 changes: 32 additions & 6 deletions tests/unit/workflows/nodejs_npm_esbuild/test_workflow.py
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down Expand Up @@ -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")
Expand All @@ -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")
Expand Down Expand Up @@ -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)