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,99 @@
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 %>.web.rest;
20
+
21
+ import static org.assertj.core.api.Assertions.assertThat;
22
+
23
+ import java.time.Duration;
24
+ import java.util.HashMap;
25
+ import java.util.Map;
26
+ import java.util.concurrent.BlockingQueue;
27
+
28
+ import org.junit.jupiter.api.Test;
29
+ import org.springframework.beans.factory.annotation.Autowired;
30
+ import org.springframework.beans.factory.annotation.Qualifier;
31
+ import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
32
+ import org.springframework.cloud.stream.test.binder.MessageCollector;
33
+ import org.springframework.http.MediaType;
34
+ import org.springframework.messaging.Message;
35
+ import org.springframework.messaging.MessageChannel;
36
+ import org.springframework.messaging.MessageHeaders;
37
+ import org.springframework.messaging.support.GenericMessage;
38
+ import org.springframework.security.test.context.support.WithMockUser;
39
+ import org.springframework.test.web.reactive.server.WebTestClient;
40
+ import org.springframework.util.MimeTypeUtils;
41
+ import <%= packageName %>.IntegrationTest;
42
+ import <%= packageName %>.config.EmbeddedKafka;
43
+ import <%= packageName %>.config.KafkaSseConsumer;
44
+ import <%= packageName %>.config.KafkaSseProducer;
45
+
46
+ @IntegrationTest
47
+ @AutoConfigureMockMvc
48
+ @WithMockUser
49
+ @EmbeddedKafka
50
+ class <%= upperFirstCamelCase(baseName) %>KafkaResourceIT {
51
+
52
+ @Autowired
53
+ private WebTestClient client;
54
+
55
+ @Autowired
56
+ @Qualifier(KafkaSseProducer.CHANNELNAME)
57
+ private MessageChannel output;
58
+
59
+ @Autowired
60
+ @Qualifier(KafkaSseConsumer.CHANNELNAME)
61
+ private MessageChannel input;
62
+
63
+ @Autowired
64
+ private MessageCollector collector;
65
+
66
+ @Test
67
+ void producesMessages() throws InterruptedException {
68
+ client.post().uri("/api/<%= dasherizedBaseName %>-kafka/publish?message=value-produce")
69
+ .exchange()
70
+ .expectStatus()
71
+ .isNoContent();
72
+
73
+ BlockingQueue<Message<?>> messages = collector.forChannel(output);
74
+ GenericMessage<String> payload = (GenericMessage<String>) messages.take();
75
+ assertThat(payload.getPayload()).isEqualTo("value-produce");
76
+ }
77
+
78
+ @Test
79
+ void consumesMessages() {
80
+ Map<String, Object> map = new HashMap<>();
81
+ map.put(MessageHeaders.CONTENT_TYPE, MimeTypeUtils.TEXT_PLAIN_VALUE);
82
+ MessageHeaders headers = new MessageHeaders(map);
83
+ Message<String> testMessage = new GenericMessage<>("value-consume", headers);
84
+ input.send(testMessage);
85
+ String value = client
86
+ .get()
87
+ .uri("/api/<%= dasherizedBaseName %>-kafka/consume")
88
+ .accept(MediaType.TEXT_EVENT_STREAM)
89
+ .exchange()
90
+ .expectStatus()
91
+ .isOk()
92
+ .expectHeader()
93
+ .contentTypeCompatibleWith(MediaType.TEXT_EVENT_STREAM)
94
+ .returnResult(String.class)
95
+ .getResponseBody()
96
+ .blockFirst(Duration.ofSeconds(10));
97
+ assertThat(value).isEqualTo("value-consume");
98
+ }
99
+ }
@@ -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 (databaseTypeSql && reactive) { _%>
26
23
  import <%= packageName %>.config.Constants;
@@ -108,7 +105,7 @@ import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.
108
105
  <%_ } _%>
