diff --git a/habushu-maven-plugin/src/test/java/org/technologybrewery/habushu/ContainerizeDependenciesMojoTestCase.java b/habushu-maven-plugin/src/test/java/org/technologybrewery/habushu/ContainerizeDependenciesMojoTestCase.java
new file mode 100644
index 0000000..2e01a71
--- /dev/null
+++ b/habushu-maven-plugin/src/test/java/org/technologybrewery/habushu/ContainerizeDependenciesMojoTestCase.java
@@ -0,0 +1,147 @@
+package org.technologybrewery.habushu;
+
+import org.apache.maven.DefaultMaven;
+import org.apache.maven.Maven;
+import org.apache.maven.execution.*;
+import org.apache.maven.plugin.Mojo;
+import org.apache.maven.plugin.testing.AbstractMojoTestCase;
+import org.apache.maven.project.MavenProject;
+import org.apache.maven.project.ProjectBuilder;
+import org.apache.maven.project.ProjectBuildingRequest;
+import org.apache.maven.session.scope.internal.SessionScope;
+import org.eclipse.aether.DefaultRepositorySystemSession;
+import org.eclipse.aether.internal.impl.SimpleLocalRepositoryManagerFactory;
+import org.eclipse.aether.repository.LocalRepository;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Wraps the default behavior provided by the Maven plugin testing harness through {@link AbstractMojoTestCase} to
+ * set standard Maven defaults on any {@link Mojo}s that are created and reduce the amount of mock stubs required.
+ *
+ * This class is largely adapted from the testing approach developed by the license-audit-maven-plugin's
+ * {@code BetterAbstractMojoTestCase} (https://github.com/ahgittin/license-audit-maven-plugin)
+ */
+public class ContainerizeDependenciesMojoTestCase extends AbstractMojoTestCase {
+
+ private static final Logger logger = LoggerFactory.getLogger(ContainerizeDependenciesMojoTestCase.class);
+
+ private List mavenProjectFiles = new ArrayList<>();
+
+ public void configurePluginTestHarness() throws Exception {
+ super.setUp();
+ }
+
+ public void tearDownPluginTestHarness() throws Exception {
+ super.tearDown();
+ }
+
+ /**
+ * Creates a new {@link MavenSession} with default configurations relevant for testing the plugin.
+ *
+ * @return MavenSession
+ */
+ public MavenSession newDefaultMavenSession() {
+ try {
+ MavenExecutionRequest request = new DefaultMavenExecutionRequest();
+ MavenExecutionResult result = new DefaultMavenExecutionResult();
+
+ // Populates sensible defaults, including repository basedir and remote repos
+ MavenExecutionRequestPopulator populator = getContainer().lookup(MavenExecutionRequestPopulator.class);
+ populator.populateDefaults(request);
+
+ // Enables the usage of Java system properties for interpolation and profile activation
+ request.setSystemProperties(System.getProperties());
+
+ request.setMakeBehavior(MavenExecutionRequest.REACTOR_MAKE_UPSTREAM);
+
+ // Ensures that the repo session in the maven session has a repo manager and points to the local repo
+ DefaultMaven maven = (DefaultMaven) getContainer().lookup(Maven.class);
+ DefaultRepositorySystemSession repoSession =
+ (DefaultRepositorySystemSession) maven.newRepositorySession(request);
+ repoSession.setLocalRepositoryManager(
+ new SimpleLocalRepositoryManagerFactory().newInstance(
+ repoSession,
+ new LocalRepository(request.getLocalRepository().getBasedir())
+ )
+ );
+
+ // instantiate and seed the session, so it can be injected during initialization
+ @SuppressWarnings("deprecation")
+ MavenSession session = new MavenSession(getContainer(), repoSession, request, result);
+ SessionScope sessionScope = getContainer().lookup(SessionScope.class);
+ sessionScope.enter();
+ sessionScope.seed(MavenSession.class, session);
+
+ return session;
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ /**
+ * Overrides super's {@link #newMavenSession(MavenProject)} to delegate to
+ * the new {@link #newDefaultMavenSession()} introduced in {@link ContainerizeDependenciesMojoTestCase},
+ * which sets the defaults that are normally expected by Maven.
+ */
+ @Override
+ protected MavenSession newMavenSession(MavenProject project) {
+ MavenSession session = newDefaultMavenSession();
+ ArrayList mavenProjects = new ArrayList<>();
+
+ try {
+ ProjectBuilder projectBuilder = lookup(ProjectBuilder.class);
+
+ for(File mavenProjectFile: this.mavenProjectFiles) {
+ mavenProjects.add(projectBuilder.build(mavenProjectFile, session.getProjectBuildingRequest()).getProject());
+ }
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+
+ session.setProjects(mavenProjects);
+ session.setCurrentProject(project);
+
+ return session;
+ }
+
+ public void addMavenProjectFile(File mavenProjectFile) {
+ this.mavenProjectFiles.add(mavenProjectFile);
+ }
+
+ public void clearMavenProjectFiles() {
+ this.mavenProjectFiles = new ArrayList<>();
+ }
+
+ /**
+ * Overloads super's {@link #lookupConfiguredMojo(MavenProject, String)}
+ * to ingest the given {@code pom.xml} {@link File} instead of a {@link MavenProject}.
+ * Creates and appropriately configures the {@link Mojo} responsible for executing
+ * the plugin goal as defined within the given {@code pom.xml} {@link File}.
+ *
+ * @param pom {@code pom.xml} file defining desired plugin and configuration to test.
+ * @param goal target plugin goal for which to create the associated {@link Mojo}
+ * @return
+ * @throws Exception
+ */
+ public Mojo lookupConfiguredMojo(File pom, String goal) throws Exception {
+ assertNotNull(pom);
+ assertTrue(pom.exists());
+
+ MavenSession session = newDefaultMavenSession();
+ ProjectBuildingRequest buildingRequest = session.getProjectBuildingRequest();
+ buildingRequest.setResolveDependencies(true);
+ ProjectBuilder projectBuilder = lookup(ProjectBuilder.class);
+
+ MavenProject project = projectBuilder.build(pom, buildingRequest).getProject();
+ ContainerizeDependenciesMojo mojo = lookupConfiguredMojo(project, goal);
+ return mojo;
+ }
+
+
+
+}
diff --git a/habushu-maven-plugin/src/test/java/org/technologybrewery/habushu/ContainerizeDependenciesSteps.java b/habushu-maven-plugin/src/test/java/org/technologybrewery/habushu/ContainerizeDependenciesSteps.java
new file mode 100644
index 0000000..149c64a
--- /dev/null
+++ b/habushu-maven-plugin/src/test/java/org/technologybrewery/habushu/ContainerizeDependenciesSteps.java
@@ -0,0 +1,133 @@
+package org.technologybrewery.habushu;
+
+import io.cucumber.java.After;
+import io.cucumber.java.Before;
+import io.cucumber.java.en.Given;
+import io.cucumber.java.en.Then;
+import io.cucumber.java.en.When;
+import org.apache.maven.plugin.MojoExecutionException;
+import org.apache.maven.plugin.MojoFailureException;
+import org.junit.jupiter.api.Assertions;
+
+import java.io.File;
+import java.io.IOException;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.util.Set;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
+
+public class ContainerizeDependenciesSteps {
+
+ protected String targetDefaultNoMonorepoDepPath = "target/test-classes/containerize-dependencies/"
+ + "default-no-monorepo-dep/test-monorepo";
+ protected String targetDefaultSingleMonorepoDepPath = "target/test-classes/containerize-dependencies/"
+ + "default-single-monorepo-dep/test-monorepo";
+ protected String mavenProjectPath;
+ private final String POM_FILE = "pom.xml";
+
+ private final ContainerizeDependenciesMojoTestCase mojoTestCase = new ContainerizeDependenciesMojoTestCase();
+
+ private ContainerizeDependenciesMojo mojo;
+
+ @Before("@containerizeDependencies")
+ public void configureMavenTestSession() throws Exception {
+ // important for registering Habushu's mojos to AbstractTestCase.mojoDescriptors,
+ // which ensures that lookupConfiguredMojo will return the configured mojo
+ mojoTestCase.configurePluginTestHarness();
+ }
+
+ @After("@containerizeDependencies")
+ public void tearDownMavenPluginTestHarness() throws Exception {
+ mojoTestCase.clearMavenProjectFiles();
+ mojoTestCase.tearDownPluginTestHarness();
+ }
+
+ @Given("a single Habushu-type dependency")
+ public void a_single_habushu_type_dependency() throws Exception {
+ mavenProjectPath = targetDefaultSingleMonorepoDepPath + "/extensions/extensions-monorepo-dep-consuming-application";
+
+ // enables us to mock a maven build with the --also-make flag
+ mojoTestCase.addMavenProjectFile(new File(targetDefaultSingleMonorepoDepPath + "/extensions/extensions-python-dep-X/pom.xml"));
+ mojoTestCase.addMavenProjectFile(new File(targetDefaultSingleMonorepoDepPath + "/foundation/foundation-python-dep-Y/pom.xml"));
+
+ mojo = (ContainerizeDependenciesMojo) mojoTestCase.lookupConfiguredMojo(
+ new File(mavenProjectPath, POM_FILE), "containerize-dependencies"
+ );
+ mojo.setAnchorSourceDirectory(new File("target/test-classes/containerize-dependencies/default-single-monorepo-dep/test-monorepo").getAbsoluteFile());
+ mojo.session.getRequest().setBaseDirectory(new File(targetDefaultSingleMonorepoDepPath));
+
+ }
+
+ @When("the containerize-dependencies goal is executed")
+ public void the_containerize_dependencies_goal_is_executed() throws MojoExecutionException, MojoFailureException {
+ mojo.execute();
+ }
+
+ @Then("the sources files of the dependency and transitive Habushu-type dependencies are staged and structured")
+ public void the_source_files_of_the_dependency_and_transitive_habushu_type_dependencies_are_staged_and_structured() {
+ assertStaged(mojo.getAnchorOutputDirectory());
+ }
+
+ @Given("no Habushu-type dependencies")
+ public void no_habushu_type_dependencies() throws Exception {
+ mavenProjectPath = targetDefaultNoMonorepoDepPath + "/no-monorepo-dep-application";
+ mojo = (ContainerizeDependenciesMojo) mojoTestCase.lookupConfiguredMojo(
+ new File(mavenProjectPath, POM_FILE), "containerize-dependencies"
+ );
+ mojo.session.getRequest().setBaseDirectory(new File(targetDefaultNoMonorepoDepPath));
+ }
+
+ @Then("no source files are staged in the build directory")
+ public void no_source_files_are_staged_in_the_build_directory() {
+ String venvSupportPath = mojo.getSession().getCurrentProject().getBuild().getDirectory() + "/venv-support";
+ Assertions.assertTrue(isNonExistentOrEmptyDir(new File(venvSupportPath)));
+ }
+
+ private boolean isNonExistentOrEmptyDir(File dir) {
+ // Directory does not exist
+ if (!dir.exists()) {
+ return true;
+ }
+
+ // The path exists but is not a directory
+ if (!dir.isDirectory()) {
+ return false;
+ }
+
+ // Check if the directory is empty
+ String[] contents = dir.list();
+ return contents == null || contents.length == 0;
+ }
+
+ private void assertStaged(File actual) {
+ Set actualFiles;
+ try {
+ actualFiles = getRelativizedPaths(actual);
+ } catch (Exception e) {
+ throw new RuntimeException();
+ }
+
+ assertFile(actualFiles, "extensions/extensions-python-dep-X/src/python_dep_x/python_dep_x.py");
+ assertFile(actualFiles, "extensions/extensions-python-dep-X/pyproject.toml");
+ assertFile(actualFiles, "extensions/extensions-python-dep-X/README.md");
+ assertFile(actualFiles, "foundation/foundation-python-dep-Y/src/python_dep_y/python_dep_y.py");
+ assertFile(actualFiles, "foundation/foundation-python-dep-Y/pyproject.toml");
+ assertFile(actualFiles, "foundation/foundation-python-dep-Y/README.md");
+ }
+
+ private static void assertFile(Set actualFiles, String path) {
+ Assertions.assertTrue(actualFiles.contains(Paths.get(path)), "Could not find: " + path);
+ }
+
+ private Set getRelativizedPaths(File rootDir) throws IOException {
+ try (Stream paths = Files.walk(rootDir.toPath())) {
+ return paths
+ .filter(Files::isRegularFile)
+ .map(rootDir.toPath()::relativize)
+ .collect(Collectors.toSet());
+ }
+ }
+
+}
diff --git a/habushu-maven-plugin/src/test/resources/containerize-dependencies/default-no-monorepo-dep/test-monorepo/java-dep-X/pom.xml b/habushu-maven-plugin/src/test/resources/containerize-dependencies/default-no-monorepo-dep/test-monorepo/java-dep-X/pom.xml
new file mode 100644
index 0000000..52e542f
--- /dev/null
+++ b/habushu-maven-plugin/src/test/resources/containerize-dependencies/default-no-monorepo-dep/test-monorepo/java-dep-X/pom.xml
@@ -0,0 +1,13 @@
+
+
+ 4.0.0
+
+ Java Dependency X
+ org.test.monorepo
+ java-dep-X
+ 1.0.0
+
+ jar
+
+
\ No newline at end of file
diff --git a/habushu-maven-plugin/src/test/resources/containerize-dependencies/default-no-monorepo-dep/test-monorepo/java-dep-X/src/main/javaDepX.java b/habushu-maven-plugin/src/test/resources/containerize-dependencies/default-no-monorepo-dep/test-monorepo/java-dep-X/src/main/javaDepX.java
new file mode 100644
index 0000000..e69de29
diff --git a/habushu-maven-plugin/src/test/resources/containerize-dependencies/default-no-monorepo-dep/test-monorepo/no-monorepo-dep-application/pom.xml b/habushu-maven-plugin/src/test/resources/containerize-dependencies/default-no-monorepo-dep/test-monorepo/no-monorepo-dep-application/pom.xml
new file mode 100644
index 0000000..4b1256a
--- /dev/null
+++ b/habushu-maven-plugin/src/test/resources/containerize-dependencies/default-no-monorepo-dep/test-monorepo/no-monorepo-dep-application/pom.xml
@@ -0,0 +1,31 @@
+
+
+ 4.0.0
+
+ No Monorepo Dependency Application
+ org.test.monorepo
+ no-monorepo-dep-application
+ 1.0.0
+
+ pom
+
+
+
+
+ org.technologybrewery.habushu
+ habushu-maven-plugin
+ ${project.version}
+
+
+
+
+
+
+ org.test.monorepo
+ java-dep-X
+ ${project.version}
+
+
+
+
\ No newline at end of file
diff --git a/habushu-maven-plugin/src/test/resources/containerize-dependencies/default-no-monorepo-dep/test-monorepo/pom.xml b/habushu-maven-plugin/src/test/resources/containerize-dependencies/default-no-monorepo-dep/test-monorepo/pom.xml
new file mode 100644
index 0000000..2643853
--- /dev/null
+++ b/habushu-maven-plugin/src/test/resources/containerize-dependencies/default-no-monorepo-dep/test-monorepo/pom.xml
@@ -0,0 +1,18 @@
+
+
+ 4.0.0
+
+ Test Monorepo
+ org.test.monorepo
+ test-monorepo
+ 1.0.0
+
+ pom
+
+
+ java-dep-X
+ no-monorepo-dep-application
+
+
+
\ No newline at end of file
diff --git a/habushu-maven-plugin/src/test/resources/containerize-dependencies/default-single-monorepo-dep/test-monorepo/extensions/extensions-monorepo-dep-consuming-application/pom.xml b/habushu-maven-plugin/src/test/resources/containerize-dependencies/default-single-monorepo-dep/test-monorepo/extensions/extensions-monorepo-dep-consuming-application/pom.xml
new file mode 100644
index 0000000..c0b8451
--- /dev/null
+++ b/habushu-maven-plugin/src/test/resources/containerize-dependencies/default-single-monorepo-dep/test-monorepo/extensions/extensions-monorepo-dep-consuming-application/pom.xml
@@ -0,0 +1,37 @@
+
+
+ 4.0.0
+
+ Extensions::Monorepo Dependency-Consuming Application
+ org.test.monorepo
+ extensions-monorepo-dep-consuming-application
+ 1.0.0-SNAPSHOT
+
+ pom
+
+
+
+
+ org.technologybrewery.habushu
+ habushu-maven-plugin
+ 2.15.0
+
+
+
+
+
+
+ org.technologybrewery.habushu
+ habushu-maven-plugin
+ 2.15.0
+
+
+ org.test.monorepo
+ extensions-python-dep-X
+ ${project.version}
+ habushu
+
+
+
+
\ No newline at end of file
diff --git a/habushu-maven-plugin/src/test/resources/containerize-dependencies/default-single-monorepo-dep/test-monorepo/extensions/extensions-python-dep-X/README.md b/habushu-maven-plugin/src/test/resources/containerize-dependencies/default-single-monorepo-dep/test-monorepo/extensions/extensions-python-dep-X/README.md
new file mode 100644
index 0000000..e69de29
diff --git a/habushu-maven-plugin/src/test/resources/containerize-dependencies/default-single-monorepo-dep/test-monorepo/extensions/extensions-python-dep-X/pom.xml b/habushu-maven-plugin/src/test/resources/containerize-dependencies/default-single-monorepo-dep/test-monorepo/extensions/extensions-python-dep-X/pom.xml
new file mode 100644
index 0000000..6fa6673
--- /dev/null
+++ b/habushu-maven-plugin/src/test/resources/containerize-dependencies/default-single-monorepo-dep/test-monorepo/extensions/extensions-python-dep-X/pom.xml
@@ -0,0 +1,38 @@
+
+
+ 4.0.0
+
+ Extensions::Python Dependency X
+ org.test.monorepo
+ extensions-python-dep-X
+ 1.0.0-SNAPSHOT
+
+ habushu
+
+
+
+
+ org.technologybrewery.habushu
+ habushu-maven-plugin
+ 2.15.0
+ true
+
+
+
+
+
+
+ org.technologybrewery.habushu
+ habushu-maven-plugin
+ 2.15.0
+
+
+ org.test.monorepo
+ foundation-python-dep-Y
+ ${project.version}
+ habushu
+
+
+
+
\ No newline at end of file
diff --git a/habushu-maven-plugin/src/test/resources/containerize-dependencies/default-single-monorepo-dep/test-monorepo/extensions/extensions-python-dep-X/pyproject.toml b/habushu-maven-plugin/src/test/resources/containerize-dependencies/default-single-monorepo-dep/test-monorepo/extensions/extensions-python-dep-X/pyproject.toml
new file mode 100644
index 0000000..086c205
--- /dev/null
+++ b/habushu-maven-plugin/src/test/resources/containerize-dependencies/default-single-monorepo-dep/test-monorepo/extensions/extensions-python-dep-X/pyproject.toml
@@ -0,0 +1,21 @@
+[tool.poetry]
+name = "extensions-python-dep-X"
+version = "1.0.0.dev"
+description = "description"
+authors = ["author"]
+packages = [
+ {include = "python_dep_x", from = "src"},
+]
+
+[tool.poetry.dependencies]
+python = ">=3.11.4, <4"
+
+[tool.poetry.group.dev.dependencies]
+black = ">=22.1.0"
+behave = ">=1.2.6"
+nose = ">=1.3.7"
+pylint = "^3.2.3"
+
+[build-system]
+requires = ["poetry-core>=1.7.0"]
+build-backend = "poetry.core.masonry.api"
\ No newline at end of file
diff --git a/habushu-maven-plugin/src/test/resources/containerize-dependencies/default-single-monorepo-dep/test-monorepo/extensions/extensions-python-dep-X/src/python_dep_x/python_dep_x.py b/habushu-maven-plugin/src/test/resources/containerize-dependencies/default-single-monorepo-dep/test-monorepo/extensions/extensions-python-dep-X/src/python_dep_x/python_dep_x.py
new file mode 100644
index 0000000..e69de29
diff --git a/habushu-maven-plugin/src/test/resources/containerize-dependencies/default-single-monorepo-dep/test-monorepo/extensions/pom.xml b/habushu-maven-plugin/src/test/resources/containerize-dependencies/default-single-monorepo-dep/test-monorepo/extensions/pom.xml
new file mode 100644
index 0000000..4a4e24b
--- /dev/null
+++ b/habushu-maven-plugin/src/test/resources/containerize-dependencies/default-single-monorepo-dep/test-monorepo/extensions/pom.xml
@@ -0,0 +1,18 @@
+
+
+ 4.0.0
+
+ Extensions
+ org.test.monorepo
+ extensions
+ 1.0.0-SNAPSHOT
+
+ pom
+
+
+ extensions-monorepo-dep-consuming-application
+ extensions-python-dep-X
+
+
+
\ No newline at end of file
diff --git a/habushu-maven-plugin/src/test/resources/containerize-dependencies/default-single-monorepo-dep/test-monorepo/foundation/foundation-python-dep-Y/README.md b/habushu-maven-plugin/src/test/resources/containerize-dependencies/default-single-monorepo-dep/test-monorepo/foundation/foundation-python-dep-Y/README.md
new file mode 100644
index 0000000..e69de29
diff --git a/habushu-maven-plugin/src/test/resources/containerize-dependencies/default-single-monorepo-dep/test-monorepo/foundation/foundation-python-dep-Y/pom.xml b/habushu-maven-plugin/src/test/resources/containerize-dependencies/default-single-monorepo-dep/test-monorepo/foundation/foundation-python-dep-Y/pom.xml
new file mode 100644
index 0000000..a428d4a
--- /dev/null
+++ b/habushu-maven-plugin/src/test/resources/containerize-dependencies/default-single-monorepo-dep/test-monorepo/foundation/foundation-python-dep-Y/pom.xml
@@ -0,0 +1,34 @@
+
+
+ 4.0.0
+
+ Foundation::Python Dependency Y
+ org.test.monorepo
+ foundation-python-dep-Y
+ 1.0.0-SNAPSHOT
+
+ habushu
+
+
+
+
+ org.technologybrewery.habushu
+ habushu-maven-plugin
+ 2.15.0
+ true
+
+
+
+
+
+
+ org.technologybrewery.habushu
+ habushu-maven-plugin
+ 2.15.0
+
+
+
+
+
+
\ No newline at end of file
diff --git a/habushu-maven-plugin/src/test/resources/containerize-dependencies/default-single-monorepo-dep/test-monorepo/foundation/foundation-python-dep-Y/pyproject.toml b/habushu-maven-plugin/src/test/resources/containerize-dependencies/default-single-monorepo-dep/test-monorepo/foundation/foundation-python-dep-Y/pyproject.toml
new file mode 100644
index 0000000..093ba37
--- /dev/null
+++ b/habushu-maven-plugin/src/test/resources/containerize-dependencies/default-single-monorepo-dep/test-monorepo/foundation/foundation-python-dep-Y/pyproject.toml
@@ -0,0 +1,23 @@
+[tool.poetry]
+name = "extensions-python-dep-Y"
+version = "1.0.0.dev"
+description = "description"
+authors = ["author"]
+packages = [
+ {include = "python_dep_y", from = "src"},
+]
+
+[tool.poetry.dependencies]
+python = ">=3.11.4, <4"
+
+[tool.poetry.group.dev.dependencies]
+black = ">=22.1.0"
+behave = ">=1.2.6"
+nose = ">=1.3.7"
+pylint = "^3.2.3"
+
+
+
+[build-system]
+requires = ["poetry-core>=1.7.0"]
+build-backend = "poetry.core.masonry.api"
\ No newline at end of file
diff --git a/habushu-maven-plugin/src/test/resources/containerize-dependencies/default-single-monorepo-dep/test-monorepo/foundation/foundation-python-dep-Y/src/python_dep_y/python_dep_y.py b/habushu-maven-plugin/src/test/resources/containerize-dependencies/default-single-monorepo-dep/test-monorepo/foundation/foundation-python-dep-Y/src/python_dep_y/python_dep_y.py
new file mode 100644
index 0000000..fdffa2a
--- /dev/null
+++ b/habushu-maven-plugin/src/test/resources/containerize-dependencies/default-single-monorepo-dep/test-monorepo/foundation/foundation-python-dep-Y/src/python_dep_y/python_dep_y.py
@@ -0,0 +1 @@
+# placeholder
diff --git a/habushu-maven-plugin/src/test/resources/containerize-dependencies/default-single-monorepo-dep/test-monorepo/foundation/pom.xml b/habushu-maven-plugin/src/test/resources/containerize-dependencies/default-single-monorepo-dep/test-monorepo/foundation/pom.xml
new file mode 100644
index 0000000..c6e39f3
--- /dev/null
+++ b/habushu-maven-plugin/src/test/resources/containerize-dependencies/default-single-monorepo-dep/test-monorepo/foundation/pom.xml
@@ -0,0 +1,17 @@
+
+
+ 4.0.0
+
+ Foundation
+ org.test.monorepo
+ foundation
+ 1.0.0-SNAPSHOT
+
+ pom
+
+
+ foundation-python-dep-Y
+
+
+
\ No newline at end of file
diff --git a/habushu-maven-plugin/src/test/resources/containerize-dependencies/default-single-monorepo-dep/test-monorepo/pom.xml b/habushu-maven-plugin/src/test/resources/containerize-dependencies/default-single-monorepo-dep/test-monorepo/pom.xml
new file mode 100644
index 0000000..0fb7c36
--- /dev/null
+++ b/habushu-maven-plugin/src/test/resources/containerize-dependencies/default-single-monorepo-dep/test-monorepo/pom.xml
@@ -0,0 +1,18 @@
+
+
+ 4.0.0
+
+ Test Monorepo
+ org.test.monorepo
+ test-monorepo
+ 1.0.0-SNAPSHOT
+
+ pom
+
+
+ extensions
+ foundation
+
+
+
\ No newline at end of file
diff --git a/habushu-maven-plugin/src/test/resources/specifications/containerize-dependencies.feature b/habushu-maven-plugin/src/test/resources/specifications/containerize-dependencies.feature
new file mode 100644
index 0000000..bc200e7
--- /dev/null
+++ b/habushu-maven-plugin/src/test/resources/specifications/containerize-dependencies.feature
@@ -0,0 +1,12 @@
+@containerizeDependencies
+Feature: Test staging source files of specified dependencies and transitive path-based dependencies
+
+ Scenario: One Habushu-type dependency is specified with the default configuration
+ Given a single Habushu-type dependency
+ When the containerize-dependencies goal is executed
+ Then the sources files of the dependency and transitive Habushu-type dependencies are staged and structured
+
+ Scenario: No Habushu-type dependencies are specified with the default configuration
+ Given no Habushu-type dependencies
+ When the containerize-dependencies goal is executed
+ Then no source files are staged in the build directory
\ No newline at end of file