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.
Files changed (177) hide show
  1. package/README.md +1 -2
  2. package/generators/app/index.js +10 -0
  3. package/generators/ci-cd/index.js +1 -1
  4. package/generators/ci-cd/templates/github-actions.yml.ejs +4 -4
  5. package/generators/client/files-common.js +1 -2
  6. package/generators/client/files-react.js +25 -2
  7. package/generators/client/index.js +1 -1
  8. package/generators/client/needle-api/needle-client-react.js +11 -8
  9. package/generators/client/templates/angular/angular.json.ejs +1 -9
  10. package/generators/client/templates/angular/jest.conf.js.ejs +1 -1
  11. package/generators/client/templates/angular/package.json +17 -18
  12. package/generators/client/templates/angular/package.json.ejs +1 -1
  13. package/generators/client/templates/angular/src/main/webapp/app/admin/user-management/list/user-management.component.ts.ejs +1 -1
  14. package/generators/client/templates/angular/src/main/webapp/app/core/util/data-util.service.ts.ejs +1 -1
  15. package/generators/client/templates/angular/src/main/webapp/app/core/util/parse-links.service.ts.ejs +1 -1
  16. package/generators/client/templates/angular/webpack/webpack.custom.js.ejs +12 -1
  17. package/generators/client/templates/common/package.json +7 -6
  18. package/generators/client/templates/common/webpack/webpack.microfrontend.js.jhi.ejs +2 -3
  19. package/generators/client/templates/react/.eslintrc.json.ejs +1 -1
  20. package/generators/client/templates/react/jest.conf.js.ejs +1 -1
  21. package/generators/client/templates/react/package.json +30 -31
  22. package/generators/client/templates/react/package.json.ejs +1 -0
  23. package/generators/client/templates/react/src/main/webapp/app/app.scss.ejs +1 -1
  24. package/generators/client/templates/react/src/main/webapp/app/config/store.ts.ejs +53 -6
  25. package/generators/client/templates/react/src/main/webapp/app/config/translation-middleware.ts.ejs +58 -0
  26. package/generators/client/templates/react/src/main/webapp/app/entities/menu.tsx.ejs +45 -0
  27. package/generators/client/templates/react/src/main/webapp/app/entities/reducers.ts.ejs +25 -0
  28. package/generators/client/templates/react/src/main/webapp/app/entities/routes.tsx.ejs +47 -0
  29. package/generators/client/templates/react/src/main/webapp/app/index.tsx.ejs +7 -7
  30. package/generators/client/templates/react/src/main/webapp/app/main.tsx.ejs +19 -0
  31. package/generators/client/templates/react/src/main/webapp/app/modules/administration/logs/logs.tsx.ejs +1 -1
  32. package/generators/client/templates/react/src/main/webapp/app/modules/administration/user-management/user-management.tsx.ejs +2 -1
  33. package/generators/client/templates/react/src/main/webapp/app/modules/login/login-modal.tsx.ejs +5 -1
  34. package/generators/client/templates/react/src/main/webapp/app/routes.tsx.ejs +24 -7
  35. package/generators/client/templates/react/src/main/webapp/app/shared/error/error-loading.tsx.ejs +15 -0
  36. package/generators/client/templates/react/src/main/webapp/app/shared/layout/menus/entities.tsx.ejs +34 -6
  37. package/generators/client/templates/react/src/main/webapp/app/shared/reducers/index.ts.ejs +9 -2
  38. package/generators/client/templates/react/src/main/webapp/app/shared/reducers/locale.spec.ts.ejs +9 -3
  39. package/generators/client/templates/react/src/main/webapp/app/shared/reducers/locale.ts.ejs +21 -5
  40. package/generators/client/templates/react/src/main/webapp/app/typings.d.ts.ejs +15 -0
  41. package/generators/client/templates/react/src/main/webapp/microfrontends/entities-menu.tsx.ejs +3 -0
  42. package/generators/client/templates/react/src/main/webapp/microfrontends/entities-routes.tsx.ejs +3 -0
  43. package/generators/client/templates/react/tsconfig.json.ejs +3 -3
  44. package/generators/client/templates/react/tsconfig.test.json.ejs +9 -1
  45. package/generators/client/templates/react/webpack/webpack.common.js.ejs +6 -13
  46. package/generators/client/templates/react/webpack/webpack.dev.js.ejs +7 -8
  47. package/generators/client/templates/react/webpack/webpack.microfrontend.js.jhi.react.ejs +99 -0
  48. package/generators/client/templates/react/webpack/webpack.prod.js.ejs +31 -21
  49. package/generators/client/templates/vue/package.json +16 -17
  50. package/generators/client/templates/vue/package.json.ejs +1 -1
  51. package/generators/client/templates/vue/src/main/webapp/app/core/jhi-navbar/jhi-navbar.component.ts.ejs +1 -0
  52. package/generators/client/templates/vue/src/main/webapp/app/shared/data/data-utils.service.ts.ejs +1 -1
  53. package/generators/client/templates/vue/src/test/javascript/jest.conf.js.ejs +2 -2
  54. package/generators/client/templates/vue/tsconfig.json.ejs +0 -3
  55. package/generators/client/templates/vue/webpack/webpack.common.js.ejs +6 -2
  56. package/generators/common/templates/package.json +2 -2
  57. package/generators/docker-compose/index.js +9 -5
  58. package/generators/entity/index.js +34 -19
  59. package/generators/entity-client/index.js +8 -0
  60. package/generators/entity-client/templates/angular/src/main/webapp/app/entities/list/entity-management.component.ts.ejs +1 -1
  61. package/generators/entity-client/templates/angular/src/main/webapp/app/entities/update/entity-management-update.component.ts.ejs +1 -1
  62. package/generators/entity-client/templates/common/src/test/javascript/cypress/integration/entity/entity.spec.ts.ejs +1 -0
  63. package/generators/entity-client/templates/react/src/main/webapp/app/entities/entity-delete-dialog.tsx.ejs +3 -3
  64. package/generators/entity-client/templates/react/src/main/webapp/app/entities/entity-detail.tsx.ejs +5 -4
  65. package/generators/entity-client/templates/react/src/main/webapp/app/entities/entity-update.tsx.ejs +19 -18
  66. package/generators/entity-client/templates/react/src/main/webapp/app/entities/entity.reducer.ts.ejs +2 -2
  67. package/generators/entity-client/templates/react/src/main/webapp/app/entities/entity.tsx.ejs +21 -20
  68. package/generators/entity-i18n/templates/i18n/entity_fr.json.ejs +1 -1
  69. package/generators/entity-server/files.js +30 -10
  70. package/generators/entity-server/index.js +19 -1
  71. package/generators/entity-server/templates/couchbase/src/main/java/package/domain/Entity.java.jhi.spring_data_couchbase.ejs +1 -1
  72. package/generators/entity-server/templates/couchbase/src/main/java/package/repository/EntityRepository.java.ejs +31 -8
  73. package/generators/entity-server/templates/partials/update_template.ejs +77 -0
  74. package/generators/entity-server/templates/reactive/partials/save_template.ejs +1 -1
  75. package/generators/entity-server/templates/reactive/partials/update_template.ejs +41 -0
  76. package/generators/entity-server/templates/src/main/java/package/common/get_all_template.ejs +5 -5
  77. package/generators/entity-server/templates/src/main/java/package/common/get_template.ejs +1 -1
  78. package/generators/entity-server/templates/src/main/java/package/common/inject_template.ejs +13 -4
  79. package/generators/entity-server/templates/src/main/java/package/common/patch_template.ejs +2 -2
  80. package/generators/entity-server/templates/src/main/java/package/domain/Entity.java.jhi.ejs +2 -1
  81. package/generators/entity-server/templates/src/main/java/package/domain/Entity.java.jhi.javax_lifecycle_events.ejs +31 -0
  82. package/generators/entity-server/templates/src/main/java/package/domain/Entity.java.jhi.spring_data_persistable.ejs +54 -0
  83. package/generators/entity-server/templates/src/main/java/package/domain/Entity.java.jhi.spring_data_reactive.ejs +1 -1
  84. package/generators/entity-server/templates/src/main/java/package/domain/EntityCallback.java.ejs +43 -0
  85. package/generators/entity-server/templates/src/main/java/package/repository/EntityRepository.java.ejs +6 -6
  86. package/generators/entity-server/templates/src/main/java/package/repository/EntityRepositoryInternalImpl_reactive.java.ejs +13 -16
  87. package/generators/entity-server/templates/src/main/java/package/repository/EntityRepositoryWithBagRelationshipsImpl.java.ejs +4 -3
  88. package/generators/entity-server/templates/src/main/java/package/repository/EntityRepository_reactive.java.ejs +15 -23
  89. package/generators/entity-server/templates/src/main/java/package/repository/EntitySqlHelper_reactive.java.ejs +2 -2
  90. package/generators/entity-server/templates/src/main/java/package/repository/rowmapper/EntityRowMapper.java.ejs +2 -2
  91. package/generators/entity-server/templates/src/main/java/package/repository/search/EntitySearchRepository.java.ejs +12 -25
  92. package/generators/entity-server/templates/src/main/java/package/service/EntityService.java.ejs +10 -2
  93. package/generators/entity-server/templates/src/main/java/package/service/impl/EntityServiceImpl.java.ejs +21 -5
  94. package/generators/entity-server/templates/src/main/java/package/service/mapper/EntityMapper.java.ejs +61 -90
  95. package/generators/entity-server/templates/src/main/java/package/web/rest/EntityResource.java.ejs +6 -4
  96. package/generators/entity-server/templates/src/test/java/package/web/rest/EntityResourceIT.java.ejs +28 -15
  97. package/generators/generator-base-private.js +1 -1
  98. package/generators/generator-base.js +29 -0
  99. package/generators/generator-constants.js +5 -5
  100. package/generators/generator-transforms.js +0 -1
  101. package/generators/gradle/constants.cjs +1 -1
  102. package/generators/maven/files.cjs +0 -1
  103. package/generators/maven/templates/.mvn/wrapper/maven-wrapper.jar +0 -0
  104. package/generators/maven/templates/.mvn/wrapper/maven-wrapper.properties +18 -2
  105. package/generators/maven/templates/mvnw +13 -7
  106. package/generators/maven/templates/mvnw.cmd +19 -13
  107. package/generators/maven/templates/pom.xml.jhi.ejs +1 -1
  108. package/generators/server/cleanup.js +19 -3
  109. package/generators/server/files.js +101 -17
  110. package/generators/server/index.js +11 -5
  111. package/generators/server/needle-api/needle-server-gradle.js +38 -0
  112. package/generators/server/templates/.mvn/jvm.config +1 -0
  113. package/generators/server/templates/.mvn/wrapper/maven-wrapper.jar +0 -0
  114. package/generators/server/templates/.mvn/wrapper/maven-wrapper.properties +18 -2
  115. package/generators/server/templates/build.gradle.ejs +7 -5
  116. package/generators/server/templates/couchbase/src/main/java/package/repository/JHipsterCouchbaseRepository.java.ejs +24 -1
  117. package/generators/server/templates/devcontainer/Dockerfile.ejs +25 -0
  118. package/generators/server/templates/devcontainer/devcontainer.json.ejs +64 -0
  119. package/generators/server/templates/gradle/wrapper/gradle-wrapper.jar +0 -0
  120. package/generators/server/templates/gradle.properties.ejs +4 -4
  121. package/generators/server/templates/mvnw +13 -7
  122. package/generators/server/templates/mvnw.cmd +19 -13
  123. package/generators/server/templates/pom.xml.ejs +19 -17
  124. package/generators/server/templates/settings.gradle.ejs +6 -4
  125. package/generators/server/templates/src/main/docker/app.yml.ejs +2 -6
  126. package/generators/server/templates/src/main/docker/config/realm-config/jhipster-realm.json.ejs +2 -1
  127. package/generators/server/templates/src/main/docker/mysql.yml.ejs +1 -0
  128. package/generators/server/templates/src/main/java/package/config/AsyncConfiguration.java.ejs +6 -0
  129. 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
  130. package/generators/server/templates/src/main/java/package/config/KafkaSseProducer.java.ejs +30 -0
  131. package/generators/server/templates/src/main/java/package/config/SecurityConfiguration.java.ejs +12 -10
  132. package/generators/server/templates/src/main/java/package/repository/EntityManager.java.ejs +3 -3
  133. package/generators/server/templates/src/main/java/package/security/jwt/JWTFilter.java.ejs +1 -1
  134. package/generators/server/templates/src/main/java/package/security/jwt/TokenProvider.java.ejs +1 -1
  135. package/generators/server/templates/src/main/java/package/web/rest/KafkaResource.java.ejs +60 -108
  136. package/generators/server/templates/src/main/java/package/web/rest/KafkaResource_reactive.java.ejs +74 -0
  137. package/generators/server/templates/src/main/resources/config/application.yml.ejs +26 -22
  138. package/generators/server/templates/src/test/java/package/CassandraKeyspaceIT.java.ejs +3 -4
  139. package/generators/server/templates/src/test/java/package/IntegrationTest.java.ejs +9 -3
  140. package/generators/server/templates/src/test/java/package/TechnicalStructureTest.java.ejs +0 -3
  141. package/generators/server/templates/src/test/java/package/config/CassandraTestContainer.java.ejs +122 -0
  142. package/generators/server/templates/src/test/java/package/config/EmbeddedCassandra.java.ejs +11 -0
  143. package/generators/server/templates/src/test/java/package/config/EmbeddedKafka.java.ejs +11 -0
  144. package/generators/server/templates/src/test/java/package/config/EmbeddedMongo.java.ejs +11 -0
  145. package/generators/server/templates/src/test/java/package/config/KafkaTestContainer.java.ejs +38 -0
  146. package/generators/server/templates/src/test/java/package/config/MongoDbTestContainer.java.ejs +67 -0
  147. package/generators/server/templates/src/test/java/package/config/TestContainersSpringContextCustomizerFactory.java.ejs +114 -0
  148. package/generators/server/templates/src/test/java/package/cucumber/CucumberIT.java.ejs +3 -10
  149. package/generators/server/templates/src/test/java/package/security/DomainUserDetailsServiceIT.java.ejs +1 -4
  150. package/generators/server/templates/src/test/java/package/security/jwt/JWTFilterTest.java.ejs +5 -5
  151. package/generators/server/templates/src/test/java/package/service/MailServiceIT.java.ejs +2 -4
  152. package/generators/server/templates/src/test/java/package/service/UserServiceIT.java.ejs +1 -4
  153. package/generators/server/templates/src/test/java/package/web/rest/AccountResourceIT.java.ejs +3 -3
  154. package/generators/server/templates/src/test/java/package/web/rest/AccountResourceIT_oauth2.java.ejs +1 -4
  155. package/generators/server/templates/src/test/java/package/web/rest/AccountResourceIT_skipUserManagement.java.ejs +1 -4
  156. package/generators/server/templates/src/test/java/package/web/rest/KafkaResourceIT.java.ejs +52 -123
  157. package/generators/server/templates/src/test/java/package/web/rest/KafkaResourceIT_reactive.java.ejs +99 -0
  158. package/generators/server/templates/src/test/java/package/web/rest/PublicUserResourceIT.java.ejs +7 -10
  159. package/generators/server/templates/src/test/java/package/web/rest/UserJWTControllerIT.java.ejs +1 -4
  160. package/generators/server/templates/src/test/java/package/web/rest/UserResourceIT.java.ejs +2 -5
  161. package/generators/server/templates/src/test/java/package/web/rest/errors/ExceptionTranslatorIT.java.ejs +1 -4
  162. package/generators/server/templates/src/test/java/package/web/rest/errors/ExceptionTranslatorIT_reactive.java.ejs +1 -4
  163. package/generators/server/templates/src/test/resources/META-INF/spring.factories.ejs +1 -1
  164. package/generators/server/templates/src/test/resources/config/application.yml.ejs +21 -20
  165. package/generators/server/templates/src/test/resources/testcontainers.properties.ejs +1 -0
  166. package/generators/workspaces/index.js +2 -1
  167. package/package.json +15 -15
  168. package/utils/entity.js +2 -0
  169. package/utils/field.js +8 -3
  170. package/utils/relationship.js +10 -1
  171. package/generators/entity-server/templates/src/main/java/package/repository/search/SortToSortBuilderListConverter.java.ejs +0 -25
  172. package/generators/maven/templates/.mvn/wrapper/MavenWrapperDownloader.java +0 -117
  173. package/generators/server/templates/.mvn/wrapper/MavenWrapperDownloader.java +0 -117
  174. package/generators/server/templates/src/main/java/package/config/KafkaProperties.java.ejs +0 -68
  175. package/generators/server/templates/src/test/java/package/AbstractCassandraTest.java.ejs +0 -125
  176. package/generators/server/templates/src/test/java/package/MongoDbTestContainerExtension.java.ejs +0 -37
  177. 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
