diff --git a/src/main/kotlin/io/quarkus/code/misc/CommonsZipProjectWriter.java b/src/main/kotlin/io/quarkus/code/misc/CommonsZipProjectWriter.java deleted file mode 100644 index 07e9a178d..000000000 --- a/src/main/kotlin/io/quarkus/code/misc/CommonsZipProjectWriter.java +++ /dev/null @@ -1,131 +0,0 @@ -package io.quarkus.code.misc; - -import io.quarkus.cli.commands.writer.ProjectWriter; -import org.apache.commons.compress.archivers.ArchiveException; -import org.apache.commons.compress.archivers.ArchiveOutputStream; -import org.apache.commons.compress.archivers.ArchiveStreamFactory; -import org.apache.commons.compress.archivers.zip.X5455_ExtendedTimestamp; -import org.apache.commons.compress.archivers.zip.ZipArchiveEntry; -import org.apache.commons.compress.archivers.zip.ZipExtraField; - -import java.io.File; -import java.io.IOException; -import java.io.OutputStream; -import java.nio.charset.StandardCharsets; -import java.nio.file.Path; -import java.nio.file.Paths; -import java.util.Date; -import java.util.HashSet; -import java.util.LinkedHashMap; -import java.util.Map; -import java.util.Set; - -/** - * ProjectWriter implementation to create a zip. - */ -public class CommonsZipProjectWriter implements ProjectWriter, ProjectWriterWithPerms { - - // Remove 1 day to be sure the date won't be in the past in any location - private static final Date CREATION = new Date(System.currentTimeMillis() - 24 * 3600000); - - private final ArchiveOutputStream aos; - private final String basePath; - private final Set createdDirs = new HashSet<>(); - private final Map archiveEntriesByPath = new LinkedHashMap<>(); - private final Map contentByPath = new LinkedHashMap<>(); - - private CommonsZipProjectWriter(final ArchiveOutputStream aos, final String basePath) { - this.aos = aos; - this.basePath = basePath; - } - - public static CommonsZipProjectWriter createWriter(final OutputStream outputStream, final String basePath) throws ArchiveException { - final ArchiveOutputStream aos = new ArchiveStreamFactory().createArchiveOutputStream(ArchiveStreamFactory.ZIP, outputStream); - return new CommonsZipProjectWriter(aos, basePath); - } - - @Override - public String mkdirs(String path) { - if (path.length() == 0) { - return ""; - } - return Paths.get(path).toString(); - } - - @Override - public void write(String path, String content) { - byte[] contentBytes = content.getBytes(StandardCharsets.UTF_8); - this.write(path, contentBytes, false); - } - - private void mkdirs(Path dirPath) throws IOException { - if (dirPath == null) { - return; - } - mkdirs(dirPath.getParent()); - String dirPathText = dirPath.toString(); - if (!createdDirs.contains(dirPathText)) { - ZipArchiveEntry ze = new ZipArchiveEntry(dirPathText + "/"); - ze.setUnixMode(040755); - ze.setExtraFields(new ZipExtraField[]{getTimestamp()}); - aos.putArchiveEntry(ze); - aos.closeArchiveEntry(); - createdDirs.add(dirPathText); - } - } - - - public void write(String path, byte[] contentBytes, boolean allowExec) { - Path filePath = Paths.get(this.basePath, "/", path); - ZipArchiveEntry ze = new ZipArchiveEntry(filePath.toString()); - if (allowExec) { - ze.setUnixMode(0100755); - } else { - ze.setUnixMode(0100644); - } - ze.setExtraFields(new ZipExtraField[]{getTimestamp()}); - archiveEntriesByPath.put(filePath.toString(), ze); - contentByPath.put(filePath.toString(), contentBytes); - } - - @Override - public byte[] getContent(String path) { - return contentByPath.get(Paths.get(this.basePath, "/", path).toString()); - } - - @Override - public boolean exists(String path) { - return contentByPath.containsKey(Paths.get(this.basePath, "/", path).toString()); - } - - @Override - public File getProjectFolder() { - throw new UnsupportedOperationException(); - } - - @Override - public boolean hasFile() { - return false; - } - - @Override - public void close() throws IOException { - for (Map.Entry entry : contentByPath.entrySet()) { - ZipArchiveEntry ze = archiveEntriesByPath.get(entry.getKey()); - this.mkdirs(Paths.get(entry.getKey()).getParent()); - aos.putArchiveEntry(ze); - aos.write(entry.getValue()); - aos.closeArchiveEntry(); - } - aos.close(); - } - - private X5455_ExtendedTimestamp getTimestamp() { - X5455_ExtendedTimestamp timestamp = new X5455_ExtendedTimestamp(); - timestamp.setCreateJavaTime(CREATION); - timestamp.setModifyJavaTime(CREATION); - timestamp.setAccessJavaTime(CREATION); - return timestamp; - } - -} diff --git a/src/main/kotlin/io/quarkus/code/misc/FileProjectWriterWithPerms.java b/src/main/kotlin/io/quarkus/code/misc/FileProjectWriterWithPerms.java deleted file mode 100644 index 9b61b728b..000000000 --- a/src/main/kotlin/io/quarkus/code/misc/FileProjectWriterWithPerms.java +++ /dev/null @@ -1,28 +0,0 @@ -package io.quarkus.code.misc; - -import java.io.File; -import java.io.IOException; -import java.nio.file.Files; -import java.nio.file.Path; -import java.nio.file.attribute.PosixFilePermissions; - -/** - * ProjectWriter implementation to create direct files in the file system. - */ -public class FileProjectWriterWithPerms extends io.quarkus.cli.commands.writer.FileProjectWriter implements ProjectWriterWithPerms { - - private final File root; - - public FileProjectWriterWithPerms(File file) { - super(file); - root = file; - } - - public void write(String path, byte[] contentBytes, boolean allowExec) throws IOException { - final Path outputPath = root.toPath().resolve(path); - Files.write(outputPath, contentBytes); - if(allowExec) { - Files.setPosixFilePermissions(outputPath, PosixFilePermissions.fromString("rwxr-xr-x")); - } - } -} diff --git a/src/main/kotlin/io/quarkus/code/misc/ProjectWriterWithPerms.java b/src/main/kotlin/io/quarkus/code/misc/ProjectWriterWithPerms.java deleted file mode 100644 index bcec17cfb..000000000 --- a/src/main/kotlin/io/quarkus/code/misc/ProjectWriterWithPerms.java +++ /dev/null @@ -1,7 +0,0 @@ -package io.quarkus.code.misc; - -import java.io.IOException; - -public interface ProjectWriterWithPerms { - void write(String path, byte[] contentBytes, boolean allowExec) throws IOException; -} diff --git a/src/main/kotlin/io/quarkus/code/model/QuarkusProject.kt b/src/main/kotlin/io/quarkus/code/model/ProjectDefinition.kt similarity index 98% rename from src/main/kotlin/io/quarkus/code/model/QuarkusProject.kt rename to src/main/kotlin/io/quarkus/code/model/ProjectDefinition.kt index 84b036e0f..59cc31a60 100644 --- a/src/main/kotlin/io/quarkus/code/model/QuarkusProject.kt +++ b/src/main/kotlin/io/quarkus/code/model/ProjectDefinition.kt @@ -6,7 +6,7 @@ import javax.validation.constraints.Pattern import javax.ws.rs.DefaultValue import javax.ws.rs.QueryParam -class QuarkusProject { +class ProjectDefinition { companion object { const val DEFAULT_GROUPID = "org.acme" @@ -104,7 +104,7 @@ class QuarkusProject { if (this === other) return true if (javaClass != other?.javaClass) return false - other as QuarkusProject + other as ProjectDefinition if (groupId != other.groupId) return false if (artifactId != other.artifactId) return false diff --git a/src/main/kotlin/io/quarkus/code/rest/CodeQuarkusResource.kt b/src/main/kotlin/io/quarkus/code/rest/CodeQuarkusResource.kt index 0920a9b65..808f41bae 100644 --- a/src/main/kotlin/io/quarkus/code/rest/CodeQuarkusResource.kt +++ b/src/main/kotlin/io/quarkus/code/rest/CodeQuarkusResource.kt @@ -5,7 +5,7 @@ import io.quarkus.code.config.GitHubConfig import io.quarkus.code.config.GoogleAnalyticsConfig import io.quarkus.code.model.CodeQuarkusExtension import io.quarkus.code.model.PublicConfig -import io.quarkus.code.model.QuarkusProject +import io.quarkus.code.model.ProjectDefinition import io.quarkus.code.service.QuarkusExtensionCatalogService import io.quarkus.code.service.QuarkusProjectService import io.quarkus.runtime.StartupEvent @@ -97,12 +97,12 @@ class CodeQuarkusResource { @Path("/download") @Produces("application/zip") @Operation(summary = "Download a custom Quarkus application with the provided settings") - fun download(@Valid @BeanParam project: QuarkusProject): Response { + fun download(@Valid @BeanParam projectDefinition: ProjectDefinition): Response { try { return Response - .ok(projectCreator.create(project)) + .ok(projectCreator.create(projectDefinition)) .type("application/zip") - .header("Content-Disposition", "attachment; filename=\"${project.artifactId}.zip\"") + .header("Content-Disposition", "attachment; filename=\"${projectDefinition.artifactId}.zip\"") .build() } catch (e: IllegalStateException) { LOG.warning("Bad request: ${e.message}") diff --git a/src/main/kotlin/io/quarkus/code/rest/GitHubResource.kt b/src/main/kotlin/io/quarkus/code/rest/GitHubResource.kt index ac47b6399..f4735c5cb 100644 --- a/src/main/kotlin/io/quarkus/code/rest/GitHubResource.kt +++ b/src/main/kotlin/io/quarkus/code/rest/GitHubResource.kt @@ -1,7 +1,7 @@ package io.quarkus.code.rest import io.quarkus.code.model.GitHubCreatedRepository -import io.quarkus.code.model.QuarkusProject +import io.quarkus.code.model.ProjectDefinition import io.quarkus.code.service.GitHubService import io.quarkus.code.service.QuarkusProjectService import io.quarkus.runtime.StartupEvent @@ -47,17 +47,17 @@ class GitHubResource { @Path("/project") @Produces(APPLICATION_JSON) @Operation(summary = "Create project and push generated code to GitHub") - fun createProject(@Valid @BeanParam project: QuarkusProject, + fun createProject(@Valid @BeanParam projectDefinition: ProjectDefinition, @NotEmpty @HeaderParam("GitHub-Code") code: String, @NotEmpty @HeaderParam("GitHub-State") state: String): GitHubCreatedRepository { check(gitHubService.isEnabled()) { "GitHub is not enabled" } - val location = projectCreator.createTmp(project) + val location = projectCreator.createTmp(projectDefinition) val token = gitHubService.fetchAccessToken(code, state) val login = gitHubService.login(token.accessToken) - if (gitHubService.repositoryExists(login, token.accessToken, project.artifactId)) { - throw WebApplicationException("This repository name ${project.artifactId} already exists", 409) + if (gitHubService.repositoryExists(login, token.accessToken, projectDefinition.artifactId)) { + throw WebApplicationException("This repository name ${projectDefinition.artifactId} already exists", 409) } - val repo = gitHubService.createRepository(login, token.accessToken, project.artifactId) + val repo = gitHubService.createRepository(login, token.accessToken, projectDefinition.artifactId) gitHubService.push(repo.ownerName, token.accessToken, repo.url, location) return repo } diff --git a/src/main/kotlin/io/quarkus/code/service/QuarkusProjectService.kt b/src/main/kotlin/io/quarkus/code/service/QuarkusProjectService.kt index 30bd52495..56883bc9b 100644 --- a/src/main/kotlin/io/quarkus/code/service/QuarkusProjectService.kt +++ b/src/main/kotlin/io/quarkus/code/service/QuarkusProjectService.kt @@ -1,17 +1,14 @@ package io.quarkus.code.service -import io.quarkus.cli.commands.AddExtensions -import io.quarkus.cli.commands.CreateProject -import io.quarkus.cli.commands.writer.ProjectWriter -import io.quarkus.code.misc.CommonsZipProjectWriter -import io.quarkus.code.misc.FileProjectWriterWithPerms -import io.quarkus.code.misc.ProjectWriterWithPerms -import io.quarkus.code.model.QuarkusProject -import io.quarkus.generators.BuildTool -import java.io.ByteArrayOutputStream +import io.quarkus.code.model.ProjectDefinition +import io.quarkus.devtools.commands.CreateProject +import io.quarkus.devtools.project.BuildTool +import io.quarkus.devtools.project.QuarkusProject +import io.quarkus.devtools.project.compress.QuarkusProjectCompress import java.io.IOException import java.nio.file.Files import java.nio.file.Path +import java.nio.file.attribute.PosixFilePermissions import javax.inject.Inject import javax.inject.Singleton @@ -38,83 +35,77 @@ class QuarkusProjectService { @Inject internal lateinit var extensionCatalog: QuarkusExtensionCatalogService - fun create(project: QuarkusProject): ByteArray { + fun create(projectDefinition: ProjectDefinition): ByteArray { QuarkusExtensionCatalogService.checkPlatformInitialization() - val baos = ByteArrayOutputStream() - baos.use { - val zipWriter = CommonsZipProjectWriter.createWriter(baos, project.artifactId) - zipWriter.use { - createProject(project, zipWriter) - } - } - return baos.toByteArray() + val path = createTmp(projectDefinition) + val time = System.currentTimeMillis() - 24 * 3600000 + val zipPath = Files.createTempDirectory("zipped-").resolve("project.zip") + QuarkusProjectCompress.zip(path, zipPath, true, time) + return Files.readAllBytes(zipPath) } - fun createTmp(project: QuarkusProject): Path { - val location = Files.createTempDirectory("generated-") - val fileProjectWriter = FileProjectWriterWithPerms(location.toFile()) - createProject(project, fileProjectWriter) + fun createTmp(projectDefinition: ProjectDefinition): Path { + val location = Files.createTempDirectory("generated-").resolve(projectDefinition.artifactId) + createProject(projectDefinition, location) return location; } - private fun createProject(project: QuarkusProject, projectWriter: ProjectWriter) { - val extensions = checkAndMergeExtensions(project) + private fun createProject(projectDefinition: ProjectDefinition, projectFolderPath: Path) { + val extensions = checkAndMergeExtensions(projectDefinition) val sourceType = CreateProject.determineSourceType(extensions) - val context = mutableMapOf("path" to (project.path as Any)) - val buildTool = io.quarkus.generators.BuildTool.valueOf(project.buildTool) - val success = CreateProject(projectWriter, QuarkusExtensionCatalogService.descriptor) - .groupId(project.groupId) - .artifactId(project.artifactId) - .version(project.version) + val context = mutableMapOf("path" to (projectDefinition.path as Any)) + val buildTool = BuildTool.valueOf(projectDefinition.buildTool) + val success = CreateProject(projectFolderPath, QuarkusExtensionCatalogService.descriptor) + .groupId(projectDefinition.groupId) + .artifactId(projectDefinition.artifactId) + .version(projectDefinition.version) .sourceType(sourceType) .buildTool(buildTool) - .className(project.className) + .className(projectDefinition.className) .javaTarget("11") + .extensions(extensions) .doCreateProject(context) if (!success) { throw IOException("Error during Quarkus project creation") } - AddExtensions(projectWriter, buildTool, QuarkusExtensionCatalogService.descriptor) - .extensions(extensions) - .execute() if (buildTool == BuildTool.MAVEN) { - addMvnw(projectWriter) + addMvnw(projectFolderPath) } else if (buildTool == BuildTool.GRADLE) { - addGradlew(projectWriter) + addGradlew(projectFolderPath) } } - private fun checkAndMergeExtensions(project: QuarkusProject): Set { - return extensionCatalog.checkAndMergeExtensions(project.extensions, project.shortExtensions) + private fun checkAndMergeExtensions(projectDefinition: ProjectDefinition): Set { + return extensionCatalog.checkAndMergeExtensions(projectDefinition.extensions, projectDefinition.shortExtensions) } - private fun addMvnw(projectWriter: ProjectWriter) { - projectWriter.mkdirs(MVNW_WRAPPER_DIR) - writeResourceFile(projectWriter, MVNW_RESOURCES_DIR, MVNW_WRAPPER_JAR) - writeResourceFile(projectWriter, MVNW_RESOURCES_DIR, MVNW_WRAPPER_PROPS) - writeResourceFile(projectWriter, MVNW_RESOURCES_DIR, MVNW_WRAPPER_DOWNLOADER) - writeResourceFile(projectWriter, MVNW_RESOURCES_DIR, MVNW_CMD, true) - writeResourceFile(projectWriter, MVNW_RESOURCES_DIR, MVNW, true) + private fun addMvnw(projectFolderPath: Path) { + Files.createDirectories(projectFolderPath.resolve(MVNW_WRAPPER_DIR)) + writeResourceFile(projectFolderPath, MVNW_RESOURCES_DIR, MVNW_WRAPPER_JAR) + writeResourceFile(projectFolderPath, MVNW_RESOURCES_DIR, MVNW_WRAPPER_PROPS) + writeResourceFile(projectFolderPath, MVNW_RESOURCES_DIR, MVNW_WRAPPER_DOWNLOADER) + writeResourceFile(projectFolderPath, MVNW_RESOURCES_DIR, MVNW_CMD, true) + writeResourceFile(projectFolderPath, MVNW_RESOURCES_DIR, MVNW, true) } - private fun addGradlew(projectWriter: ProjectWriter) { - projectWriter.mkdirs(GRADLEW_WRAPPER_DIR) - writeResourceFile(projectWriter, GRADLEW_RESOURCES_DIR, GRADLEW_WRAPPER_JAR) - writeResourceFile(projectWriter, GRADLEW_RESOURCES_DIR, GRADLEW_WRAPPER_PROPS) - writeResourceFile(projectWriter, GRADLEW_RESOURCES_DIR, GRADLEW_BAT, true) - writeResourceFile(projectWriter, GRADLEW_RESOURCES_DIR, GRADLEW, true) + private fun addGradlew(projectFolderPath: Path) { + Files.createDirectories(projectFolderPath.resolve(GRADLEW_WRAPPER_DIR)) + writeResourceFile(projectFolderPath, GRADLEW_RESOURCES_DIR, GRADLEW_WRAPPER_JAR) + writeResourceFile(projectFolderPath, GRADLEW_RESOURCES_DIR, GRADLEW_WRAPPER_PROPS) + writeResourceFile(projectFolderPath, GRADLEW_RESOURCES_DIR, GRADLEW_BAT, true) + writeResourceFile(projectFolderPath, GRADLEW_RESOURCES_DIR, GRADLEW, true) } - private fun writeResourceFile(projectWriter: ProjectWriter, resourcesDir: String, filePath: String, allowExec: Boolean = false) { - if (!projectWriter.exists(filePath)) { + private fun writeResourceFile(projectFolderPath: Path, resourcesDir: String, filePath: String, allowExec: Boolean = false) { + val absoluteFilePath = projectFolderPath.resolve(filePath); + if (!absoluteFilePath.toFile().exists()) { val resourcePath = "$resourcesDir/$filePath" val resource = QuarkusProjectService::class.java.getResource(resourcePath) ?: throw IOException("missing resource $resourcePath") val fileAsBytes = resource.readBytes() - if (projectWriter is ProjectWriterWithPerms) { - projectWriter.write(filePath, fileAsBytes, allowExec) - } else { - throw IllegalStateException("Unsupported projectWriter ${projectWriter.javaClass.name}") + Files.write(absoluteFilePath, fileAsBytes) + if(allowExec) { + Files.setPosixFilePermissions(absoluteFilePath, PosixFilePermissions.fromString("rwxr-xr-x")) } } } diff --git a/src/test/kotlin/io/quarkus/code/rest/CodeQuarkusResourceTest.kt b/src/test/kotlin/io/quarkus/code/rest/CodeQuarkusResourceTest.kt index dd350733a..0b0df9c71 100644 --- a/src/test/kotlin/io/quarkus/code/rest/CodeQuarkusResourceTest.kt +++ b/src/test/kotlin/io/quarkus/code/rest/CodeQuarkusResourceTest.kt @@ -1,6 +1,6 @@ package io.quarkus.code.rest -import io.quarkus.code.model.QuarkusProject +import io.quarkus.code.model.ProjectDefinition import io.quarkus.test.junit.QuarkusTest import io.restassured.RestAssured.given import org.hamcrest.CoreMatchers.* @@ -27,7 +27,7 @@ class CodeQuarkusResourceTest { .statusCode(200) .contentType("application/zip") .header("Content-Disposition", "attachment; filename=\"code-with-quarkus.zip\"") - assertThat(projectService.createdProjectRef.get(), equalTo(QuarkusProject())) + assertThat(projectService.createdProjectRef.get(), equalTo(ProjectDefinition())) } @Test @@ -120,7 +120,7 @@ class CodeQuarkusResourceTest { .header("Content-Disposition", "attachment; filename=\"test-app-with-a-few-arg.zip\"") assertThat( projectService.getCreatedProject(), equalTo( - QuarkusProject( + ProjectDefinition( artifactId = "test-app-with-a-few-arg", version = "1.0.0", shortExtensions = "D9x.9Ie" @@ -142,7 +142,7 @@ class CodeQuarkusResourceTest { .header("Content-Disposition", "attachment; filename=\"test-empty-shortids.zip\"") assertThat( projectService.getCreatedProject(), equalTo( - QuarkusProject( + ProjectDefinition( artifactId = "test-empty-shortids", version = "1.0.1" )) @@ -162,7 +162,7 @@ class CodeQuarkusResourceTest { .header("Content-Disposition", "attachment; filename=\"test-empty-ext.zip\"") assertThat( projectService.getCreatedProject(), equalTo( - QuarkusProject( + ProjectDefinition( artifactId = "test-empty-ext", version = "1.0.1", extensions = setOf("") @@ -183,7 +183,7 @@ class CodeQuarkusResourceTest { .header("Content-Disposition", "attachment; filename=\"test-app.zip\"") assertThat( projectService.getCreatedProject(), equalTo( - QuarkusProject( + ProjectDefinition( groupId = "com.toto", artifactId = "test-app", version = "1.0.0", @@ -208,7 +208,7 @@ class CodeQuarkusResourceTest { .header("Content-Disposition", "attachment; filename=\"test-app.zip\"") assertThat( projectService.getCreatedProject(), equalTo( - QuarkusProject( + ProjectDefinition( groupId = "com.toto", artifactId = "test-app", version = "1.0.0", @@ -232,7 +232,7 @@ class CodeQuarkusResourceTest { .header("Content-Disposition", "attachment; filename=\"test-app.zip\"") assertThat( projectService.getCreatedProject(), equalTo( - QuarkusProject( + ProjectDefinition( groupId = "com.toto", artifactId = "test-app", version = "1.0.0", @@ -287,7 +287,7 @@ class CodeQuarkusResourceTest { .header("Content-Disposition", "attachment; filename=\"test-app-with-a-few-arg.zip\"") assertThat( projectService.getCreatedProject(), equalTo( - QuarkusProject( + ProjectDefinition( artifactId = "test-app-with-a-few-arg", version = "1.0.0", buildTool = "GRADLE", diff --git a/src/test/kotlin/io/quarkus/code/rest/QuarkusProjectServiceMock.kt b/src/test/kotlin/io/quarkus/code/rest/QuarkusProjectServiceMock.kt index 39a24c188..2d61e5953 100644 --- a/src/test/kotlin/io/quarkus/code/rest/QuarkusProjectServiceMock.kt +++ b/src/test/kotlin/io/quarkus/code/rest/QuarkusProjectServiceMock.kt @@ -1,7 +1,7 @@ package io.quarkus.code.rest import io.quarkus.code.service.QuarkusProjectService -import io.quarkus.code.model.QuarkusProject +import io.quarkus.code.model.ProjectDefinition import io.quarkus.test.Mock import java.util.concurrent.atomic.AtomicReference import javax.inject.Singleton @@ -10,14 +10,14 @@ import javax.inject.Singleton @Singleton open class QuarkusProjectServiceMock: QuarkusProjectService() { - val createdProjectRef : AtomicReference = AtomicReference() + val createdProjectRef : AtomicReference = AtomicReference() - override fun create(project: QuarkusProject): ByteArray { - createdProjectRef.set(project) - return super.create(project) + override fun create(projectDefinition: ProjectDefinition): ByteArray { + createdProjectRef.set(projectDefinition) + return super.create(projectDefinition) } - fun getCreatedProject(): QuarkusProject { + fun getCreatedProject(): ProjectDefinition { return this.createdProjectRef.get() } diff --git a/src/test/kotlin/io/quarkus/code/service/QuarkusProjectServiceTest.kt b/src/test/kotlin/io/quarkus/code/service/QuarkusProjectServiceTest.kt index 8d9212d3c..1a76ad2f3 100644 --- a/src/test/kotlin/io/quarkus/code/service/QuarkusProjectServiceTest.kt +++ b/src/test/kotlin/io/quarkus/code/service/QuarkusProjectServiceTest.kt @@ -1,12 +1,11 @@ package io.quarkus.code.service import io.quarkus.code.config.CodeQuarkusConfig -import io.quarkus.code.model.QuarkusProject +import io.quarkus.code.model.ProjectDefinition import io.quarkus.code.service.QuarkusProjectServiceTestUtils.prefixFileList import io.quarkus.test.junit.QuarkusTest import org.hamcrest.MatcherAssert.assertThat import org.hamcrest.Matchers.* -import org.junit.jupiter.api.DisplayName import org.junit.jupiter.api.Test import org.junit.jupiter.api.Timeout import java.nio.file.Paths @@ -181,7 +180,7 @@ internal class QuarkusProjectServiceTest { // When val creator = QuarkusProjectService() creator.extensionCatalog = quarkusExtensionCatalog - val proj = creator.create(QuarkusProject()) + val proj = creator.create(ProjectDefinition()) val (testDir, zipList) = QuarkusProjectServiceTestUtils.extractProject(proj) val fileList = QuarkusProjectServiceTestUtils.readFiles(testDir) val pomText = Paths.get(testDir.path, "code-with-quarkus/pom.xml") @@ -206,7 +205,7 @@ internal class QuarkusProjectServiceTest { // When val creator = QuarkusProjectService() creator.extensionCatalog = quarkusExtensionCatalog - val proj = creator.createTmp(QuarkusProject()) + val proj = creator.createTmp(ProjectDefinition()) val fileList = QuarkusProjectServiceTestUtils.readFiles(proj.toFile()) val pomText = proj.resolve("pom.xml") .toFile().readText(Charsets.UTF_8) @@ -231,7 +230,7 @@ internal class QuarkusProjectServiceTest { val creator = QuarkusProjectService() creator.extensionCatalog = quarkusExtensionCatalog val proj = creator.create( - QuarkusProject( + ProjectDefinition( groupId = "com.test", artifactId = "test-app", version = "2.0.0", @@ -249,7 +248,7 @@ internal class QuarkusProjectServiceTest { .toFile().readText(Charsets.UTF_8) // Then - assertThat(zipList, contains(*prefixFileList(EXPECTED_CONTENT_CUSTOM, "test-app/"))) + assertThat(zipList, containsInAnyOrder(*prefixFileList(EXPECTED_CONTENT_CUSTOM, "test-app/"))) assertThat(fileList.size, equalTo(34)) assertThat(pomText, containsString("com.test")) @@ -270,7 +269,7 @@ internal class QuarkusProjectServiceTest { val creator = QuarkusProjectService() creator.extensionCatalog = quarkusExtensionCatalog val proj = creator.create( - QuarkusProject( + ProjectDefinition( groupId = "com.test", artifactId = "test-app", version = "2.0.0", @@ -287,7 +286,7 @@ internal class QuarkusProjectServiceTest { .toFile().readText(Charsets.UTF_8) // Then - assertThat(zipList, contains(*prefixFileList(EXPECTED_CONTENT_GRADLE_KOTLIN, "test-app/"))) + assertThat(zipList, containsInAnyOrder(*prefixFileList(EXPECTED_CONTENT_GRADLE_KOTLIN, "test-app/"))) assertThat(fileList.size, equalTo(39)) @@ -308,7 +307,7 @@ internal class QuarkusProjectServiceTest { val creator = QuarkusProjectService() creator.extensionCatalog = quarkusExtensionCatalog val proj = creator.create( - QuarkusProject( + ProjectDefinition( groupId = "com.test", artifactId = "test-app", version = "2.0.0", @@ -325,7 +324,7 @@ internal class QuarkusProjectServiceTest { .toFile().readText(Charsets.UTF_8) // Then - assertThat(zipList, contains(*prefixFileList(EXPECTED_CONTENT_GRADLE_SCALA, "test-app/"))) + assertThat(zipList, containsInAnyOrder(*prefixFileList(EXPECTED_CONTENT_GRADLE_SCALA, "test-app/"))) assertThat(fileList.size, equalTo(39)) @@ -349,7 +348,7 @@ internal class QuarkusProjectServiceTest { creator.extensionCatalog = quarkusExtensionCatalog val creates = (1..20).map { _ -> Callable { - val result = creator.create(QuarkusProject()) + val result = creator.create(ProjectDefinition()) latch.countDown() result }