diff --git a/aws_lambda_builders/actions.py b/aws_lambda_builders/actions.py index d9025a537..489e0b722 100644 --- a/aws_lambda_builders/actions.py +++ b/aws_lambda_builders/actions.py @@ -136,7 +136,7 @@ def execute(self): if os.path.isdir(dependencies_source): copytree(dependencies_source, new_destination) else: - os.makedirs(os.path.dirname(dependencies_source), exist_ok=True) + os.makedirs(os.path.dirname(new_destination), exist_ok=True) shutil.copy2(dependencies_source, new_destination) @@ -162,6 +162,10 @@ def execute(self): dependencies_source = os.path.join(self.artifact_dir, name) new_destination = os.path.join(self.dest_dir, name) + # shutil.move can't create subfolders if this is the first file in that folder + if os.path.isfile(dependencies_source): + os.makedirs(os.path.dirname(new_destination), exist_ok=True) + shutil.move(dependencies_source, new_destination) diff --git a/tests/integration/test_actions.py b/tests/integration/test_actions.py new file mode 100644 index 000000000..4e4f93a31 --- /dev/null +++ b/tests/integration/test_actions.py @@ -0,0 +1,59 @@ +import os +from pathlib import Path +import tempfile +from unittest import TestCase +from parameterized import parameterized + + +from aws_lambda_builders.actions import CopyDependenciesAction, MoveDependenciesAction +from aws_lambda_builders.utils import copytree + + +class TestCopyDependenciesAction(TestCase): + @parameterized.expand( + [ + ("single_file",), + ("multiple_files",), + ("empty_subfolders",), + ] + ) + def test_copy_dependencies_action(self, source_folder): + curr_dir = Path(__file__).resolve().parent + test_folder = os.path.join(curr_dir, "testdata", source_folder) + with tempfile.TemporaryDirectory() as tmpdir: + empty_source = os.path.join(tmpdir, "empty_source") + target = os.path.join(tmpdir, "target") + + os.mkdir(empty_source) + + copy_dependencies_action = CopyDependenciesAction(empty_source, test_folder, target) + copy_dependencies_action.execute() + + self.assertEqual(os.listdir(test_folder), os.listdir(target)) + + +class TestMoveDependenciesAction(TestCase): + @parameterized.expand( + [ + ("single_file",), + ("multiple_files",), + ("empty_subfolders",), + ] + ) + def test_move_dependencies_action(self, source_folder): + curr_dir = Path(__file__).resolve().parent + test_folder = os.path.join(curr_dir, "testdata", source_folder) + with tempfile.TemporaryDirectory() as tmpdir: + test_source = os.path.join(tmpdir, "test_source") + empty_source = os.path.join(tmpdir, "empty_source") + target = os.path.join(tmpdir, "target") + + os.mkdir(test_source) + os.mkdir(empty_source) + + copytree(test_folder, test_source) + + move_dependencies_action = MoveDependenciesAction(empty_source, test_source, target) + move_dependencies_action.execute() + + self.assertEqual(os.listdir(test_folder), os.listdir(target)) diff --git a/tests/integration/testdata/empty_subfolders/sub_folder/sub_folder/test_file.txt b/tests/integration/testdata/empty_subfolders/sub_folder/sub_folder/test_file.txt new file mode 100644 index 000000000..e69de29bb diff --git a/tests/integration/testdata/multiple_files/sub_folder/test_file3.txt b/tests/integration/testdata/multiple_files/sub_folder/test_file3.txt new file mode 100644 index 000000000..e69de29bb diff --git a/tests/integration/testdata/multiple_files/test_file.txt b/tests/integration/testdata/multiple_files/test_file.txt new file mode 100644 index 000000000..e69de29bb diff --git a/tests/integration/testdata/multiple_files/test_file2.txt b/tests/integration/testdata/multiple_files/test_file2.txt new file mode 100644 index 000000000..e69de29bb diff --git a/tests/integration/testdata/single_file/test_file.txt b/tests/integration/testdata/single_file/test_file.txt new file mode 100644 index 000000000..e69de29bb