@Test
public void pendingManualChangesTest() throws IOException, URISyntaxException, InterruptedException {

    File appFolder = new File(getClass().getResource("/test-app-3").toURI());
    File transformedAppFolder = Files.createTempDir();
    FileUtils.copyDirectory(appFolder, transformedAppFolder);
    System.out.printf("Transformed sample app folder: %s\n", transformedAppFolder.getAbsolutePath());
    Application application = new ApplicationImpl(transformedAppFolder);
    Configuration configuration = new ConfigurationImpl(null);
    TransformationTemplate transformationTemplate = new JavaEEToSpringBoot();
    AbstractTransformationRequest transformation = new TemplateTransformationRequest(application, transformationTemplate, configuration);
    try {
        transformationEngine.perform(transformation).get();
        fail("An ApplicationValidationException was supposed to be thrown (since application had a pending manual instruction) but was not");
    } catch (ExecutionException executionException) {
        Throwable cause = executionException.getCause();
        assertTrue(cause instanceof ApplicationValidationException);
        String exceptionMessage = String.format("This application has pending manual instructions. Perform manual instructions at the following file first, then remove it, and run Butterfly again: %s/%s", transformedAppFolder.getAbsolutePath(), ManualInstructionsHandler.MANUAL_INSTRUCTIONS_MAIN_FILE);
        assertEquals(cause.getMessage(), exceptionMessage);
    }
}