generator-jhipster 7.7.0 → 7.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -2
- package/generators/app/index.js +10 -0
- package/generators/ci-cd/index.js +1 -1
- package/generators/ci-cd/templates/github-actions.yml.ejs +4 -4
- package/generators/client/files-common.js +1 -2
- package/generators/client/files-react.js +25 -2
- package/generators/client/index.js +1 -1
- package/generators/client/needle-api/needle-client-react.js +11 -8
- package/generators/client/templates/angular/angular.json.ejs +1 -9
- package/generators/client/templates/angular/jest.conf.js.ejs +1 -1
- package/generators/client/templates/angular/package.json +17 -18
- package/generators/client/templates/angular/package.json.ejs +1 -1
- package/generators/client/templates/angular/src/main/webapp/app/admin/user-management/list/user-management.component.ts.ejs +1 -1
- package/generators/client/templates/angular/src/main/webapp/app/core/util/data-util.service.ts.ejs +1 -1
- package/generators/client/templates/angular/src/main/webapp/app/core/util/parse-links.service.ts.ejs +1 -1
- package/generators/client/templates/angular/webpack/webpack.custom.js.ejs +12 -1
- package/generators/client/templates/common/package.json +7 -6
- package/generators/client/templates/common/webpack/webpack.microfrontend.js.jhi.ejs +2 -3
- package/generators/client/templates/react/.eslintrc.json.ejs +1 -1
- package/generators/client/templates/react/jest.conf.js.ejs +1 -1
- package/generators/client/templates/react/package.json +30 -31
- package/generators/client/templates/react/package.json.ejs +1 -0
- package/generators/client/templates/react/src/main/webapp/app/app.scss.ejs +1 -1
- package/generators/client/templates/react/src/main/webapp/app/config/store.ts.ejs +53 -6
- package/generators/client/templates/react/src/main/webapp/app/config/translation-middleware.ts.ejs +58 -0
- package/generators/client/templates/react/src/main/webapp/app/entities/menu.tsx.ejs +45 -0
- package/generators/client/templates/react/src/main/webapp/app/entities/reducers.ts.ejs +25 -0
- package/generators/client/templates/react/src/main/webapp/app/entities/routes.tsx.ejs +47 -0
- package/generators/client/templates/react/src/main/webapp/app/index.tsx.ejs +7 -7
- package/generators/client/templates/react/src/main/webapp/app/main.tsx.ejs +19 -0
- package/generators/client/templates/react/src/main/webapp/app/modules/administration/logs/logs.tsx.ejs +1 -1
- package/generators/client/templates/react/src/main/webapp/app/modules/administration/user-management/user-management.tsx.ejs +2 -1
- package/generators/client/templates/react/src/main/webapp/app/modules/login/login-modal.tsx.ejs +5 -1
- package/generators/client/templates/react/src/main/webapp/app/routes.tsx.ejs +24 -7
- package/generators/client/templates/react/src/main/webapp/app/shared/error/error-loading.tsx.ejs +15 -0
- package/generators/client/templates/react/src/main/webapp/app/shared/layout/menus/entities.tsx.ejs +34 -6
- package/generators/client/templates/react/src/main/webapp/app/shared/reducers/index.ts.ejs +9 -2
- package/generators/client/templates/react/src/main/webapp/app/shared/reducers/locale.spec.ts.ejs +9 -3
- package/generators/client/templates/react/src/main/webapp/app/shared/reducers/locale.ts.ejs +21 -5
- package/generators/client/templates/react/src/main/webapp/app/typings.d.ts.ejs +15 -0
- package/generators/client/templates/react/src/main/webapp/microfrontends/entities-menu.tsx.ejs +3 -0
- package/generators/client/templates/react/src/main/webapp/microfrontends/entities-routes.tsx.ejs +3 -0
- package/generators/client/templates/react/tsconfig.json.ejs +3 -3
- package/generators/client/templates/react/tsconfig.test.json.ejs +9 -1
- package/generators/client/templates/react/webpack/webpack.common.js.ejs +6 -13
- package/generators/client/templates/react/webpack/webpack.dev.js.ejs +7 -8
- package/generators/client/templates/react/webpack/webpack.microfrontend.js.jhi.react.ejs +99 -0
- package/generators/client/templates/react/webpack/webpack.prod.js.ejs +31 -21
- package/generators/client/templates/vue/package.json +16 -17
- package/generators/client/templates/vue/package.json.ejs +1 -1
- package/generators/client/templates/vue/src/main/webapp/app/core/jhi-navbar/jhi-navbar.component.ts.ejs +1 -0
- package/generators/client/templates/vue/src/main/webapp/app/shared/data/data-utils.service.ts.ejs +1 -1
- package/generators/client/templates/vue/src/test/javascript/jest.conf.js.ejs +2 -2
- package/generators/client/templates/vue/tsconfig.json.ejs +0 -3
- package/generators/client/templates/vue/webpack/webpack.common.js.ejs +6 -2
- package/generators/common/templates/package.json +2 -2
- package/generators/docker-compose/index.js +9 -5
- package/generators/entity/index.js +34 -19
- package/generators/entity-client/index.js +8 -0
- package/generators/entity-client/templates/angular/src/main/webapp/app/entities/list/entity-management.component.ts.ejs +1 -1
- package/generators/entity-client/templates/angular/src/main/webapp/app/entities/update/entity-management-update.component.ts.ejs +1 -1
- package/generators/entity-client/templates/common/src/test/javascript/cypress/integration/entity/entity.spec.ts.ejs +1 -0
- package/generators/entity-client/templates/react/src/main/webapp/app/entities/entity-delete-dialog.tsx.ejs +3 -3
- package/generators/entity-client/templates/react/src/main/webapp/app/entities/entity-detail.tsx.ejs +5 -4
- package/generators/entity-client/templates/react/src/main/webapp/app/entities/entity-update.tsx.ejs +19 -18
- package/generators/entity-client/templates/react/src/main/webapp/app/entities/entity.reducer.ts.ejs +2 -2
- package/generators/entity-client/templates/react/src/main/webapp/app/entities/entity.tsx.ejs +21 -20
- package/generators/entity-i18n/templates/i18n/entity_fr.json.ejs +1 -1
- package/generators/entity-server/files.js +30 -10
- package/generators/entity-server/index.js +19 -1
- package/generators/entity-server/templates/couchbase/src/main/java/package/domain/Entity.java.jhi.spring_data_couchbase.ejs +1 -1
- package/generators/entity-server/templates/couchbase/src/main/java/package/repository/EntityRepository.java.ejs +31 -8
- package/generators/entity-server/templates/partials/update_template.ejs +77 -0
- package/generators/entity-server/templates/reactive/partials/save_template.ejs +1 -1
- package/generators/entity-server/templates/reactive/partials/update_template.ejs +41 -0
- package/generators/entity-server/templates/src/main/java/package/common/get_all_template.ejs +5 -5
- package/generators/entity-server/templates/src/main/java/package/common/get_template.ejs +1 -1
- package/generators/entity-server/templates/src/main/java/package/common/inject_template.ejs +13 -4
- package/generators/entity-server/templates/src/main/java/package/common/patch_template.ejs +2 -2
- package/generators/entity-server/templates/src/main/java/package/domain/Entity.java.jhi.ejs +2 -1
- package/generators/entity-server/templates/src/main/java/package/domain/Entity.java.jhi.javax_lifecycle_events.ejs +31 -0
- package/generators/entity-server/templates/src/main/java/package/domain/Entity.java.jhi.spring_data_persistable.ejs +54 -0
- package/generators/entity-server/templates/src/main/java/package/domain/Entity.java.jhi.spring_data_reactive.ejs +1 -1
- package/generators/entity-server/templates/src/main/java/package/domain/EntityCallback.java.ejs +43 -0
- package/generators/entity-server/templates/src/main/java/package/repository/EntityRepository.java.ejs +6 -6
- package/generators/entity-server/templates/src/main/java/package/repository/EntityRepositoryInternalImpl_reactive.java.ejs +13 -16
- package/generators/entity-server/templates/src/main/java/package/repository/EntityRepositoryWithBagRelationshipsImpl.java.ejs +4 -3
- package/generators/entity-server/templates/src/main/java/package/repository/EntityRepository_reactive.java.ejs +15 -23
- package/generators/entity-server/templates/src/main/java/package/repository/EntitySqlHelper_reactive.java.ejs +2 -2
- package/generators/entity-server/templates/src/main/java/package/repository/rowmapper/EntityRowMapper.java.ejs +2 -2
- package/generators/entity-server/templates/src/main/java/package/repository/search/EntitySearchRepository.java.ejs +12 -25
- package/generators/entity-server/templates/src/main/java/package/service/EntityService.java.ejs +10 -2
- package/generators/entity-server/templates/src/main/java/package/service/impl/EntityServiceImpl.java.ejs +21 -5
- package/generators/entity-server/templates/src/main/java/package/service/mapper/EntityMapper.java.ejs +61 -90
- package/generators/entity-server/templates/src/main/java/package/web/rest/EntityResource.java.ejs +6 -4
- package/generators/entity-server/templates/src/test/java/package/web/rest/EntityResourceIT.java.ejs +28 -15
- package/generators/generator-base-private.js +1 -1
- package/generators/generator-base.js +29 -0
- package/generators/generator-constants.js +5 -5
- package/generators/generator-transforms.js +0 -1
- package/generators/gradle/constants.cjs +1 -1
- package/generators/maven/files.cjs +0 -1
- package/generators/maven/templates/.mvn/wrapper/maven-wrapper.jar +0 -0
- package/generators/maven/templates/.mvn/wrapper/maven-wrapper.properties +18 -2
- package/generators/maven/templates/mvnw +13 -7
- package/generators/maven/templates/mvnw.cmd +19 -13
- package/generators/maven/templates/pom.xml.jhi.ejs +1 -1
- package/generators/server/cleanup.js +19 -3
- package/generators/server/files.js +101 -17
- package/generators/server/index.js +11 -5
- package/generators/server/needle-api/needle-server-gradle.js +38 -0
- package/generators/server/templates/.mvn/jvm.config +1 -0
- package/generators/server/templates/.mvn/wrapper/maven-wrapper.jar +0 -0
- package/generators/server/templates/.mvn/wrapper/maven-wrapper.properties +18 -2
- package/generators/server/templates/build.gradle.ejs +7 -5
- package/generators/server/templates/couchbase/src/main/java/package/repository/JHipsterCouchbaseRepository.java.ejs +24 -1
- package/generators/server/templates/devcontainer/Dockerfile.ejs +25 -0
- package/generators/server/templates/devcontainer/devcontainer.json.ejs +64 -0
- package/generators/server/templates/gradle/wrapper/gradle-wrapper.jar +0 -0
- package/generators/server/templates/gradle.properties.ejs +4 -4
- package/generators/server/templates/mvnw +13 -7
- package/generators/server/templates/mvnw.cmd +19 -13
- package/generators/server/templates/pom.xml.ejs +19 -17
- package/generators/server/templates/settings.gradle.ejs +6 -4
- package/generators/server/templates/src/main/docker/app.yml.ejs +2 -6
- package/generators/server/templates/src/main/docker/config/realm-config/jhipster-realm.json.ejs +2 -1
- package/generators/server/templates/src/main/docker/mysql.yml.ejs +1 -0
- package/generators/server/templates/src/main/java/package/config/AsyncConfiguration.java.ejs +6 -0
- package/generators/{client/templates/react/src/main/webapp/app/entities/index.tsx.ejs → server/templates/src/main/java/package/config/KafkaSseConsumer.java.ejs} +8 -14
- package/generators/server/templates/src/main/java/package/config/KafkaSseProducer.java.ejs +30 -0
- package/generators/server/templates/src/main/java/package/config/SecurityConfiguration.java.ejs +12 -10
- package/generators/server/templates/src/main/java/package/repository/EntityManager.java.ejs +3 -3
- package/generators/server/templates/src/main/java/package/security/jwt/JWTFilter.java.ejs +1 -1
- package/generators/server/templates/src/main/java/package/security/jwt/TokenProvider.java.ejs +1 -1
- package/generators/server/templates/src/main/java/package/web/rest/KafkaResource.java.ejs +60 -108
- package/generators/server/templates/src/main/java/package/web/rest/KafkaResource_reactive.java.ejs +74 -0
- package/generators/server/templates/src/main/resources/config/application.yml.ejs +26 -22
- package/generators/server/templates/src/test/java/package/CassandraKeyspaceIT.java.ejs +3 -4
- package/generators/server/templates/src/test/java/package/IntegrationTest.java.ejs +9 -3
- package/generators/server/templates/src/test/java/package/TechnicalStructureTest.java.ejs +0 -3
- package/generators/server/templates/src/test/java/package/config/CassandraTestContainer.java.ejs +122 -0
- package/generators/server/templates/src/test/java/package/config/EmbeddedCassandra.java.ejs +11 -0
- package/generators/server/templates/src/test/java/package/config/EmbeddedKafka.java.ejs +11 -0
- package/generators/server/templates/src/test/java/package/config/EmbeddedMongo.java.ejs +11 -0
- package/generators/server/templates/src/test/java/package/config/KafkaTestContainer.java.ejs +38 -0
- package/generators/server/templates/src/test/java/package/config/MongoDbTestContainer.java.ejs +67 -0
- package/generators/server/templates/src/test/java/package/config/TestContainersSpringContextCustomizerFactory.java.ejs +114 -0
- package/generators/server/templates/src/test/java/package/cucumber/CucumberIT.java.ejs +3 -10
- package/generators/server/templates/src/test/java/package/security/DomainUserDetailsServiceIT.java.ejs +1 -4
- package/generators/server/templates/src/test/java/package/security/jwt/JWTFilterTest.java.ejs +5 -5
- package/generators/server/templates/src/test/java/package/service/MailServiceIT.java.ejs +2 -4
- package/generators/server/templates/src/test/java/package/service/UserServiceIT.java.ejs +1 -4
- package/generators/server/templates/src/test/java/package/web/rest/AccountResourceIT.java.ejs +3 -3
- package/generators/server/templates/src/test/java/package/web/rest/AccountResourceIT_oauth2.java.ejs +1 -4
- package/generators/server/templates/src/test/java/package/web/rest/AccountResourceIT_skipUserManagement.java.ejs +1 -4
- package/generators/server/templates/src/test/java/package/web/rest/KafkaResourceIT.java.ejs +52 -123
- package/generators/server/templates/src/test/java/package/web/rest/KafkaResourceIT_reactive.java.ejs +99 -0
- package/generators/server/templates/src/test/java/package/web/rest/PublicUserResourceIT.java.ejs +7 -10
- package/generators/server/templates/src/test/java/package/web/rest/UserJWTControllerIT.java.ejs +1 -4
- package/generators/server/templates/src/test/java/package/web/rest/UserResourceIT.java.ejs +2 -5
- package/generators/server/templates/src/test/java/package/web/rest/errors/ExceptionTranslatorIT.java.ejs +1 -4
- package/generators/server/templates/src/test/java/package/web/rest/errors/ExceptionTranslatorIT_reactive.java.ejs +1 -4
- package/generators/server/templates/src/test/resources/META-INF/spring.factories.ejs +1 -1
- package/generators/server/templates/src/test/resources/config/application.yml.ejs +21 -20
- package/generators/server/templates/src/test/resources/testcontainers.properties.ejs +1 -0
- package/generators/workspaces/index.js +2 -1
- package/package.json +15 -15
- package/utils/entity.js +2 -0
- package/utils/field.js +8 -3
- package/utils/relationship.js +10 -1
- package/generators/entity-server/templates/src/main/java/package/repository/search/SortToSortBuilderListConverter.java.ejs +0 -25
- package/generators/maven/templates/.mvn/wrapper/MavenWrapperDownloader.java +0 -117
- package/generators/server/templates/.mvn/wrapper/MavenWrapperDownloader.java +0 -117
- package/generators/server/templates/src/main/java/package/config/KafkaProperties.java.ejs +0 -68
- package/generators/server/templates/src/test/java/package/AbstractCassandraTest.java.ejs +0 -125
- package/generators/server/templates/src/test/java/package/MongoDbTestContainerExtension.java.ejs +0 -37
- package/generators/server/templates/src/test/java/package/TestContainersSpringContextCustomizerFactory.java.ejs +0 -24
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
package <%= packageName %>.config;
|
|
2
|
+
|
|
3
|
+
import org.springframework.beans.factory.DisposableBean;
|
|
4
|
+
import org.springframework.beans.factory.InitializingBean;
|
|
5
|
+
import org.slf4j.Logger;
|
|
6
|
+
import org.slf4j.LoggerFactory;
|
|
7
|
+
import org.testcontainers.containers.KafkaContainer;
|
|
8
|
+
import org.testcontainers.containers.output.Slf4jLogConsumer;
|
|
9
|
+
import org.testcontainers.utility.DockerImageName;
|
|
10
|
+
|
|
11
|
+
public class KafkaTestContainer implements InitializingBean, DisposableBean {
|
|
12
|
+
|
|
13
|
+
private KafkaContainer kafkaContainer;
|
|
14
|
+
private static final Logger log = LoggerFactory.getLogger(KafkaTestContainer.class);
|
|
15
|
+
|
|
16
|
+
@Override
|
|
17
|
+
public void destroy() {
|
|
18
|
+
if (null != kafkaContainer && kafkaContainer.isRunning()) {
|
|
19
|
+
kafkaContainer.stop();
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
@Override
|
|
24
|
+
public void afterPropertiesSet() {
|
|
25
|
+
if (null == kafkaContainer) {
|
|
26
|
+
kafkaContainer = new KafkaContainer(DockerImageName.parse("<%= DOCKER_KAFKA %>"))
|
|
27
|
+
.withLogConsumer(new Slf4jLogConsumer(log))
|
|
28
|
+
.withReuse(true);
|
|
29
|
+
}
|
|
30
|
+
if (!kafkaContainer.isRunning()) {
|
|
31
|
+
kafkaContainer.start();
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
public KafkaContainer getKafkaContainer() {
|
|
36
|
+
return kafkaContainer;
|
|
37
|
+
}
|
|
38
|
+
}
|
package/generators/server/templates/src/test/java/package/config/MongoDbTestContainer.java.ejs
ADDED
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
<%#
|
|
2
|
+
Copyright 2013-2022 the original author or authors from the JHipster project.
|
|
3
|
+
|
|
4
|
+
This file is part of the JHipster project, see https://www.jhipster.tech/
|
|
5
|
+
for more information.
|
|
6
|
+
|
|
7
|
+
Licensed under the Apache License, Version 2.0 (the "License");
|
|
8
|
+
you may not use this file except in compliance with the License.
|
|
9
|
+
You may obtain a copy of the License at
|
|
10
|
+
|
|
11
|
+
https://www.apache.org/licenses/LICENSE-2.0
|
|
12
|
+
|
|
13
|
+
Unless required by applicable law or agreed to in writing, software
|
|
14
|
+
distributed under the License is distributed on an "AS IS" BASIS,
|
|
15
|
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
16
|
+
See the License for the specific language governing permissions and
|
|
17
|
+
limitations under the License.
|
|
18
|
+
-%>
|
|
19
|
+
package <%= packageName %>.config;
|
|
20
|
+
|
|
21
|
+
import java.util.Collections;
|
|
22
|
+
|
|
23
|
+
import org.springframework.beans.factory.DisposableBean;
|
|
24
|
+
import org.springframework.beans.factory.InitializingBean;
|
|
25
|
+
import org.slf4j.Logger;
|
|
26
|
+
import org.slf4j.LoggerFactory;
|
|
27
|
+
import org.testcontainers.containers.MongoDBContainer;
|
|
28
|
+
import org.testcontainers.containers.output.Slf4jLogConsumer;
|
|
29
|
+
|
|
30
|
+
public class MongoDbTestContainer implements InitializingBean, DisposableBean {
|
|
31
|
+
private final long memoryInBytes = Math.round(1024 * 1024 * 1024 * 0.6);
|
|
32
|
+
private final long memorySwapInBytes = Math.round(1024 * 1024 * 1024 * 0.8);
|
|
33
|
+
private final long nanoCpu = Math.round(1_000_000_000L * 0.1);
|
|
34
|
+
private static final Logger log = LoggerFactory.getLogger(MongoDbTestContainer.class);
|
|
35
|
+
|
|
36
|
+
private MongoDBContainer mongodbContainer;
|
|
37
|
+
|
|
38
|
+
@Override
|
|
39
|
+
public void destroy() {
|
|
40
|
+
if (null != mongodbContainer && mongodbContainer.isRunning()) {
|
|
41
|
+
mongodbContainer.stop();
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
@Override
|
|
46
|
+
public void afterPropertiesSet() {
|
|
47
|
+
if (null == mongodbContainer) {
|
|
48
|
+
mongodbContainer = new MongoDBContainer("<%= DOCKER_MONGODB %>")
|
|
49
|
+
.withTmpFs(Collections.singletonMap("/testtmpfs", "rw"))
|
|
50
|
+
.withCommand(
|
|
51
|
+
"--nojournal --wiredTigerCacheSizeGB 0.25 --wiredTigerCollectionBlockCompressor none --slowOpSampleRate 0 --setParameter ttlMonitorEnabled=false --setParameter diagnosticDataCollectionEnabled=false --setParameter logicalSessionRefreshMillis=6000000 --setParameter enableFlowControl=false --setParameter oplogFetcherUsesExhaust=false --setParameter disableResumableRangeDeleter=true --setParameter enableShardedIndexConsistencyCheck=false --setParameter enableFinerGrainedCatalogCacheRefresh=false --setParameter readHedgingMode=off --setParameter loadRoutingTableOnStartup=false --setParameter rangeDeleterBatchDelayMS=2000000 --setParameter skipShardingConfigurationChecks=true --setParameter syncdelay=3600"
|
|
52
|
+
)
|
|
53
|
+
.withCreateContainerCmdModifier(cmd ->
|
|
54
|
+
cmd.getHostConfig().withMemory(memoryInBytes).withMemorySwap(memorySwapInBytes).withNanoCPUs(nanoCpu)
|
|
55
|
+
)
|
|
56
|
+
.withLogConsumer(new Slf4jLogConsumer(log))
|
|
57
|
+
.withReuse(true);
|
|
58
|
+
}
|
|
59
|
+
if (!mongodbContainer.isRunning()) {
|
|
60
|
+
mongodbContainer.start();
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
public MongoDBContainer getMongoDBContainer() {
|
|
65
|
+
return mongodbContainer;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
<%#
|
|
2
|
+
Copyright 2013-2022 the original author or authors from the JHipster project.
|
|
3
|
+
|
|
4
|
+
This file is part of the JHipster project, see https://www.jhipster.tech/
|
|
5
|
+
for more information.
|
|
6
|
+
|
|
7
|
+
Licensed under the Apache License, Version 2.0 (the "License");
|
|
8
|
+
you may not use this file except in compliance with the License.
|
|
9
|
+
You may obtain a copy of the License at
|
|
10
|
+
|
|
11
|
+
https://www.apache.org/licenses/LICENSE-2.0
|
|
12
|
+
|
|
13
|
+
Unless required by applicable law or agreed to in writing, software
|
|
14
|
+
distributed under the License is distributed on an "AS IS" BASIS,
|
|
15
|
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
16
|
+
See the License for the specific language governing permissions and
|
|
17
|
+
limitations under the License.
|
|
18
|
+
-%>
|
|
19
|
+
package <%= packageName %>.config;
|
|
20
|
+
|
|
21
|
+
import java.util.List;
|
|
22
|
+
|
|
23
|
+
<%_ if (databaseTypeCassandra) { _%>
|
|
24
|
+
import org.cassandraunit.CQLDataLoader;
|
|
25
|
+
<%_ } _%>
|
|
26
|
+
|
|
27
|
+
import org.slf4j.Logger;
|
|
28
|
+
import org.slf4j.LoggerFactory;
|
|
29
|
+
import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
|
|
30
|
+
import org.springframework.beans.factory.support.DefaultSingletonBeanRegistry;
|
|
31
|
+
import org.springframework.core.annotation.AnnotatedElementUtils;
|
|
32
|
+
|
|
33
|
+
import org.springframework.test.context.ContextConfigurationAttributes;
|
|
34
|
+
import org.springframework.test.context.ContextCustomizer;
|
|
35
|
+
import org.springframework.test.context.ContextCustomizerFactory;
|
|
36
|
+
import org.springframework.boot.test.util.TestPropertyValues;
|
|
37
|
+
<%_ if (databaseTypeCassandra) { _%>
|
|
38
|
+
import org.testcontainers.containers.CassandraContainer;
|
|
39
|
+
<%_ } _%>
|
|
40
|
+
<%_ if (messageBrokerKafka) { _%>
|
|
41
|
+
import org.testcontainers.containers.KafkaContainer;
|
|
42
|
+
<%_ } _%>
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
public class TestContainersSpringContextCustomizerFactory implements ContextCustomizerFactory {
|
|
46
|
+
|
|
47
|
+
private Logger log = LoggerFactory.getLogger(TestContainersSpringContextCustomizerFactory.class);
|
|
48
|
+
<%_ if (messageBrokerKafka) { _%>
|
|
49
|
+
private static KafkaTestContainer kafkaBean;
|
|
50
|
+
<%_ } _%>
|
|
51
|
+
<%_ if (databaseTypeMongodb) { _%>
|
|
52
|
+
private static MongoDbTestContainer mongoDbBean;
|
|
53
|
+
<%_ } _%>
|
|
54
|
+
<%_ if (databaseTypeCassandra) { _%>
|
|
55
|
+
private static CassandraTestContainer cassandraBean;
|
|
56
|
+
<%_ } _%>
|
|
57
|
+
|
|
58
|
+
@Override
|
|
59
|
+
public ContextCustomizer createContextCustomizer(Class<?> testClass, List<ContextConfigurationAttributes> configAttributes) {
|
|
60
|
+
|
|
61
|
+
return (context, mergedConfig) -> {
|
|
62
|
+
ConfigurableListableBeanFactory beanFactory = context.getBeanFactory();
|
|
63
|
+
TestPropertyValues testValues = TestPropertyValues.empty();
|
|
64
|
+
<%_ if (databaseTypeMongodb) { _%>
|
|
65
|
+
EmbeddedMongo mongoAnnotation = AnnotatedElementUtils.findMergedAnnotation(testClass, EmbeddedMongo.class);
|
|
66
|
+
if (null != mongoAnnotation) {
|
|
67
|
+
log.debug("detected the EmbeddedMongo annotation on class {}", testClass.getName());
|
|
68
|
+
if (mongoDbBean == null) {
|
|
69
|
+
log.info("Warming up the mongo database");
|
|
70
|
+
mongoDbBean = new MongoDbTestContainer();
|
|
71
|
+
beanFactory.initializeBean(mongoDbBean, MongoDbTestContainer.class.getName().toLowerCase());
|
|
72
|
+
beanFactory.registerSingleton(MongoDbTestContainer.class.getName().toLowerCase(), mongoDbBean);
|
|
73
|
+
((DefaultSingletonBeanRegistry)beanFactory).registerDisposableBean(MongoDbTestContainer.class.getName().toLowerCase(), mongoDbBean);
|
|
74
|
+
}
|
|
75
|
+
testValues = testValues.and("spring.data.mongodb.uri=" + mongoDbBean.getMongoDBContainer().getReplicaSetUrl());
|
|
76
|
+
}
|
|
77
|
+
<%_ } _%>
|
|
78
|
+
<%_ if (databaseTypeCassandra) { _%>
|
|
79
|
+
EmbeddedCassandra cassandraAnnotation = AnnotatedElementUtils.findMergedAnnotation(testClass, EmbeddedCassandra.class);
|
|
80
|
+
if (null != cassandraAnnotation) {
|
|
81
|
+
log.debug("detected the EmbeddedCassandra annotation on class {}", testClass.getName());
|
|
82
|
+
if (cassandraBean == null) {
|
|
83
|
+
log.info("Warming up the cassandra database");
|
|
84
|
+
cassandraBean = new CassandraTestContainer();
|
|
85
|
+
beanFactory.initializeBean(cassandraBean, CassandraTestContainer.class.getName().toLowerCase());
|
|
86
|
+
beanFactory.registerSingleton(CassandraTestContainer.class.getName().toLowerCase(), cassandraBean);
|
|
87
|
+
((DefaultSingletonBeanRegistry)beanFactory).registerDisposableBean(CassandraTestContainer.class.getName().toLowerCase(), cassandraBean);
|
|
88
|
+
}
|
|
89
|
+
testValues = testValues.and("spring.data.cassandra.port=" + cassandraBean.getCassandraContainer().getMappedPort(CassandraContainer.CQL_PORT))
|
|
90
|
+
.and("spring.data.cassandra.contact-points=" + cassandraBean.getCassandraContainer().getHost())
|
|
91
|
+
.and("spring.data.cassandra.keyspace-name=" + CQLDataLoader.DEFAULT_KEYSPACE_NAME)
|
|
92
|
+
.and("spring.data.cassandra.local-datacenter=" + cassandraBean.getCassandraContainer().getCluster().getMetadata().getAllHosts().iterator().next().getDatacenter())
|
|
93
|
+
.and("spring.data.cassandra.cluster-name=" + cassandraBean.getCassandraContainer().getCluster().getMetadata().getClusterName());
|
|
94
|
+
}
|
|
95
|
+
<%_ } _%>
|
|
96
|
+
|
|
97
|
+
<%_ if (messageBrokerKafka) { _%>
|
|
98
|
+
EmbeddedKafka kafkaAnnotation = AnnotatedElementUtils.findMergedAnnotation(testClass, EmbeddedKafka.class);
|
|
99
|
+
if (null != kafkaAnnotation) {
|
|
100
|
+
log.debug("detected the EmbeddedKafka annotation on class {}", testClass.getName());
|
|
101
|
+
if (kafkaBean == null) {
|
|
102
|
+
log.info("Warming up the kafka broker");
|
|
103
|
+
kafkaBean = new KafkaTestContainer();
|
|
104
|
+
beanFactory.initializeBean(kafkaBean, KafkaTestContainer.class.getName().toLowerCase());
|
|
105
|
+
beanFactory.registerSingleton(KafkaTestContainer.class.getName().toLowerCase(), kafkaBean);
|
|
106
|
+
((DefaultSingletonBeanRegistry)beanFactory).registerDisposableBean(KafkaTestContainer.class.getName().toLowerCase(), kafkaBean);
|
|
107
|
+
}
|
|
108
|
+
testValues = testValues.and("spring.cloud.stream.kafka.binder.brokers=" + kafkaBean.getKafkaContainer().getHost() + ':' + kafkaBean.getKafkaContainer().getMappedPort(KafkaContainer.KAFKA_PORT));
|
|
109
|
+
}
|
|
110
|
+
<%_ } _%>
|
|
111
|
+
testValues.applyTo(context);
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
}
|
|
@@ -18,18 +18,11 @@
|
|
|
18
18
|
-%>
|
|
19
19
|
package <%= packageName %>.cucumber;
|
|
20
20
|
|
|
21
|
-
|
|
22
|
-
import <%= packageName %>.AbstractCassandraTest;
|
|
23
|
-
<%_ } _%>
|
|
24
|
-
<%_ if (databaseTypeNeo4j) { _%>
|
|
25
|
-
import <%= packageName %>.AbstractNeo4jIT;
|
|
26
|
-
<%_ } _%>
|
|
21
|
+
import <%= packageName %>.IntegrationTest;
|
|
27
22
|
import io.cucumber.junit.platform.engine.Cucumber;
|
|
28
23
|
|
|
29
24
|
@Cucumber
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
<%_ } _%>
|
|
33
|
-
class CucumberIT <% if (databaseTypeCassandra) { %>extends AbstractCassandraTest<% } %> {
|
|
25
|
+
@IntegrationTest
|
|
26
|
+
class CucumberIT {
|
|
34
27
|
|
|
35
28
|
}
|
|
@@ -18,9 +18,6 @@
|
|
|
18
18
|
-%>
|
|
19
19
|
package <%= packageName %>.security;
|
|
20
20
|
|
|
21
|
-
<%_ if (databaseTypeCassandra) { _%>
|
|
22
|
-
import <%= packageName %>.AbstractCassandraTest;
|
|
23
|
-
<%_ } _%>
|
|
24
21
|
import <%= packageName %>.IntegrationTest;
|
|
25
22
|
<%_ if (databaseTypeSql && reactive) { _%>
|
|
26
23
|
import <%= packageName %>.config.Constants;
|
|
@@ -64,7 +61,7 @@ import static org.assertj.core.api.Assertions.assertThatExceptionOfType;
|
|
|
64
61
|
@WithMockUser("test-user-one")
|
|
65
62
|
<%_ } _%>
|
|
66
63
|
@IntegrationTest
|
|
67
|
-
class DomainUserDetailsServiceIT
|
|
64
|
+
class DomainUserDetailsServiceIT {
|
|
68
65
|
|
|
69
66
|
private static final String USER_ONE_LOGIN = "test-user-one";
|
|
70
67
|
private static final String USER_ONE_EMAIL = "test-user-one@localhost";
|
package/generators/server/templates/src/test/java/package/security/jwt/JWTFilterTest.java.ejs
CHANGED
|
@@ -93,7 +93,7 @@ class JWTFilterTest {
|
|
|
93
93
|
MockServerWebExchange exchange = MockServerWebExchange.from(request);
|
|
94
94
|
jwtFilter.filter(
|
|
95
95
|
exchange,
|
|
96
|
-
it -> Mono.
|
|
96
|
+
it -> Mono.deferContextual(Mono::just)
|
|
97
97
|
.flatMap(c -> ReactiveSecurityContextHolder.getContext())
|
|
98
98
|
.map(SecurityContext::getAuthentication)
|
|
99
99
|
.doOnSuccess(auth -> assertThat(auth.getName()).isEqualTo("test-user"))
|
|
@@ -123,7 +123,7 @@ class JWTFilterTest {
|
|
|
123
123
|
MockServerWebExchange exchange = MockServerWebExchange.from(request);
|
|
124
124
|
jwtFilter.filter(
|
|
125
125
|
exchange,
|
|
126
|
-
it -> Mono.
|
|
126
|
+
it -> Mono.deferContextual(Mono::just)
|
|
127
127
|
.flatMap(c -> ReactiveSecurityContextHolder.getContext())
|
|
128
128
|
.map(SecurityContext::getAuthentication)
|
|
129
129
|
.doOnSuccess(auth -> assertThat(auth).isNull())
|
|
@@ -149,7 +149,7 @@ class JWTFilterTest {
|
|
|
149
149
|
MockServerWebExchange exchange = MockServerWebExchange.from(request);
|
|
150
150
|
jwtFilter.filter(
|
|
151
151
|
exchange,
|
|
152
|
-
it -> Mono.
|
|
152
|
+
it -> Mono.deferContextual(Mono::just)
|
|
153
153
|
.flatMap(c -> ReactiveSecurityContextHolder.getContext())
|
|
154
154
|
.map(SecurityContext::getAuthentication)
|
|
155
155
|
.doOnSuccess(auth -> assertThat(auth).isNull())
|
|
@@ -175,7 +175,7 @@ class JWTFilterTest {
|
|
|
175
175
|
MockServerWebExchange exchange = MockServerWebExchange.from(request);
|
|
176
176
|
jwtFilter.filter(
|
|
177
177
|
exchange,
|
|
178
|
-
it -> Mono.
|
|
178
|
+
it -> Mono.deferContextual(Mono::just)
|
|
179
179
|
.flatMap(c -> ReactiveSecurityContextHolder.getContext())
|
|
180
180
|
.map(SecurityContext::getAuthentication)
|
|
181
181
|
.doOnSuccess(auth -> assertThat(auth).isNull())
|
|
@@ -208,7 +208,7 @@ class JWTFilterTest {
|
|
|
208
208
|
MockServerWebExchange exchange = MockServerWebExchange.from(request);
|
|
209
209
|
jwtFilter.filter(
|
|
210
210
|
exchange,
|
|
211
|
-
it -> Mono.
|
|
211
|
+
it -> Mono.deferContextual(Mono::just)
|
|
212
212
|
.flatMap(c -> ReactiveSecurityContextHolder.getContext())
|
|
213
213
|
.map(SecurityContext::getAuthentication)
|
|
214
214
|
.doOnSuccess(auth -> assertThat(auth).isNull())
|
|
@@ -19,8 +19,6 @@
|
|
|
19
19
|
package <%= packageName %>.service;
|
|
20
20
|
|
|
21
21
|
import <%= packageName %>.config.Constants;
|
|
22
|
-
<% if (databaseTypeCassandra) { %>
|
|
23
|
-
import <%= packageName %>.AbstractCassandraTest;<% } %>
|
|
24
22
|
import <%= packageName %>.IntegrationTest;
|
|
25
23
|
import <%= packageName %>.domain.<%= asEntity('User') %>;
|
|
26
24
|
import tech.jhipster.config.JHipsterProperties;
|
|
@@ -59,7 +57,7 @@ import static org.mockito.Mockito.*;
|
|
|
59
57
|
* Integration tests for {@link MailService}.
|
|
60
58
|
*/
|
|
61
59
|
@IntegrationTest
|
|
62
|
-
class MailServiceIT
|
|
60
|
+
class MailServiceIT {
|
|
63
61
|
|
|
64
62
|
private static final String[] languages = {
|
|
65
63
|
// jhipster-needle-i18n-language-constant - JHipster will add/remove languages in this array
|
|
@@ -154,9 +152,9 @@ class MailServiceIT <% if (databaseTypeCassandra) { %>extends AbstractCassandraT
|
|
|
154
152
|
@Test
|
|
155
153
|
void testSendEmailFromTemplate() throws Exception {
|
|
156
154
|
<%= asEntity('User') %> user = new <%= asEntity('User') %>();
|
|
155
|
+
user.setLangKey(Constants.DEFAULT_LANGUAGE);
|
|
157
156
|
user.setLogin("john");
|
|
158
157
|
user.setEmail("john.doe@example.com");
|
|
159
|
-
user.setLangKey("en");
|
|
160
158
|
mailService.sendEmailFromTemplate(user, "mail/testEmail", "email.test.title");
|
|
161
159
|
verify(javaMailSender).send(messageCaptor.capture());
|
|
162
160
|
MimeMessage message = messageCaptor.getValue();
|
|
@@ -18,9 +18,6 @@
|
|
|
18
18
|
-%>
|
|
19
19
|
package <%= packageName %>.service;
|
|
20
20
|
|
|
21
|
-
<%_ if (databaseTypeCassandra) { _%>
|
|
22
|
-
import <%= packageName %>.AbstractCassandraTest;
|
|
23
|
-
<%_ } _%>
|
|
24
21
|
import <%= packageName %>.IntegrationTest;
|
|
25
22
|
import <%= packageName %>.config.Constants;
|
|
26
23
|
<%_ if ((databaseTypeSql || databaseTypeMongodb || databaseTypeNeo4j || databaseTypeCouchbase) && authenticationTypeSession && !reactive) { _%>
|
|
@@ -135,7 +132,7 @@ import static org.mockito.Mockito.when;
|
|
|
135
132
|
<%_ if (databaseTypeSql && !reactive) { _%>
|
|
136
133
|
@Transactional
|
|
137
134
|
<%_ } _%>
|
|
138
|
-
class UserServiceIT
|
|
135
|
+
class UserServiceIT {
|
|
139
136
|
|
|
140
137
|
private static final String DEFAULT_LOGIN = "johndoe";
|
|
141
138
|
|
package/generators/server/templates/src/test/java/package/web/rest/AccountResourceIT.java.ejs
CHANGED
|
@@ -18,8 +18,8 @@
|
|
|
18
18
|
-%>
|
|
19
19
|
package <%= packageName %>.web.rest;
|
|
20
20
|
|
|
21
|
-
<%_ if (
|
|
22
|
-
import <%= packageName %>.
|
|
21
|
+
<%_ if (databaseTypeCouchbase) { _%>
|
|
22
|
+
import <%= packageName %>.CouchbaseTestContainerExtension;
|
|
23
23
|
<%_ } _%>
|
|
24
24
|
import <%= packageName %>.IntegrationTest;
|
|
25
25
|
import <%= packageName %>.config.Constants;
|
|
@@ -113,7 +113,7 @@ import static org.springframework.security.test.web.servlet.response.SecurityMoc
|
|
|
113
113
|
<%_ } _%>
|
|
114
114
|
@WithMockUser(value = TEST_USER_LOGIN)
|
|
115
115
|
@IntegrationTest
|
|
116
|
-
class AccountResourceIT
|
|
116
|
+
class AccountResourceIT {
|
|
117
117
|
static final String TEST_USER_LOGIN = "test";
|
|
118
118
|
|
|
119
119
|
@Autowired
|
package/generators/server/templates/src/test/java/package/web/rest/AccountResourceIT_oauth2.java.ejs
CHANGED
|
@@ -32,9 +32,6 @@ import static org.mockito.Mockito.*;
|
|
|
32
32
|
<%_ } _%>
|
|
33
33
|
<%_ } _%>
|
|
34
34
|
|
|
35
|
-
<%_ if (databaseTypeCassandra) { _%>
|
|
36
|
-
import <%= packageName %>.AbstractCassandraTest;
|
|
37
|
-
<%_ } _%>
|
|
38
35
|
import <%= packageName %>.IntegrationTest;
|
|
39
36
|
import <%= packageName %>.security.AuthoritiesConstants;
|
|
40
37
|
|
|
@@ -77,7 +74,7 @@ import org.springframework.transaction.annotation.Transactional;
|
|
|
77
74
|
<%_ } _%>
|
|
78
75
|
@WithMockUser(value = TEST_USER_LOGIN)
|
|
79
76
|
@IntegrationTest
|
|
80
|
-
class AccountResourceIT
|
|
77
|
+
class AccountResourceIT {
|
|
81
78
|
|
|
82
79
|
<%_ if (reactive) { _%>
|
|
83
80
|
private Map<String, Object> claims;
|
|
@@ -18,9 +18,6 @@
|
|
|
18
18
|
-%>
|
|
19
19
|
package <%= packageName %>.web.rest;
|
|
20
20
|
|
|
21
|
-
<%_ if (databaseTypeCassandra) { _%>
|
|
22
|
-
import <%= packageName %>.AbstractCassandraTest;
|
|
23
|
-
<%_ } _%>
|
|
24
21
|
import <%= packageName %>.IntegrationTest;
|
|
25
22
|
<%_ if (reactive && searchEngineElasticsearch) { _%>
|
|
26
23
|
import <%= packageName %>.repository.search.UserSearchRepository;
|
|
@@ -63,7 +60,7 @@ import static <%= packageName %>.web.rest.AccountResourceIT.TEST_USER_LOGIN;
|
|
|
63
60
|
<%_ } _%>
|
|
64
61
|
@WithMockUser(value = TEST_USER_LOGIN)
|
|
65
62
|
@IntegrationTest
|
|
66
|
-
class AccountResourceIT
|
|
63
|
+
class AccountResourceIT {
|
|
67
64
|
static final String TEST_USER_LOGIN = "test";
|
|
68
65
|
|
|
69
66
|
@Autowired
|
|
@@ -18,156 +18,85 @@
|
|
|
18
18
|
-%>
|
|
19
19
|
package <%= packageName %>.web.rest;
|
|
20
20
|
|
|
21
|
-
import <%= packageName %>.config.KafkaProperties;
|
|
22
|
-
import org.apache.kafka.clients.consumer.ConsumerRecord;
|
|
23
|
-
import org.apache.kafka.clients.consumer.ConsumerRecords;
|
|
24
|
-
import org.apache.kafka.clients.consumer.KafkaConsumer;
|
|
25
|
-
import org.apache.kafka.clients.producer.KafkaProducer;
|
|
26
|
-
import org.apache.kafka.clients.producer.ProducerRecord;
|
|
27
|
-
import org.junit.jupiter.api.BeforeAll;
|
|
28
|
-
import org.junit.jupiter.api.BeforeEach;
|
|
29
|
-
import org.junit.jupiter.api.Test;
|
|
30
|
-
import org.springframework.http.MediaType;
|
|
31
|
-
<%_ if (reactive) { _%>
|
|
32
|
-
import org.springframework.test.web.reactive.server.WebTestClient;
|
|
33
|
-
<%_ } else { _%>
|
|
34
|
-
import org.springframework.test.web.servlet.MockMvc;
|
|
35
|
-
import org.springframework.test.web.servlet.MvcResult;
|
|
36
|
-
import org.springframework.test.web.servlet.setup.MockMvcBuilders;
|
|
37
|
-
<%_ } _%>
|
|
38
|
-
import org.testcontainers.containers.KafkaContainer;
|
|
39
|
-
import org.testcontainers.utility.DockerImageName;
|
|
40
|
-
|
|
41
|
-
import java.time.Duration;
|
|
42
|
-
import java.util.Collections;
|
|
43
|
-
import java.util.HashMap;
|
|
44
|
-
import java.util.Map;
|
|
45
|
-
|
|
46
21
|
import static org.assertj.core.api.Assertions.assertThat;
|
|
47
|
-
<%_ if (!reactive) { _%>
|
|
48
22
|
import static org.junit.jupiter.api.Assertions.fail;
|
|
49
23
|
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
|
|
50
24
|
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post;
|
|
51
25
|
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*;
|
|
52
|
-
<%_ } _%>
|
|
53
26
|
|
|
27
|
+
import java.util.HashMap;
|
|
28
|
+
import java.util.Map;
|
|
29
|
+
import java.util.concurrent.BlockingQueue;
|
|
30
|
+
|
|
31
|
+
import org.junit.jupiter.api.Test;
|
|
32
|
+
import org.springframework.beans.factory.annotation.Autowired;
|
|
33
|
+
import org.springframework.beans.factory.annotation.Qualifier;
|
|
34
|
+
import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
|
|
35
|
+
import org.springframework.cloud.stream.test.binder.MessageCollector;
|
|
36
|
+
import org.springframework.messaging.Message;
|
|
37
|
+
import org.springframework.messaging.MessageChannel;
|
|
38
|
+
import org.springframework.messaging.MessageHeaders;
|
|
39
|
+
import org.springframework.messaging.support.GenericMessage;
|
|
40
|
+
import org.springframework.security.test.context.support.WithMockUser;
|
|
41
|
+
import org.springframework.test.web.servlet.MockMvc;
|
|
42
|
+
import org.springframework.test.web.servlet.MvcResult;
|
|
43
|
+
import org.springframework.util.MimeTypeUtils;
|
|
44
|
+
import <%= packageName %>.IntegrationTest;
|
|
45
|
+
import <%= packageName %>.config.EmbeddedKafka;
|
|
46
|
+
import <%= packageName %>.config.KafkaSseConsumer;
|
|
47
|
+
import <%= packageName %>.config.KafkaSseProducer;
|
|
48
|
+
|
|
49
|
+
@IntegrationTest
|
|
50
|
+
@AutoConfigureMockMvc
|
|
51
|
+
@WithMockUser
|
|
52
|
+
@EmbeddedKafka
|
|
54
53
|
class <%= upperFirstCamelCase(baseName) %>KafkaResourceIT {
|
|
55
54
|
|
|
56
|
-
|
|
57
|
-
private
|
|
55
|
+
@Autowired
|
|
56
|
+
private MessageCollector collector;
|
|
58
57
|
|
|
59
|
-
|
|
60
|
-
private WebTestClient client;
|
|
61
|
-
<%_ } else { _%>
|
|
58
|
+
@Autowired
|
|
62
59
|
private MockMvc restMockMvc;
|
|
63
|
-
<%_ } _%>
|
|
64
|
-
|
|
65
|
-
@BeforeAll
|
|
66
|
-
static void startServer() {
|
|
67
|
-
if (!started) {
|
|
68
|
-
startTestcontainer();
|
|
69
|
-
started = true;
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
60
|
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
kafkaContainer = new KafkaContainer(DockerImageName.parse("<%= DOCKER_KAFKA %>")).withNetwork(null);
|
|
77
|
-
kafkaContainer.start();
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
@BeforeEach
|
|
81
|
-
void setup() {
|
|
82
|
-
KafkaProperties kafkaProperties = new KafkaProperties();
|
|
83
|
-
Map<String, String> producerProps = getProducerProps();
|
|
84
|
-
kafkaProperties.setProducer(new HashMap<>(producerProps));
|
|
85
|
-
|
|
86
|
-
Map<String, String> consumerProps = getConsumerProps("default-group");
|
|
87
|
-
consumerProps.put("client.id", "default-client");
|
|
88
|
-
kafkaProperties.setConsumer(consumerProps);
|
|
89
|
-
|
|
90
|
-
<%= upperFirstCamelCase(baseName) %>KafkaResource kafkaResource = new <%= upperFirstCamelCase(baseName) %>KafkaResource(kafkaProperties);
|
|
61
|
+
@Autowired
|
|
62
|
+
@Qualifier(KafkaSseProducer.CHANNELNAME)
|
|
63
|
+
private MessageChannel output;
|
|
91
64
|
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
restMockMvc = MockMvcBuilders.standaloneSetup(kafkaResource).build();
|
|
96
|
-
<%_ } _%>
|
|
97
|
-
}
|
|
65
|
+
@Autowired
|
|
66
|
+
@Qualifier(KafkaSseConsumer.CHANNELNAME)
|
|
67
|
+
private MessageChannel input;
|
|
98
68
|
|
|
99
69
|
@Test
|
|
100
|
-
void producesMessages()
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
.
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
restMockMvc.perform(post("/api/<%= dasherizedBaseName %>-kafka/publish/topic-produce?message=value-produce"))
|
|
108
|
-
.andExpect(status().isOk())
|
|
109
|
-
.andExpect(content().contentType(MediaType.APPLICATION_JSON));
|
|
110
|
-
<%_ } _%>
|
|
111
|
-
|
|
112
|
-
Map<String, Object> consumerProps = new HashMap<>(getConsumerProps("group-produce"));
|
|
113
|
-
KafkaConsumer<String, String> consumer = new KafkaConsumer<>(consumerProps);
|
|
114
|
-
consumer.subscribe(Collections.singletonList("topic-produce"));
|
|
115
|
-
ConsumerRecords<String, String> records = consumer.poll(Duration.ofSeconds(1));
|
|
116
|
-
|
|
117
|
-
assertThat(records.count()).isEqualTo(1);
|
|
118
|
-
ConsumerRecord<String, String> record = records.iterator().next();
|
|
119
|
-
assertThat(record.value()).isEqualTo("value-produce");
|
|
70
|
+
void producesMessages() throws Exception {
|
|
71
|
+
restMockMvc
|
|
72
|
+
.perform(post("/api/<%= dasherizedBaseName %>-kafka/publish?message=value-produce"))
|
|
73
|
+
.andExpect(status().isOk());
|
|
74
|
+
BlockingQueue<Message<?>> messages = collector.forChannel(output);
|
|
75
|
+
GenericMessage<String> payload = (GenericMessage<String>) messages.take();
|
|
76
|
+
assertThat(payload.getPayload()).isEqualTo("value-produce");
|
|
120
77
|
}
|
|
121
78
|
|
|
122
79
|
@Test
|
|
123
|
-
void consumesMessages()
|
|
124
|
-
Map<String, Object>
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
String value = client.get().uri("/api/<%= dasherizedBaseName %>-kafka/consume?topic=topic-consume")
|
|
131
|
-
.accept(MediaType.TEXT_EVENT_STREAM)
|
|
132
|
-
.exchange()
|
|
133
|
-
.expectStatus().isOk()
|
|
134
|
-
.expectHeader().contentTypeCompatibleWith(MediaType.TEXT_EVENT_STREAM)
|
|
135
|
-
.returnResult(String.class)
|
|
136
|
-
.getResponseBody().blockFirst(Duration.ofSeconds(10));
|
|
137
|
-
|
|
138
|
-
assertThat(value).isEqualTo("value-consume");
|
|
139
|
-
<%_ } else { _%>
|
|
140
|
-
MvcResult mvcResult = restMockMvc.perform(get("/api/<%= dasherizedBaseName %>-kafka/consume?topic=topic-consume"))
|
|
80
|
+
void consumesMessages() throws Exception {
|
|
81
|
+
Map<String, Object> map = new HashMap<>();
|
|
82
|
+
map.put(MessageHeaders.CONTENT_TYPE, MimeTypeUtils.TEXT_PLAIN_VALUE);
|
|
83
|
+
MessageHeaders headers = new MessageHeaders(map);
|
|
84
|
+
Message<String> testMessage = new GenericMessage<>("value-consume", headers);
|
|
85
|
+
MvcResult mvcResult = restMockMvc
|
|
86
|
+
.perform(get("/api/<%= dasherizedBaseName %>-kafka/register"))
|
|
141
87
|
.andExpect(status().isOk())
|
|
142
88
|
.andExpect(request().asyncStarted())
|
|
143
89
|
.andReturn();
|
|
144
|
-
|
|
145
90
|
for (int i = 0; i < 100; i++) {
|
|
91
|
+
input.send(testMessage);
|
|
146
92
|
Thread.sleep(100);
|
|
147
93
|
String content = mvcResult.getResponse().getContentAsString();
|
|
148
94
|
if (content.contains("data:value-consume")) {
|
|
95
|
+
restMockMvc
|
|
96
|
+
.perform(get("/api/<%= dasherizedBaseName %>-kafka/unregister"));
|
|
149
97
|
return;
|
|
150
98
|
}
|
|
151
99
|
}
|
|
152
100
|
fail("Expected content data:value-consume not received");
|
|
153
|
-
<%_ } _%>
|
|
154
|
-
}
|
|
155
|
-
|
|
156
|
-
private Map<String, String> getProducerProps() {
|
|
157
|
-
Map<String, String> producerProps = new HashMap<>();
|
|
158
|
-
producerProps.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer");
|
|
159
|
-
producerProps.put("value.serializer", "org.apache.kafka.common.serialization.StringSerializer");
|
|
160
|
-
producerProps.put("bootstrap.servers", kafkaContainer.getBootstrapServers());
|
|
161
|
-
return producerProps;
|
|
162
|
-
}
|
|
163
|
-
|
|
164
|
-
private Map<String, String> getConsumerProps(String group) {
|
|
165
|
-
Map<String, String> consumerProps = new HashMap<>();
|
|
166
|
-
consumerProps.put("key.deserializer", "org.apache.kafka.common.serialization.StringDeserializer");
|
|
167
|
-
consumerProps.put("value.deserializer", "org.apache.kafka.common.serialization.StringDeserializer");
|
|
168
|
-
consumerProps.put("bootstrap.servers", kafkaContainer.getBootstrapServers());
|
|
169
|
-
consumerProps.put("auto.offset.reset", "earliest");
|
|
170
|
-
consumerProps.put("group.id", group);
|
|
171
|
-
return consumerProps;
|
|
172
101
|
}
|
|
173
102
|
}
|