+ }
@@ -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
- <%_ if (databaseTypeCassandra) { _%>
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
- <%_ if (databaseTypeNeo4j) { _%>
31
- @ExtendWith(AbstractNeo4jIT)
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 <% if (databaseTypeCassandra) { %>extends AbstractCassandraTest <% } %>{
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";
@@ -93,7 +93,7 @@ class JWTFilterTest {
93
93
  MockServerWebExchange exchange = MockServerWebExchange.from(request);
94
94
  jwtFilter.filter(
95
95
  exchange,
96
- it -> Mono.subscriberContext()
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.subscriberContext()
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.subscriberContext()
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.subscriberContext()
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.subscriberContext()
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 <% if (databaseTypeCassandra) { %>extends AbstractCassandraTest <% } %>{
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 <% if (databaseTypeCassandra) { %>extends AbstractCassandraTest <% } %>{
135
+ class UserServiceIT {
139
136
 
140
137
  private static final String DEFAULT_LOGIN = "johndoe";
141
138
 
@@ -18,8 +18,8 @@
18
18
  -%>
19
19
  package <%= packageName %>.web.rest;
20
20
 
21
- <%_ if (databaseTypeCassandra) { _%>
22
- import <%= packageName %>.AbstractCassandraTest;
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 <% if (databaseTypeCassandra) { %>extends AbstractCassandraTest <% } %>{
116
+ class AccountResourceIT {
117
117
  static final String TEST_USER_LOGIN = "test";
118
118
 
119
119
  @Autowired
@@ -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 <% if (databaseTypeCassandra) { %>extends AbstractCassandraTest <% } %>{
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 <% if (databaseTypeCassandra) { %>extends AbstractCassandraTest <% } %>{
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
- private static boolean started = false;
57
- private static KafkaContainer kafkaContainer;
55
+ @Autowired
56
+ private MessageCollector collector;
58
57
 
59
- <%_ if (reactive) { _%>
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
- private static void startTestcontainer() {
74
- // TODO: withNetwork will need to be removed soon
75
- // See discussion at https://github.com/jhipster/generator-jhipster/issues/11544#issuecomment-609065206
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
- <%_ if (reactive) { _%>
93
- client = WebTestClient.bindToController(kafkaResource).build();
94
- <%_ } else { _%>
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()<% if (!reactive) { %> throws Exception<% } %> {
101
- <%_ if (reactive) { _%>
102
- client.post().uri("/api/<%= dasherizedBaseName %>-kafka/publish/topic-produce?message=value-produce")
103
- .exchange()
104
- .expectStatus().isOk()
105
- .expectHeader().contentType(MediaType.APPLICATION_JSON);
106
- <%_ } else { _%>
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()<% if (!reactive) { %> throws Exception<% } %> {
124
- Map<String, Object> producerProps = new HashMap<>(getProducerProps());
125
- KafkaProducer<String, String> producer = new KafkaProducer<>(producerProps);
126
-
127
- producer.send(new ProducerRecord<>("topic-consume", "value-consume"));
128
-
129
- <%_ if (reactive) { _%>
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
  }