109
106
  @WithMockUser(authorities = AuthoritiesConstants.ADMIN)
110
107
  @IntegrationTest
111
- class PublicUserResourceIT <% if (databaseTypeCassandra) { %>extends AbstractCassandraTest <% } %>{
108
+ class PublicUserResourceIT {
112
109
 
113
110
  private static final String DEFAULT_LOGIN = "johndoe";
114
111
 
@@ -179,7 +176,7 @@ class PublicUserResourceIT <% if (databaseTypeCassandra) { %>extends AbstractCas
179
176
 
180
177
  // Get all the users
181
178
  <%_ if (reactive) { _%>
182
- <%= asDto('User') %> foundUser = webTestClient.get().uri("/api/users?sort=id,DESC")
179
+ <%= asDto('User') %> foundUser = webTestClient.get().uri("/api/users?sort=id,desc")
183
180
  .accept(MediaType.APPLICATION_JSON)
184
181
  .exchange()
185
182
  .expectStatus().isOk()
@@ -246,14 +243,14 @@ class PublicUserResourceIT <% if (databaseTypeCassandra) { %>extends AbstractCas
246
243
  userRepository.<% if (reactive) { %>save<% } else { %>saveAndFlush<% } %>(user)<% if (reactive) { %>.block()<% } %>;
247
244
 
248
245
  <%_ if (reactive) { _%>
249
- webTestClient.get().uri("/api/users?sort=resetKey,DESC").accept(MediaType.APPLICATION_JSON).exchange().expectStatus().isBadRequest();
250
- webTestClient.get().uri("/api/users?sort=password,DESC").accept(MediaType.APPLICATION_JSON).exchange().expectStatus().isBadRequest();
251
- webTestClient.get().uri("/api/users?sort=resetKey,id,DESC").accept(MediaType.APPLICATION_JSON).exchange().expectStatus().isBadRequest();
252
- webTestClient.get().uri("/api/users?sort=id,DESC").accept(MediaType.APPLICATION_JSON).exchange().expectStatus().isOk();
246
+ webTestClient.get().uri("/api/users?sort=resetKey,desc").accept(MediaType.APPLICATION_JSON).exchange().expectStatus().isBadRequest();
247
+ webTestClient.get().uri("/api/users?sort=password,desc").accept(MediaType.APPLICATION_JSON).exchange().expectStatus().isBadRequest();
248
+ webTestClient.get().uri("/api/users?sort=resetKey,desc&sort=id,desc").accept(MediaType.APPLICATION_JSON).exchange().expectStatus().isBadRequest();
249
+ webTestClient.get().uri("/api/users?sort=id,desc").accept(MediaType.APPLICATION_JSON).exchange().expectStatus().isOk();
253
250
  <%_ } else { _%>
254
251
  restUserMockMvc.perform(get("/api/users?sort=resetKey,desc").accept(MediaType.APPLICATION_JSON)).andExpect(status().isBadRequest());
255
252
  restUserMockMvc.perform(get("/api/users?sort=password,desc").accept(MediaType.APPLICATION_JSON)).andExpect(status().isBadRequest());
256
- restUserMockMvc.perform(get("/api/users?sort=resetKey,id,desc").accept(MediaType.APPLICATION_JSON)).andExpect(status().isBadRequest());
253
+ restUserMockMvc.perform(get("/api/users?sort=resetKey,desc&sort=id,desc").accept(MediaType.APPLICATION_JSON)).andExpect(status().isBadRequest());
257
254
  restUserMockMvc.perform(get("/api/users?sort=id,desc").accept(MediaType.APPLICATION_JSON)).andExpect(status().isOk());
258
255
  <%_ } _%>
259
256
  }
@@ -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 (!skipUserManagement) { _%>
26
23
  <%_ if (databaseTypeSql && reactive) { _%>
@@ -74,7 +71,7 @@ import static org.hamcrest.Matchers.not;
74
71
  @AutoConfigureMockMvc
75
72
  <%_ } _%>
76
73
  @IntegrationTest
77
- class UserJWTControllerIT <% if (databaseTypeCassandra) { %>extends AbstractCassandraTest <% } %>{
74
+ class UserJWTControllerIT {
78
75
 
79
76
  <%_ if (!skipUserManagement) { _%>
80
77
  @Autowired
@@ -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 (databaseTypeSql && reactive) { _%>
26
23
  import <%= packageName %>.config.Constants;
@@ -120,7 +117,7 @@ import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.
120
117
  <%_ } _%>
121
118
  @WithMockUser(authorities = AuthoritiesConstants.ADMIN)
122
119
  @IntegrationTest
123
- class UserResourceIT <% if (databaseTypeCassandra) { %>extends AbstractCassandraTest <% } %>{
120
+ class UserResourceIT {
124
121
 
125
122
  private static final String DEFAULT_LOGIN = "johndoe";
126
123
  <%_ if (!authenticationTypeOauth2) { _%>
@@ -496,7 +493,7 @@ class UserResourceIT <% if (databaseTypeCassandra) { %>extends AbstractCassandra
496
493
 
497
494
  // Get all the users
498
495
  <%_ if (reactive) { _%>
499
- <%= asDto('AdminUser') %> foundUser = webTestClient.get().uri("/api/admin/users?sort=id,DESC")
496
+ <%= asDto('AdminUser') %> foundUser = webTestClient.get().uri("/api/admin/users?sort=id,desc")
500
497
  .accept(MediaType.APPLICATION_JSON)
501
498
  .exchange()
502
499
  .expectStatus().isOk()
@@ -18,9 +18,6 @@
18
18
  -%>
19
19
  package <%= packageName %>.web.rest.errors;
20
20
 
21
- <%_ if (databaseTypeCassandra) { _%>
22
- import <%= packageName %>.AbstractCassandraTest;
23
- <%_ } _%>
24
21
  import <%= packageName %>.IntegrationTest;
25
22
  import org.junit.jupiter.api.Test;
26
23
  import org.springframework.beans.factory.annotation.Autowired;
@@ -46,7 +43,7 @@ import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.
46
43
  @WithMockUser
47
44
  @AutoConfigureMockMvc
48
45
  @IntegrationTest
49
- class ExceptionTranslatorIT <% if (databaseTypeCassandra) { %>extends AbstractCassandraTest <% } %>{
46
+ class ExceptionTranslatorIT {
50
47
 
51
48
  @Autowired
52
49
  private MockMvc mockMvc;
@@ -18,9 +18,6 @@
18
18
  -%>
19
19
  package <%= packageName %>.web.rest.errors;
20
20
 
21
- <%_ if (databaseTypeCassandra) { _%>
22
- import <%= packageName %>.AbstractCassandraTest;
23
- <%_ } _%>
24
21
  import <%= packageName %>.IntegrationTest;
25
22
  import org.junit.jupiter.api.Test;
26
23
  import org.springframework.beans.factory.annotation.Autowired;
@@ -45,7 +42,7 @@ import static org.springframework.security.test.web.reactive.server.SecurityMock
45
42
  @WithMockUser
46
43
  @AutoConfigureWebTestClient(timeout = IntegrationTest.DEFAULT_TIMEOUT)
47
44
  @IntegrationTest
48
- class ExceptionTranslatorIT <% if (databaseTypeCassandra) { %>extends AbstractCassandraTest <% } %>{
45
+ class ExceptionTranslatorIT {
49
46
 
50
47
  @Autowired
51
48
  private WebTestClient webTestClient;
@@ -1 +1 @@
1
- org.springframework.test.context.ContextCustomizerFactory = <%= packageName %>.TestContainersSpringContextCustomizerFactory
1
+ org.springframework.test.context.ContextCustomizerFactory = <%= packageName %>.config.TestContainersSpringContextCustomizerFactory
@@ -72,13 +72,14 @@ spring:
72
72
  exclude:
73
73
  - org.springframework.cloud.gateway.config.GatewayMetricsAutoConfiguration
74
74
  <%_ } _%>
75
- <%_ if (serviceDiscoveryEureka) { _%>
75
+ <%_ if (serviceDiscoveryEureka || serviceDiscoveryConsul || messageBrokerKafka) { _%>
76
76
  cloud:
77
+ <%_ } _%>
78
+ <%_ if (serviceDiscoveryEureka) { _%>
77
79
  config:
78
80
  enabled: false
79
81
  <%_ } _%>
80
82
  <%_ if (serviceDiscoveryConsul) { _%>
81
- cloud:
82
83
  consul:
83
84
  discovery:
84
85
  enabled: false
@@ -87,6 +88,23 @@ spring:
87
88
  enabled: false
88
89
  enabled: false
89
90
  <%_ } _%>
91
+ <%_ if (messageBrokerKafka) { _%>
92
+ stream:
93
+ kafka:
94
+ binder:
95
+ replicationFactor: 1
96
+ auto-create-topics: true
97
+ bindings:
98
+ binding-in-sse:
99
+ destination: sse-topic
100
+ content-type: text/plain
101
+ group: <%= dasherizedBaseName %>
102
+ binding-out-sse:
103
+ destination: sse-topic
104
+ content-type: text/plain
105
+ group: <%= dasherizedBaseName %>
106
+ <%_ } _%>
107
+
90
108
  <%_ if (databaseTypeSql && !reactive) { _%>
91
109
  datasource:
92
110
  type: com.zaxxer.hikari.HikariDataSource
@@ -124,10 +142,7 @@ spring:
124
142
  <%_ } _%>
125
143
  <%_ if (databaseTypeCassandra) { _%>
126
144
  cassandra:
127
- contact-points: localhost
128
145
  compression: NONE
129
- keyspace-name: cassandra_unit_keyspace
130
- local-datacenter: datacenter1
131
146
  <%_ } _%>
132
147
  <%_ if (databaseTypeCouchbase) { _%>
133
148
  couchbase:
@@ -146,7 +161,6 @@ spring:
146
161
  host: localhost
147
162
  main:
148
163
  allow-bean-definition-overriding: true
149
- allow-circular-references: true
150
164
  <%_ if (!reactive) { _%>
151
165
  mvc:
152
166
  pathmatch:
@@ -176,7 +190,7 @@ spring:
176
190
  scheduling:
177
191
  thread-name-prefix: <%= dasherizedBaseName %>-scheduling-
178
192
  pool:
179
- size: 1
193
+ size: 20
180
194
  thymeleaf:
181
195
  mode: HTML
182
196
  <%_ if (authenticationTypeOauth2) { _%>
@@ -198,7 +212,6 @@ server:
198
212
  #
199
213
  # Full reference is available at: https://www.jhipster.tech/common-application-properties/
200
214
  # ===================================================================
201
-
202
215
  jhipster:
203
216
  clientApp:
204
217
  name: "<%= frontendAppName %>"
@@ -230,18 +243,6 @@ jhipster:
230
243
  # security key (this key should be unique for your application, and kept secret)
231
244
  key: <%= rememberMeKey %>
232
245
  <%_ } _%>
233
- <%_ if (messageBrokerKafka) { _%>
234
- kafka:
235
- bootstrap-servers: localhost:9092
236
- consumer:
237
- key.deserializer: org.apache.kafka.common.serialization.StringDeserializer
238
- value.deserializer: org.apache.kafka.common.serialization.StringDeserializer
239
- group.id: <%= dasherizedBaseName %>
240
- auto.offset.reset: earliest
241
- producer:
242
- key.serializer: org.apache.kafka.common.serialization.StringSerializer
243
- value.serializer: org.apache.kafka.common.serialization.StringSerializer
244
- <%_ } _%>
245
246
 
246
247
  # ===================================================================
247
248
  # Application specific properties
@@ -0,0 +1 @@
1
+ testcontainers.reuse.enable=true
@@ -174,6 +174,7 @@ module.exports = class extends BaseBlueprintGenerator {
174
174
  packages: this.packages,
175
175
  },
176
176
  devDependencies: {
177
+ rxjs: '^7', // Not required, workaround https://github.com/npm/cli/issues/4437
177
178
  concurrently: this.dependabotPackageJson.devDependencies.concurrently,
178
179
  },
179
180
  scripts: {
@@ -235,7 +236,7 @@ module.exports = class extends BaseBlueprintGenerator {
235
236
  if (this.dockerCompose) {
236
237
  return {
237
238
  'ci:e2e:prepare': 'docker-compose -f docker-compose/docker-compose.yml up -d',
238
- 'ci:e2e:teardown': 'docker-compose -f docker-compose/docker-compose.yml down -v --remove-orphans',
239
+ 'ci:e2e:teardown': 'docker-compose -f docker-compose/docker-compose.yml down -v',
239
240
  };
240
241
  }
241
242
  return {};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "generator-jhipster",
3
- "version": "7.7.0",
3
+ "version": "7.8.0",
4
4
  "description": "Spring Boot + Angular/React/Vue in one handy generator",
5
5
  "keywords": [
6
6
  "yeoman-generator",
@@ -84,13 +84,13 @@
84
84
  },
85
85
  "dependencies": {
86
86
  "@faker-js/faker": "5.5.3",
87
- "aws-sdk": "2.1077.0",
88
- "axios": "0.26.0",
87
+ "aws-sdk": "2.1101.0",
88
+ "axios": "0.26.1",
89
89
  "chalk": "4.1.2",
90
- "chevrotain": "10.1.1",
91
- "commander": "9.0.0",
90
+ "chevrotain": "10.1.2",
91
+ "commander": "9.1.0",
92
92
  "conf": "10.1.1",
93
- "debug": "4.3.3",
93
+ "debug": "4.3.4",
94
94
  "didyoumean": "1.2.2",
95
95
  "ejs": "3.1.6",
96
96
  "glob": "7.2.0",
@@ -98,21 +98,21 @@
98
98
  "js-yaml": "4.1.0",
99
99
  "lodash": "4.17.21",
100
100
  "mem-fs-editor": "9.4.0",
101
- "minimatch": "5.0.0",
101
+ "minimatch": "5.0.1",
102
102
  "normalize-path": "3.0.0",
103
103
  "os-locale": "5.0.0",
104
104
  "p-queue": "6.6.2",
105
105
  "p-transform": "1.3.0",
106
106
  "parse-gitignore": "1.0.1",
107
107
  "pluralize": "8.0.0",
108
- "prettier": "2.5.1",
108
+ "prettier": "2.6.1",
109
109
  "prettier-plugin-java": "1.6.1",
110
- "prettier-plugin-packagejson": "2.2.15",
110
+ "prettier-plugin-packagejson": "2.2.17",
111
111
  "progress": "2.0.3",
112
112
  "randexp": "0.5.3",
113
113
  "semver": "7.3.5",
114
114
  "shelljs": "0.8.5",
115
- "simple-git": "3.2.6",
115
+ "simple-git": "3.4.0",
116
116
  "then-request": "6.0.2",
117
117
  "uuid": "8.3.2",
118
118
  "winston": "3.6.0",
@@ -122,17 +122,17 @@
122
122
  "devDependencies": {
123
123
  "chai": "4.3.6",
124
124
  "ejs-lint": "1.2.1",
125
- "eslint": "8.9.0",
125
+ "eslint": "8.12.0",
126
126
  "eslint-config-airbnb-base": "15.0.0",
127
- "eslint-config-prettier": "8.4.0",
128
- "eslint-plugin-chai-friendly": "^0.7.1",
127
+ "eslint-config-prettier": "8.5.0",
128
+ "eslint-plugin-chai-friendly": "0.7.2",
129
129
  "eslint-plugin-import": "2.25.4",
130
130
  "eslint-plugin-mocha": "10.0.3",
131
131
  "eslint-plugin-prettier": "4.0.0",
132
132
  "expect": "27.5.1",
133
- "fs-extra": "10.0.0",
133
+ "fs-extra": "10.0.1",
134
134
  "jsdoc": "3.6.10",
135
- "mocha": "9.2.1",
135
+ "mocha": "9.2.2",
136
136
  "mocha-expect-snapshot": "3.1.0",
137
137
  "proxyquire": "2.1.3",
138
138
  "sinon": "13.0.1",
package/utils/entity.js CHANGED
@@ -47,7 +47,9 @@ const BASE_TEMPLATE_DATA = {
47
47
  haveFieldWithJavadoc: false,
48
48
  existingEnum: false,
49
49
  searchEngine: false,
50
+ microserviceName: undefined,
50
51
 
52
+ requiresPersistableImplementation: false,
51
53
  fieldsContainDate: false,
52
54
  fieldsContainInstant: false,
53
55
  fieldsContainUUID: false,
package/utils/field.js CHANGED
@@ -240,6 +240,7 @@ function _derivedProperties(field) {
240
240
 
241
241
  function prepareFieldForTemplates(entityWithConfig, field, generator) {
242
242
  _.defaults(field, {
243
+ propertyName: field.fieldName,
243
244
  fieldNameCapitalized: _.upperFirst(field.fieldName),
244
245
  fieldNameUnderscored: _.snakeCase(field.fieldName),
245
246
  fieldNameHumanized: _.startCase(field.fieldName),
@@ -270,23 +271,27 @@ function prepareFieldForTemplates(entityWithConfig, field, generator) {
270
271
  field.jpaGeneratedValue = false;
271
272
  field.autoGenerateByService = false;
272
273
  field.autoGenerateByRepository = false;
274
+ field.requiresPersistableImplementation = true;
273
275
  } else if (entityWithConfig.databaseType !== SQL) {
274
276
  field.liquibaseAutoIncrement = false;
275
277
  field.jpaGeneratedValue = false;
276
278
  field.autoGenerateByService = field.fieldType === UUID;
277
279
  field.autoGenerateByRepository = !field.autoGenerateByService;
280
+ field.requiresPersistableImplementation = false;
278
281
  field.readonly = true;
279
282
  } else if (entityWithConfig.reactive) {
280
- field.liquibaseAutoIncrement = true;
283
+ field.liquibaseAutoIncrement = field.fieldType === LONG;
281
284
  field.jpaGeneratedValue = false;
282
- field.autoGenerateByService = false;
283
- field.autoGenerateByRepository = true;
285
+ field.autoGenerateByService = !field.liquibaseAutoIncrement;
286
+ field.autoGenerateByRepository = !field.autoGenerateByService;
287
+ field.requiresPersistableImplementation = !field.liquibaseAutoIncrement;
284
288
  field.readonly = true;
285
289
  } else {
286
290
  const defaultGenerationType = entityWithConfig.prodDatabaseType === MYSQL ? 'identity' : 'sequence';
287
291
  field.jpaGeneratedValue = field.jpaGeneratedValue || field.fieldType === LONG ? defaultGenerationType : true;
288
292
  field.autoGenerateByService = false;
289
293
  field.autoGenerateByRepository = true;
294
+ field.requiresPersistableImplementation = false;
290
295
  field.readonly = true;
291
296
  if (field.jpaGeneratedValue === 'identity') {
292
297
  field.liquibaseAutoIncrement = true;
@@ -71,7 +71,12 @@ function prepareRelationshipForTemplates(entityWithConfig, relationship, generat
71
71
  }
72
72
  return otherSideRelationship.relationshipName === relationship.otherEntityRelationshipName;
73
73
  });
74
- if (
74
+ if (!otherRelationship) {
75
+ // TODO throw error at v8.
76
+ generator.warning(
77
+ `Error at '${entityName}' definitions: 'otherEntityRelationshipName' is set with value '${relationship.otherEntityRelationshipName}' at relationship '${relationship.relationshipName}' but no back-reference was found at '${otherEntityName}'`
78
+ );
79
+ } else if (
75
80
  otherRelationship &&
76
81
  otherRelationship.otherEntityRelationshipName &&
77
82
  otherRelationship.otherEntityRelationshipName !== relationship.relationshipName
@@ -176,6 +181,10 @@ function prepareRelationshipForTemplates(entityWithConfig, relationship, generat
176
181
  otherEntityNameCapitalizedPlural: pluralize(relationship.otherEntityNameCapitalized),
177
182
  });
178
183
 
184
+ _.defaults(relationship, {
185
+ propertyName: relationship.collection ? relationship.relationshipFieldNamePlural : relationship.relationshipFieldName,
186
+ });
187
+
179
188
  if (entityWithConfig.dto === MAPSTRUCT) {
180
189
  if (otherEntityData.dto !== MAPSTRUCT && !generator.isBuiltInUser(otherEntityName)) {
181
190
  generator.warning(
@@ -1,25 +0,0 @@
1
- package <%= entityAbsolutePackage %>.repository.search;
2
-
3
- import org.elasticsearch.search.sort.FieldSortBuilder;
4
- import org.elasticsearch.search.sort.SortBuilder;
5
- import org.elasticsearch.search.sort.SortOrder;
6
- import org.springframework.core.convert.converter.Converter;
7
- import org.springframework.data.domain.Sort;
8
-
9
- import java.util.ArrayList;
10
- import java.util.List;
11
-
12
- public class SortToSortBuilderListConverter implements Converter<Sort, List<SortBuilder<?>>> {
13
-
14
- @Override
15
- public List<SortBuilder<?>> convert(Sort sort) {
16
- List<SortBuilder<?>> builders = new ArrayList<>();
17
- sort.stream().forEach(order -> {
18
- String property = order.getProperty() + ".keyword";
19
- SortOrder sortOrder = SortOrder.fromString(order.getDirection().name());
20
- builders.add(new FieldSortBuilder(property).order(sortOrder));
21
-
22
- });
23
- return builders;
24
- }
25
- }
@@ -1,117 +0,0 @@
1
- /*
2
- * Copyright 2007-present the original author or authors.
3
- *
4
- * Licensed under the Apache License, Version 2.0 (the "License");
5
- * you may not use this file except in compliance with the License.
6
- * You may obtain a copy of the License at
7
- *
8
- * https://www.apache.org/licenses/LICENSE-2.0
9
- *
10
- * Unless required by applicable law or agreed to in writing, software
11
- * distributed under the License is distributed on an "AS IS" BASIS,
12
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
- * See the License for the specific language governing permissions and
14
- * limitations under the License.
15
- */
16
- import java.net.*;
17
- import java.io.*;
18
- import java.nio.channels.*;
19
- import java.util.Properties;
20
-
21
- public class MavenWrapperDownloader {
22
-
23
- private static final String WRAPPER_VERSION = "0.5.6";
24
- /**
25
- * Default URL to download the maven-wrapper.jar from, if no 'downloadUrl' is provided.
26
- */
27
- private static final String DEFAULT_DOWNLOAD_URL = "https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/"
28
- + WRAPPER_VERSION + "/maven-wrapper-" + WRAPPER_VERSION + ".jar";
29
-
30
- /**
31
- * Path to the maven-wrapper.properties file, which might contain a downloadUrl property to
32
- * use instead of the default one.
33
- */
34
- private static final String MAVEN_WRAPPER_PROPERTIES_PATH =
35
- ".mvn/wrapper/maven-wrapper.properties";
36
-
37
- /**
38
- * Path where the maven-wrapper.jar will be saved to.
39
- */
40
- private static final String MAVEN_WRAPPER_JAR_PATH =
41
- ".mvn/wrapper/maven-wrapper.jar";
42
-
43
- /**
44
- * Name of the property which should be used to override the default download url for the wrapper.
45
- */
46
- private static final String PROPERTY_NAME_WRAPPER_URL = "wrapperUrl";
47
-
48
- public static void main(String args[]) {
49
- System.out.println("- Downloader started");
50
- File baseDirectory = new File(args[0]);
51
- System.out.println("- Using base directory: " + baseDirectory.getAbsolutePath());
52
-
53
- // If the maven-wrapper.properties exists, read it and check if it contains a custom
54
- // wrapperUrl parameter.
55
- File mavenWrapperPropertyFile = new File(baseDirectory, MAVEN_WRAPPER_PROPERTIES_PATH);
56
- String url = DEFAULT_DOWNLOAD_URL;
57
- if(mavenWrapperPropertyFile.exists()) {
58
- FileInputStream mavenWrapperPropertyFileInputStream = null;
59
- try {
60
- mavenWrapperPropertyFileInputStream = new FileInputStream(mavenWrapperPropertyFile);
61
- Properties mavenWrapperProperties = new Properties();
62
- mavenWrapperProperties.load(mavenWrapperPropertyFileInputStream);
63
- url = mavenWrapperProperties.getProperty(PROPERTY_NAME_WRAPPER_URL, url);
64
- } catch (IOException e) {
65
- System.out.println("- ERROR loading '" + MAVEN_WRAPPER_PROPERTIES_PATH + "'");
66
- } finally {
67
- try {
68
- if(mavenWrapperPropertyFileInputStream != null) {
69
- mavenWrapperPropertyFileInputStream.close();
70
- }
71
- } catch (IOException e) {
72
- // Ignore ...
73
- }
74
- }
75
- }
76
- System.out.println("- Downloading from: " + url);
77
-
78
- File outputFile = new File(baseDirectory.getAbsolutePath(), MAVEN_WRAPPER_JAR_PATH);
79
- if(!outputFile.getParentFile().exists()) {
80
- if(!outputFile.getParentFile().mkdirs()) {
81
- System.out.println(
82
- "- ERROR creating output directory '" + outputFile.getParentFile().getAbsolutePath() + "'");
83
- }
84
- }
85
- System.out.println("- Downloading to: " + outputFile.getAbsolutePath());
86
- try {
87
- downloadFileFromURL(url, outputFile);
88
- System.out.println("Done");
89
- System.exit(0);
90
- } catch (Throwable e) {
91
- System.out.println("- Error downloading");
92
- e.printStackTrace();
93
- System.exit(1);
94
- }
95
- }
96
-
97
- private static void downloadFileFromURL(String urlString, File destination) throws Exception {
98
- if (System.getenv("MVNW_USERNAME") != null && System.getenv("MVNW_PASSWORD") != null) {
99
- String username = System.getenv("MVNW_USERNAME");
100
- char[] password = System.getenv("MVNW_PASSWORD").toCharArray();
101
- Authenticator.setDefault(new Authenticator() {
102
- @Override
103
- protected PasswordAuthentication getPasswordAuthentication() {
104
- return new PasswordAuthentication(username, password);
105
- }
106
- });
107
- }
108
- URL website = new URL(urlString);
109
- ReadableByteChannel rbc;
110
- rbc = Channels.newChannel(website.openStream());
111
- FileOutputStream fos = new FileOutputStream(destination);
112
- fos.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE);
113
- fos.close();
114
- rbc.close();
115
- }
116
-
117
- }