From 2698fdaa8f1e4d55ecded25d335b313c37f16dd6 Mon Sep 17 00:00:00 2001 From: Alexander Shustanov Date: Mon, 5 Oct 2020 19:48:18 +0400 Subject: [PATCH] Update project template for CUBA 7.2 #190 --- .../cubaplugin/project/ProjectInitCommand.kt | 24 +++--- .../cubaplugin/project/ProjectInitModel.kt | 27 ++++--- .../cuba/cli/generation/TemplateProcessor.kt | 23 +++--- .../cubaplugin/project/messages.properties | 6 -- .../templates/project/7.2/build.gradle | 45 ++--------- .../src/$[project.rootPackage]/app.properties | 15 +++- ...ect.testContainerPrefix}TestContainer.java | 54 +++++++++++++ ...oject.testContainerPrefix}TestContainer.kt | 51 ++++++++++++ .../AppTestContainer.java | 78 ------------------- .../core/SampleIntegrationTest.java | 30 ++++--- .../core/SampleIntegrationTest.kt | 55 +++++++++++++ .../test-app.properties | 8 ++ .../$[project.rootPackage]/test-spring.xml | 8 ++ .../7.2/modules/core/web/META-INF/context.xml | 20 ----- ....testContainerPrefix}WebTestContainer.java | 51 ++++++++++++ ...ct.testContainerPrefix}WebTestContainer.kt | 46 +++++++++++ 16 files changed, 347 insertions(+), 194 deletions(-) create mode 100644 src/main/resources/com/haulmont/cuba/cli/cubaplugin/templates/project/7.2/modules/core/test/$[project.rootPackage]/${project.testContainerPrefix}TestContainer.java create mode 100644 src/main/resources/com/haulmont/cuba/cli/cubaplugin/templates/project/7.2/modules/core/test/$[project.rootPackage]/${project.testContainerPrefix}TestContainer.kt delete mode 100644 src/main/resources/com/haulmont/cuba/cli/cubaplugin/templates/project/7.2/modules/core/test/$[project.rootPackage]/AppTestContainer.java create mode 100644 src/main/resources/com/haulmont/cuba/cli/cubaplugin/templates/project/7.2/modules/core/test/$[project.rootPackage]/core/SampleIntegrationTest.kt create mode 100644 src/main/resources/com/haulmont/cuba/cli/cubaplugin/templates/project/7.2/modules/core/test/$[project.rootPackage]/test-app.properties create mode 100644 src/main/resources/com/haulmont/cuba/cli/cubaplugin/templates/project/7.2/modules/core/test/$[project.rootPackage]/test-spring.xml create mode 100644 src/main/resources/com/haulmont/cuba/cli/cubaplugin/templates/project/7.2/modules/web/test/$[project.rootPackage]/${project.testContainerPrefix}WebTestContainer.java create mode 100644 src/main/resources/com/haulmont/cuba/cli/cubaplugin/templates/project/7.2/modules/web/test/$[project.rootPackage]/${project.testContainerPrefix}WebTestContainer.kt diff --git a/src/main/kotlin/com/haulmont/cuba/cli/cubaplugin/project/ProjectInitCommand.kt b/src/main/kotlin/com/haulmont/cuba/cli/cubaplugin/project/ProjectInitCommand.kt index 297748c..d79254c 100644 --- a/src/main/kotlin/com/haulmont/cuba/cli/cubaplugin/project/ProjectInitCommand.kt +++ b/src/main/kotlin/com/haulmont/cuba/cli/cubaplugin/project/ProjectInitCommand.kt @@ -149,8 +149,9 @@ class ProjectInitCommand(override val kodein: Kodein = cubaKodein) : GeneratorCo } confirmation("kotlinSupport", "Support kotlin?") { - askIf {answers -> - PlatformVersion((answers[PLATFORM_VERSION] ?: answers[PREDEFINED_PLATFORM_VERSION]) as String) >= PlatformVersion.v7_2 + askIf { answers -> + PlatformVersion((answers[PLATFORM_VERSION] + ?: answers[PREDEFINED_PLATFORM_VERSION]) as String) >= PlatformVersion.v7_2 } } @@ -199,9 +200,17 @@ class ProjectInitCommand(override val kodein: Kodein = cubaKodein) : GeneratorCo Files.createDirectories(cwd) + val kotlinSupport = model.kotlinSupport + val templateTips = TemplateProcessor(resources.getTemplate("project"), bindings, PlatformVersion(model.platformVersion)) { - listOf("modules", "build.gradle", "settings.gradle", "\${gitignore}").forEach { - transform(it) + listOf("modules", "build.gradle", "settings.gradle", "\${gitignore}").forEach { it -> + transform(it) { path -> + return@transform if (kotlinSupport) { + !path.fileName.toString().endsWith(".java") + } else { + !path.fileName.toString().endsWith(".kt") + } + } } listOf("gradle", "gradlew", "gradlew.bat").forEach { @@ -215,13 +224,6 @@ class ProjectInitCommand(override val kodein: Kodein = cubaKodein) : GeneratorCo } templateTips?.let { writer.println(it.format(cwd.toAbsolutePath().toString())) } - - val dpTipsMessageName = when (model.database.database) { - databases[5] -> "oracleDbTips" - else -> return - } - - writer.println(messages[dpTipsMessageName]) } companion object { diff --git a/src/main/kotlin/com/haulmont/cuba/cli/cubaplugin/project/ProjectInitModel.kt b/src/main/kotlin/com/haulmont/cuba/cli/cubaplugin/project/ProjectInitModel.kt index 832e617..35da2ef 100644 --- a/src/main/kotlin/com/haulmont/cuba/cli/cubaplugin/project/ProjectInitModel.kt +++ b/src/main/kotlin/com/haulmont/cuba/cli/cubaplugin/project/ProjectInitModel.kt @@ -18,6 +18,7 @@ package com.haulmont.cuba.cli.cubaplugin.project import com.haulmont.cuba.cli.commands.CommandExecutionException import com.haulmont.cuba.cli.commands.CommonParameters +import com.haulmont.cuba.cli.cubaplugin.model.PlatformVersion import com.haulmont.cuba.cli.localMessages import com.haulmont.cuba.cli.prompting.Answers @@ -36,6 +37,7 @@ class ProjectInitModel(answers: Answers) { val database: DatabaseModel = DatabaseModel(answers) val kotlinSupport: Boolean by answers.withDefault { false } val kotlinVersion: String by answers.withDefault { "1.3.41" } + val testContainerPrefix: String = namespace.capitalize() } class DatabaseModel(answers: Answers) { @@ -62,6 +64,9 @@ class DatabaseModel(answers: Answers) { } else "" init { + val platformVersion = PlatformVersion(answers["platformVersion"] as? String + ?: answers["predefinedPlatformVersion"] as String) + when (database) { databases[0] -> { schema = "jdbc:hsqldb:hsql:" @@ -74,15 +79,21 @@ class DatabaseModel(answers: Answers) { databases[1] -> { schema = "jdbc:postgresql:" driver = "org.postgresql.Driver" - driverDependency = "'org.postgresql:postgresql:9.4.1212'" + driverDependency = if (platformVersion >= PlatformVersion.v7_2) + "'org.postgresql:postgresql:42.2.9'" + else + "'org.postgresql:postgresql:9.4.1212'" driverDependencyName = "postgres" username = "cuba" password = "cuba" } - databases[2] -> { + databases[2], databases[4] -> { schema = "jdbc:sqlserver:" driver = "com.microsoft.sqlserver.jdbc.SQLServerDriver" - driverDependency = "'com.microsoft.sqlserver:mssql-jdbc:6.4.0.jre8'" + driverDependency = if (platformVersion < PlatformVersion.v7_1) + "'com.microsoft.sqlserver:mssql-jdbc:7.0.0.jre8'" + else + "'com.microsoft.sqlserver:mssql-jdbc:7.2.2.jre8'" driverDependencyName = "mssql" username = "sa" password = "saPass1" @@ -95,18 +106,10 @@ class DatabaseModel(answers: Answers) { username = "sa" password = "saPass1" } - databases[4] -> { - schema = "jdbc:sqlserver:" - driver = "com.microsoft.sqlserver.jdbc.SQLServerDriver" - driverDependency = "'com.microsoft.sqlserver:mssql-jdbc:6.4.0.jre8'" - driverDependencyName = "mssql" - username = "sa" - password = "saPass1" - } databases[5] -> { schema = "jdbc:oracle:thin:@" driver = "oracle.jdbc.OracleDriver" - driverDependency = "files(\"\$cuba.tomcat.dir/lib/ojdbc6.jar\")" + driverDependency = "com.oracle.database.jdbc:ojdbc6:11.2.0.4" driverDependencyName = "oracle" username = (answers["projectName"] as String).replace('-', '_') password = "cuba" diff --git a/src/main/kotlin/com/haulmont/cuba/cli/generation/TemplateProcessor.kt b/src/main/kotlin/com/haulmont/cuba/cli/generation/TemplateProcessor.kt index 71387b5..c788213 100644 --- a/src/main/kotlin/com/haulmont/cuba/cli/generation/TemplateProcessor.kt +++ b/src/main/kotlin/com/haulmont/cuba/cli/generation/TemplateProcessor.kt @@ -67,7 +67,7 @@ class TemplateProcessor(templateBasePath: Path, private val bindings: Map val outputFile = inputPath.toAbsolutePath().toString() .replace(baseTemplatePath, targetDirectoryPath) @@ -151,20 +152,20 @@ class TemplateProcessor(templateBasePath: Path, private val bindings: Map Boolean \ No newline at end of file diff --git a/src/main/resources/com/haulmont/cuba/cli/cubaplugin/project/messages.properties b/src/main/resources/com/haulmont/cuba/cli/cubaplugin/project/messages.properties index f9b067e..b8e5df7 100644 --- a/src/main/resources/com/haulmont/cuba/cli/cubaplugin/project/messages.properties +++ b/src/main/resources/com/haulmont/cuba/cli/cubaplugin/project/messages.properties @@ -14,11 +14,5 @@ # limitations under the License. # -oracleDbTips=\ -@|white You have selected Oracle Database.\n\n\ -Oracle does not allow to redistribute its JDBC driver, so do the following:\n\ -> Download ojdbc6.jar from www.oracle.com.\n\ -> Run `gradle setupTomcat deploy`, then copy ojdbc6.jar into {your_project}/deploy/tomcat/lib directory.|@ - databases=HSQLDB,PostgreSQL,Microsoft SQL Server,Microsoft SQL Server 2005,Microsoft SQL Server 2012+,Oracle Database,MySQL databaseAliases=hsql,postgresql,msql,msql2005,msql2012,oracle,mysql \ No newline at end of file diff --git a/src/main/resources/com/haulmont/cuba/cli/cubaplugin/templates/project/7.2/build.gradle b/src/main/resources/com/haulmont/cuba/cli/cubaplugin/templates/project/7.2/build.gradle index f5920f4..3ce633f 100644 --- a/src/main/resources/com/haulmont/cuba/cli/cubaplugin/templates/project/7.2/build.gradle +++ b/src/main/resources/com/haulmont/cuba/cli/cubaplugin/templates/project/7.2/build.gradle @@ -38,7 +38,6 @@ def webModule = project(":${modulePrefix}-web") def servletApi = 'javax.servlet:javax.servlet-api:3.1.0' -apply(plugin: 'idea') apply(plugin: 'cuba') #if ( $project.kotlinSupport ) apply(plugin: 'org.jetbrains.kotlin.jvm') @@ -50,9 +49,6 @@ cuba { version = '0.1' isSnapshot = true } - tomcat { - dir = "$project.rootDir/deploy/tomcat" - } } dependencies { @@ -65,7 +61,6 @@ def ${project.database.driverDependencyName} = ${project.database.driverDependen configure([globalModule, coreModule, webModule]) { apply(plugin: 'java') apply(plugin: 'maven') - apply(plugin: 'idea') apply(plugin: 'cuba') #if ( $project.kotlinSupport ) apply(plugin: 'org.jetbrains.kotlin.jvm') @@ -86,6 +81,9 @@ configure([globalModule, coreModule, webModule]) { artifacts { archives sourceJar } + test { + useJUnitPlatform() + } } configure(globalModule) { @@ -126,14 +124,7 @@ configure(coreModule) { } task cleanConf(description: 'Cleans up conf directory') { - doLast { - def dir = new File(cuba.tomcat.dir, "/conf/${modulePrefix}-core") - if (dir.isDirectory()) { - ant.delete(includeemptydirs: true) { - fileset(dir: dir, includes: '**/*', excludes: 'local.app.properties') - } - } - } + delete "$cuba.appHome/${modulePrefix}-core/conf" } task deploy(dependsOn: [assemble, cleanConf], type: CubaDeployment) { @@ -142,25 +133,9 @@ configure(coreModule) { } task createDb(dependsOn: assembleDbScripts, description: 'Creates local database', type: CubaDbCreation) { -#if (${project.database.connectionParams} != "") - connectionParams = '${project.database.connectionParams}' -#end - dbms = '${project.database.driverDependencyName}' - host = 'localhost' - dbName = '${project.namespace}' - dbUser = '${project.database.username}' - dbPassword = '${project.database.password}' } task updateDb(dependsOn: assembleDbScripts, description: 'Updates local database', type: CubaDbUpdate) { -#if (${project.database.connectionParams} != "") - connectionParams = '${project.database.connectionParams}' -#end - dbms = '${project.database.driverDependencyName}' - host = 'localhost' - dbName = '${project.namespace}' - dbUser = '${project.database.username}' - dbPassword = '${project.database.password}' } #if (${project.database.driverDependencyName} == "hsql") @@ -184,7 +159,6 @@ configure(webModule) { dependencies { compileOnly(servletApi) compile(globalModule) - } task webArchive(type: Zip) { @@ -200,7 +174,7 @@ configure(webModule) { task deployConf(type: Copy) { from file('src') include "${project.rootPackageDirectory}/**" - into "$cuba.tomcat.dir/conf/${modulePrefix}" + into "$cuba.appHome/${modulePrefix}/conf" } task clearMessagesCache(type: CubaClearMessagesCache) { @@ -209,14 +183,7 @@ configure(webModule) { deployConf.dependsOn clearMessagesCache task cleanConf(description: 'Cleans up conf directory') { - doLast { - def dir = new File(cuba.tomcat.dir, "/conf/${modulePrefix}") - if (dir.isDirectory()) { - ant.delete(includeemptydirs: true) { - fileset(dir: dir, includes: '**/*', excludes: 'local.app.properties') - } - } - } + delete "$cuba.appHome/${modulePrefix}/conf" } task deploy(dependsOn: [assemble, cleanConf], type: CubaDeployment) { diff --git a/src/main/resources/com/haulmont/cuba/cli/cubaplugin/templates/project/7.2/modules/core/src/$[project.rootPackage]/app.properties b/src/main/resources/com/haulmont/cuba/cli/cubaplugin/templates/project/7.2/modules/core/src/$[project.rootPackage]/app.properties index dfd1960..9ef2935 100644 --- a/src/main/resources/com/haulmont/cuba/cli/cubaplugin/templates/project/7.2/modules/core/src/$[project.rootPackage]/app.properties +++ b/src/main/resources/com/haulmont/cuba/cli/cubaplugin/templates/project/7.2/modules/core/src/$[project.rootPackage]/app.properties @@ -24,4 +24,17 @@ cuba.anonymousSessionId = b55843a7-3425-91cd-b721-7f9de29f104e cuba.webContextName = app-core cuba.availableLocales = English|en -cuba.localeSelectVisible = false \ No newline at end of file +cuba.localeSelectVisible = false + +cuba.dataSourceProvider = application +cuba.dataSource.username = ${project.database.username} +cuba.dataSource.password = ${project.database.password} +cuba.dataSource.dbName = ${project.namespace} +cuba.dataSource.host = localhost +#if( ! ${project.database.connectionParams} ) +cuba.dataSource.connectionParams = ${project.database.connectionParams} +#end +#if( ${project.database.database} == "Microsoft SQL Server 2005" ) +cuba.dataSource.connectionTestQuery=select 1 +#end +cuba.dataSource.driverClassName = ${project.database.driver} \ No newline at end of file diff --git a/src/main/resources/com/haulmont/cuba/cli/cubaplugin/templates/project/7.2/modules/core/test/$[project.rootPackage]/${project.testContainerPrefix}TestContainer.java b/src/main/resources/com/haulmont/cuba/cli/cubaplugin/templates/project/7.2/modules/core/test/$[project.rootPackage]/${project.testContainerPrefix}TestContainer.java new file mode 100644 index 0000000..2023ce9 --- /dev/null +++ b/src/main/resources/com/haulmont/cuba/cli/cubaplugin/templates/project/7.2/modules/core/test/$[project.rootPackage]/${project.testContainerPrefix}TestContainer.java @@ -0,0 +1,54 @@ +package ${project.rootPackage}; + +import com.haulmont.cuba.testsupport.TestContainer; +import org.junit.jupiter.api.extension.ExtensionContext; + +import java.util.ArrayList; +import java.util.Arrays; + +public class ${project.testContainerPrefix}TestContainer extends TestContainer { + + public ${project.testContainerPrefix}TestContainer() { + super(); + //noinspection ArraysAsListWithZeroOrOneArgument + appComponents = new ArrayList<>(Arrays.asList( + // list add-ons here: "com.haulmont.reports", "com.haulmont.addon.bproc", etc.<% + "com.haulmont.cuba" + )); + appPropertiesFiles = Arrays.asList( + // List the files defined in your web.xml + // in appPropertiesConfig context parameter of the core module + "${project.rootPackageDirectory}/app.properties", + // Add this file which is located in CUBA and defines some properties + // specifically for test environment. You can replace it with your own + // or add another one in the end. + "${project.rootPackageDirectory}/test-app.properties"); + autoConfigureDataSource(); + } + + public static class Common extends ${project.testContainerPrefix}TestContainer { + + public static final ${project.testContainerPrefix}TestContainer.Common INSTANCE = new ${project.testContainerPrefix}TestContainer.Common(); + + private static volatile boolean initialized; + + private Common() { + } + + @Override + public void beforeAll(ExtensionContext extensionContext) throws Exception { + if (!initialized) { + super.beforeAll(extensionContext); + initialized = true; + } + setupContext(); + } + + @SuppressWarnings("RedundantThrows") + @Override + public void afterAll(ExtensionContext extensionContext) throws Exception { + cleanupContext(); + // never stops - do not call super + } + } +} \ No newline at end of file diff --git a/src/main/resources/com/haulmont/cuba/cli/cubaplugin/templates/project/7.2/modules/core/test/$[project.rootPackage]/${project.testContainerPrefix}TestContainer.kt b/src/main/resources/com/haulmont/cuba/cli/cubaplugin/templates/project/7.2/modules/core/test/$[project.rootPackage]/${project.testContainerPrefix}TestContainer.kt new file mode 100644 index 0000000..3e23ce4 --- /dev/null +++ b/src/main/resources/com/haulmont/cuba/cli/cubaplugin/templates/project/7.2/modules/core/test/$[project.rootPackage]/${project.testContainerPrefix}TestContainer.kt @@ -0,0 +1,51 @@ +package ${project.rootPackage} + +import com.haulmont.cuba.testsupport.TestContainer +import org.junit.jupiter.api.extension.ExtensionContext + +open class ${project.testContainerPrefix}TestContainer : TestContainer() { + + init { + appComponents = mutableListOf( + // list add-ons here: + // "com.haulmont.reports", + // "com.haulmont.addon.bproc", + "com.haulmont.cuba" + ) + appPropertiesFiles = mutableListOf( + // List the files defined in your web.xml + // in appPropertiesConfig context parameter of the core module + "${project.rootPackageDirectory}/app.properties", + // Add this file which is located in CUBA and defines some properties + // specifically for test environment. You can replace it with your own + // or add another one in the end. + "${project.rootPackageDirectory}/test-app.properties") + + this.autoConfigureDataSource() + } + + class Common private constructor() : ${project.testContainerPrefix}TestContainer() { + + @Throws(Throwable::class) + override fun beforeAll(extensionContext: ExtensionContext) { + if (!initialized) { + super.beforeAll(extensionContext) + initialized = true + } + setupContext() + } + + override fun afterAll(extensionContext: ExtensionContext) { + cleanupContext() + // never stops - do not call super + } + + companion object { + + val INSTANCE = Common() + + @Volatile + private var initialized: Boolean = false + } + } +} \ No newline at end of file diff --git a/src/main/resources/com/haulmont/cuba/cli/cubaplugin/templates/project/7.2/modules/core/test/$[project.rootPackage]/AppTestContainer.java b/src/main/resources/com/haulmont/cuba/cli/cubaplugin/templates/project/7.2/modules/core/test/$[project.rootPackage]/AppTestContainer.java deleted file mode 100644 index 1332a4a..0000000 --- a/src/main/resources/com/haulmont/cuba/cli/cubaplugin/templates/project/7.2/modules/core/test/$[project.rootPackage]/AppTestContainer.java +++ /dev/null @@ -1,78 +0,0 @@ -package ${project.rootPackage}; - -import com.haulmont.bali.util.Dom4j; -import com.haulmont.cuba.testsupport.TestContainer; -import org.dom4j.Document; -import org.dom4j.Element; - -import java.io.File; -import java.util.ArrayList; -import java.util.Arrays; - -public class AppTestContainer extends TestContainer { - - public AppTestContainer() { - super(); - appComponents = new ArrayList<>(Arrays.asList( - "com.haulmont.cuba" - // add CUBA premium add-ons here - // "com.haulmont.bpm", - // "com.haulmont.charts", - // "com.haulmont.fts", - // "com.haulmont.reports", - // and custom app components if any - )); - appPropertiesFiles = Arrays.asList( - // List the files defined in your web.xml - // in appPropertiesConfig context parameter of the core module - "${project.rootPackageDirectory}/app.properties", - // Add this file which is located in CUBA and defines some properties - // specifically for test environment. You can replace it with your own - // or add another one in the end. - "test-app.properties"); - initDbProperties(); - } - - private void initDbProperties() { - File contextXmlFile = new File("modules/core/web/META-INF/context.xml"); - if (!contextXmlFile.exists()) { - contextXmlFile = new File("web/META-INF/context.xml"); - } - if (!contextXmlFile.exists()) { - throw new RuntimeException("Cannot find 'context.xml' file to read database connection properties. " + - "You can set them explicitly in this method."); - } - Document contextXmlDoc = Dom4j.readDocument(contextXmlFile); - Element resourceElem = contextXmlDoc.getRootElement().element("Resource"); - - dbDriver = resourceElem.attributeValue("driverClassName"); - dbUrl = resourceElem.attributeValue("url"); - dbUser = resourceElem.attributeValue("username"); - dbPassword = resourceElem.attributeValue("password"); - } - - public static class Common extends AppTestContainer { - - public static final AppTestContainer.Common INSTANCE = new AppTestContainer.Common(); - - private static volatile boolean initialized; - - private Common() { - } - - @Override - public void before() throws Throwable { - if (!initialized) { - super.before(); - initialized = true; - } - setupContext(); - } - - @Override - public void after() { - cleanupContext(); - // never stops - do not call super - } - } -} \ No newline at end of file diff --git a/src/main/resources/com/haulmont/cuba/cli/cubaplugin/templates/project/7.2/modules/core/test/$[project.rootPackage]/core/SampleIntegrationTest.java b/src/main/resources/com/haulmont/cuba/cli/cubaplugin/templates/project/7.2/modules/core/test/$[project.rootPackage]/core/SampleIntegrationTest.java index da55477..f699388 100644 --- a/src/main/resources/com/haulmont/cuba/cli/cubaplugin/templates/project/7.2/modules/core/test/$[project.rootPackage]/core/SampleIntegrationTest.java +++ b/src/main/resources/com/haulmont/cuba/cli/cubaplugin/templates/project/7.2/modules/core/test/$[project.rootPackage]/core/SampleIntegrationTest.java @@ -1,6 +1,6 @@ package ${project.rootPackage}.core; -import ${project.rootPackage}.AppTestContainer; +import ${project.rootPackage}.${project.testContainerPrefix}TestContainer; import com.haulmont.cuba.core.EntityManager; import com.haulmont.cuba.core.Persistence; import com.haulmont.cuba.core.Transaction; @@ -9,33 +9,29 @@ import com.haulmont.cuba.core.global.DataManager; import com.haulmont.cuba.core.global.Metadata; import com.haulmont.cuba.security.entity.User; -import org.junit.After; -import org.junit.Before; -import org.junit.ClassRule; -import org.junit.Test; +import org.junit.jupiter.api.*; +import org.junit.jupiter.api.extension.RegisterExtension; import java.util.List; -import static org.junit.Assert.assertEquals; - public class SampleIntegrationTest { - @ClassRule - public static AppTestContainer cont = AppTestContainer.Common.INSTANCE; + @RegisterExtension + public static ${project.testContainerPrefix}TestContainer cont = ${project.testContainerPrefix}TestContainer.Common.INSTANCE; - private Metadata metadata; - private Persistence persistence; - private DataManager dataManager; + private static Metadata metadata; + private static Persistence persistence; + private static DataManager dataManager; - @Before - public void setUp() throws Exception { + @BeforeAll + public static void beforeAll() throws Exception { metadata = cont.metadata(); persistence = cont.persistence(); dataManager = AppBeans.get(DataManager.class); } - @After - public void tearDown() throws Exception { + @AfterAll + public static void afterAll() throws Exception { } @Test @@ -47,7 +43,7 @@ public void testLoadUser() { query.setParameter("userLogin", "admin"); List users = query.getResultList(); tx.commit(); - assertEquals(1, users.size()); + Assertions.assertEquals(1, users.size()); } } } \ No newline at end of file diff --git a/src/main/resources/com/haulmont/cuba/cli/cubaplugin/templates/project/7.2/modules/core/test/$[project.rootPackage]/core/SampleIntegrationTest.kt b/src/main/resources/com/haulmont/cuba/cli/cubaplugin/templates/project/7.2/modules/core/test/$[project.rootPackage]/core/SampleIntegrationTest.kt new file mode 100644 index 0000000..6d8f30a --- /dev/null +++ b/src/main/resources/com/haulmont/cuba/cli/cubaplugin/templates/project/7.2/modules/core/test/$[project.rootPackage]/core/SampleIntegrationTest.kt @@ -0,0 +1,55 @@ +package ${project.rootPackage}.core + +import ${project.rootPackage}.${jproject.testContainerPrefix}TestContainer +import com.haulmont.cuba.core.Persistence +import com.haulmont.cuba.core.global.AppBeans +import com.haulmont.cuba.core.global.DataManager +import com.haulmont.cuba.core.global.Metadata +import com.haulmont.cuba.security.entity.User +import org.junit.jupiter.api.AfterAll +import org.junit.jupiter.api.Assertions +import org.junit.jupiter.api.BeforeAll +import org.junit.jupiter.api.Test +import org.junit.jupiter.api.extension.RegisterExtension + +class SampleIntegrationTest { + + @Test + fun testLoadUser() { + persistence.createTransaction().use { tx -> + val em = persistence.entityManager + val query = em.createQuery( + "select u from sec\$User u where u.login = :userLogin", User::class.java) + query.setParameter("userLogin", "admin") + val users = query.resultList + tx.commit() + Assertions.assertEquals(1, users.size) + } + } + + companion object { + + private lateinit var metadata: Metadata + private lateinit var persistence: Persistence + private lateinit var dataManager: DataManager + + @JvmField + @RegisterExtension + val cont: ${jproject.testContainerPrefix}TestContainer = ${jproject.testContainerPrefix}TestContainer.Common.INSTANCE + + @BeforeAll + @JvmStatic + @Throws(Exception::class) + fun beforeAll() { + metadata = cont.metadata() + persistence = cont.persistence() + dataManager = AppBeans.get(DataManager::class.java) + } + + @AfterAll + @JvmStatic + @Throws(Exception::class) + fun afterAll() { + } + } +} \ No newline at end of file diff --git a/src/main/resources/com/haulmont/cuba/cli/cubaplugin/templates/project/7.2/modules/core/test/$[project.rootPackage]/test-app.properties b/src/main/resources/com/haulmont/cuba/cli/cubaplugin/templates/project/7.2/modules/core/test/$[project.rootPackage]/test-app.properties new file mode 100644 index 0000000..afba01a --- /dev/null +++ b/src/main/resources/com/haulmont/cuba/cli/cubaplugin/templates/project/7.2/modules/core/test/$[project.rootPackage]/test-app.properties @@ -0,0 +1,8 @@ +cuba.springContextConfig = +${project.rootPackageDirectory}/spring.xml \\ + com/haulmont/cuba/testsupport/test-spring.xml \\ + ${project.rootPackageDirectory}/test-spring.xml + +${ 'cuba.confDir=${user.dir}/build/test-home/${cuba.webContextName}/conf' } +${ 'cuba.logDir=${user.dir}/build/test-home/${cuba.webContextName}/logs' } +${ 'cuba.tempDir=${user.dir}/build/test-home/${cuba.webContextName}/temp' } +${ 'cuba.dataDir=${user.dir}/build/test-home/${cuba.webContextName}/work' } \ No newline at end of file diff --git a/src/main/resources/com/haulmont/cuba/cli/cubaplugin/templates/project/7.2/modules/core/test/$[project.rootPackage]/test-spring.xml b/src/main/resources/com/haulmont/cuba/cli/cubaplugin/templates/project/7.2/modules/core/test/$[project.rootPackage]/test-spring.xml new file mode 100644 index 0000000..dec5d53 --- /dev/null +++ b/src/main/resources/com/haulmont/cuba/cli/cubaplugin/templates/project/7.2/modules/core/test/$[project.rootPackage]/test-spring.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/src/main/resources/com/haulmont/cuba/cli/cubaplugin/templates/project/7.2/modules/core/web/META-INF/context.xml b/src/main/resources/com/haulmont/cuba/cli/cubaplugin/templates/project/7.2/modules/core/web/META-INF/context.xml index 61dd163..3837837 100644 --- a/src/main/resources/com/haulmont/cuba/cli/cubaplugin/templates/project/7.2/modules/core/web/META-INF/context.xml +++ b/src/main/resources/com/haulmont/cuba/cli/cubaplugin/templates/project/7.2/modules/core/web/META-INF/context.xml @@ -1,24 +1,4 @@ - - - - diff --git a/src/main/resources/com/haulmont/cuba/cli/cubaplugin/templates/project/7.2/modules/web/test/$[project.rootPackage]/${project.testContainerPrefix}WebTestContainer.java b/src/main/resources/com/haulmont/cuba/cli/cubaplugin/templates/project/7.2/modules/web/test/$[project.rootPackage]/${project.testContainerPrefix}WebTestContainer.java new file mode 100644 index 0000000..ce496c1 --- /dev/null +++ b/src/main/resources/com/haulmont/cuba/cli/cubaplugin/templates/project/7.2/modules/web/test/$[project.rootPackage]/${project.testContainerPrefix}WebTestContainer.java @@ -0,0 +1,51 @@ +package ${project.rootPackage}; + +import com.haulmont.cuba.web.testsupport.TestContainer; + +import java.util.ArrayList; +import java.util.Arrays; + +public class ${project.testContainerPrefix}WebTestContainer extends TestContainer { + + public ${project.testContainerPrefix}WebTestContainer() { + appComponents = new ArrayList<>(Arrays.asList( + "com.haulmont.cuba" + // add CUBA add-ons and custom app components here + )); + appPropertiesFiles = Arrays.asList( + // List the files defined in your web.xml + // in appPropertiesConfig context parameter of the web module + "${project.rootPackageDirectory}/web-app.properties", + // Add this file which is located in CUBA and defines some properties + // specifically for test environment. You can replace it with your own + // or add another one in the end. + "com/haulmont/cuba/web/testsupport/test-web-app.properties" + ); + } + + public static class Common extends ${project.testContainerPrefix}WebTestContainer { + + // A common singleton instance of the test container which is initialized once for all tests + public static final ${project.testContainerPrefix}WebTestContainer.Common INSTANCE = new ${project.testContainerPrefix}WebTestContainer.Common(); + + private static volatile boolean initialized; + + private Common() { + } + + @Override + public void before() throws Throwable { + if (!initialized) { + super.before(); + initialized = true; + } + setupContext(); + } + + @Override + public void after() { + cleanupContext(); + // never stops - do not call super + } + } +} \ No newline at end of file diff --git a/src/main/resources/com/haulmont/cuba/cli/cubaplugin/templates/project/7.2/modules/web/test/$[project.rootPackage]/${project.testContainerPrefix}WebTestContainer.kt b/src/main/resources/com/haulmont/cuba/cli/cubaplugin/templates/project/7.2/modules/web/test/$[project.rootPackage]/${project.testContainerPrefix}WebTestContainer.kt new file mode 100644 index 0000000..9aedf7a --- /dev/null +++ b/src/main/resources/com/haulmont/cuba/cli/cubaplugin/templates/project/7.2/modules/web/test/$[project.rootPackage]/${project.testContainerPrefix}WebTestContainer.kt @@ -0,0 +1,46 @@ +package ${project.rootPackage} + +import com.haulmont.cuba.web.testsupport.TestContainer +import java.util.* + +open class ${project.testContainerPrefix}WebTestContainer : TestContainer() { + + init { + appComponents = ArrayList(Arrays.asList( + "com.haulmont.cuba" // add CUBA add-ons and custom app components here + )) + appPropertiesFiles = Arrays.asList( // List the files defined in your web.xml + // in appPropertiesConfig context parameter of the web module + "${project.rootPackageDirectory}/web-app.properties", // Add this file which is located in CUBA and defines some properties + // specifically for test environment. You can replace it with your own + // or add another one in the end. + "com/haulmont/cuba/web/testsupport/test-web-app.properties" + ) + } + + class Common private constructor() : ${project.testContainerPrefix}WebTestContainer() { + + @Throws(Throwable::class) + override fun before() { + if (!initialized) { + super.before() + initialized = true + } + setupContext() + } + + override fun after() { + cleanupContext() + // never stops - do not call super + } + + companion object { + + // A common singleton instance of the test container which is initialized once for all tests + val INSTANCE = Common() + @Volatile + private var initialized = false + } + + } +} \ No newline at end of file