@Test
public void javaEEToSpringBootTest() throws IOException, ExecutionException, InterruptedException {

    File appFolder = new File("../tests/sample-apps/echo");
    File transformedAppFolder = new File("./out/test/resources/echo-transformed");
    FileUtils.deleteDirectory(transformedAppFolder);
    FileUtils.copyDirectory(appFolder, transformedAppFolder);
    System.out.printf("Transformed sample app folder: %s\n", transformedAppFolder.getAbsolutePath());
    Application application = new ApplicationImpl(transformedAppFolder);
    Properties properties = new Properties();
    properties.put("changeReadme", "true");
    properties.put("validate", "false");
    Configuration configuration = new ConfigurationImpl(properties);
    TransformationTemplate transformationTemplate = new JavaEEToSpringBoot();
    AbstractTransformationRequest transformation = new TemplateTransformationRequest(application, transformationTemplate, configuration);
    TransformationResult transformationResult = transformationEngine.perform(transformation).get();
    assertNotNull(transformationResult);
    assertTrue(transformationResult.isSuccessful());
    assertEquals(transformationResult.getTransformationRequest().getConfiguration(), configuration);
    assertFalse(transformationResult.hasManualInstructions());
    assertNull(transformationResult.getManualInstructionsFile());
    assertEquals(transformationResult.getTransformedApplicationDir(), transformedAppFolder);
    assertNull(transformationResult.getAbortDetails());
    List<TransformationMetrics> metricsList = transformationResult.getMetrics();
    assertNotNull(metricsList);
    assertEquals(metricsList.size(), 1);
    TransformationMetrics metrics = metricsList.get(0);
    assertNull(metrics.getFromVersion());
    assertNull(metrics.getToVersion());
    TransformationStatistics statistics = metrics.getStatistics();
    assertEquals(statistics.getPerformResultErrorCount(), 0);
    assertEquals(statistics.getPerformResultSkippedConditionCount(), 2);
    assertEquals(statistics.getPerformResultSkippedDependencyCount(), 0);
    assertEquals(statistics.getTUExecutionResultWarningCount(), 0);
    assertEquals(statistics.getTUExecutionResultErrorCount(), 0);
    assertEquals(statistics.getTOExecutionResultWarningCount(), 0);
    assertEquals(statistics.getTOExecutionResultErrorCount(), 0);
    assertEquals(statistics.getManualInstructionsCount(), 0);
}