generator-jhipster 7.6.0 → 7.8.1

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 (432) hide show
  1. package/README.md +1 -4
  2. package/cli/commands.js +3 -0
  3. package/cli/environment-builder.js +53 -18
  4. package/cli/import-jdl.js +3 -0
  5. package/cli/index.mjs +20 -0
  6. package/cli/jhipster.js +19 -11
  7. package/cli/program.js +94 -38
  8. package/generators/app/esm.mjs +1 -3
  9. package/generators/app/index.js +11 -16
  10. package/generators/aws/esm.mjs +1 -3
  11. package/generators/azure-app-service/esm.mjs +1 -3
  12. package/generators/azure-spring-cloud/esm.mjs +1 -3
  13. package/generators/base/esm.mjs +1 -3
  14. package/generators/bootstrap/esm.mjs +1 -3
  15. package/generators/bootstrap/index.js +36 -86
  16. package/generators/bootstrap-application/esm.mjs +19 -0
  17. package/generators/bootstrap-application/generator.mjs +353 -0
  18. package/generators/bootstrap-application/index.mjs +19 -0
  19. package/generators/ci-cd/esm.mjs +1 -3
  20. package/generators/ci-cd/index.js +1 -1
  21. package/generators/ci-cd/prompts.js +1 -1
  22. package/generators/ci-cd/templates/github-actions.yml.ejs +6 -6
  23. package/generators/client/esm.mjs +5 -3
  24. package/generators/client/files-angular.js +9 -0
  25. package/generators/client/files-common.js +9 -9
  26. package/generators/client/files-react.js +25 -2
  27. package/generators/client/files-vue.js +7 -6
  28. package/generators/client/index.js +3 -2
  29. package/generators/client/needle-api/needle-client-react.js +11 -8
  30. package/generators/client/templates/angular/angular.json.ejs +2 -10
  31. package/generators/client/templates/angular/jest.conf.js.ejs +1 -1
  32. package/generators/client/templates/angular/package.json +29 -27
  33. package/generators/client/templates/angular/package.json.ejs +6 -2
  34. package/generators/client/templates/angular/src/main/webapp/app/account/activate/activate.component.html.ejs +1 -1
  35. package/generators/client/templates/angular/src/main/webapp/app/account/password/password.component.html.ejs +7 -7
  36. package/generators/client/templates/angular/src/main/webapp/app/account/password-reset/finish/password-reset-finish.component.html.ejs +5 -5
  37. package/generators/client/templates/angular/src/main/webapp/app/account/password-reset/init/password-reset-init.component.html.ejs +3 -3
  38. package/generators/client/templates/angular/src/main/webapp/app/account/register/register.component.html.ejs +10 -10
  39. package/generators/client/templates/angular/src/main/webapp/app/account/settings/settings.component.html.ejs +8 -8
  40. package/generators/client/templates/angular/src/main/webapp/app/admin/configuration/configuration.component.html.ejs +2 -2
  41. package/generators/client/templates/angular/src/main/webapp/app/admin/gateway/gateway.component.html.ejs +5 -5
  42. package/generators/client/templates/angular/src/main/webapp/app/admin/health/health.component.html.ejs +1 -1
  43. package/generators/client/templates/angular/src/main/webapp/app/admin/health/health.component.spec.ts.ejs +2 -2
  44. package/generators/client/templates/angular/src/main/webapp/app/admin/health/health.component.ts.ejs +2 -2
  45. package/generators/client/templates/angular/src/main/webapp/app/admin/health/modal/health-modal.component.html.ejs +6 -6
  46. package/generators/client/templates/angular/src/main/webapp/app/admin/logs/logs.component.html.ejs +51 -49
  47. package/generators/client/templates/angular/src/main/webapp/app/admin/metrics/blocks/metrics-cache/metrics-cache.component.html.ejs +16 -16
  48. package/generators/client/templates/angular/src/main/webapp/app/admin/metrics/blocks/metrics-datasource/metrics-datasource.component.html.ejs +32 -32
  49. package/generators/client/templates/angular/src/main/webapp/app/admin/metrics/blocks/metrics-endpoints-requests/metrics-endpoints-requests.component.html.ejs +4 -4
  50. package/generators/client/templates/angular/src/main/webapp/app/admin/metrics/blocks/metrics-garbagecollector/metrics-garbagecollector.component.html.ejs +18 -18
  51. package/generators/client/templates/angular/src/main/webapp/app/admin/metrics/blocks/metrics-modal-threads/metrics-modal-threads.component.html.ejs +12 -12
  52. package/generators/client/templates/angular/src/main/webapp/app/admin/metrics/blocks/metrics-modal-threads/metrics-modal-threads.component.ts.ejs +4 -4
  53. package/generators/client/templates/angular/src/main/webapp/app/admin/metrics/blocks/metrics-request/metrics-request.component.html.ejs +4 -4
  54. package/generators/client/templates/angular/src/main/webapp/app/admin/metrics/blocks/metrics-system/metrics-system.component.html.ejs +8 -8
  55. package/generators/client/templates/angular/src/main/webapp/app/admin/metrics/metrics.component.html.ejs +1 -1
  56. package/generators/client/templates/angular/src/main/webapp/app/admin/user-management/delete/user-management-delete-dialog.component.html.ejs +1 -1
  57. package/generators/client/templates/angular/src/main/webapp/app/admin/user-management/detail/user-management-detail.component.html.ejs +4 -4
  58. package/generators/client/templates/angular/src/main/webapp/app/admin/user-management/list/user-management.component.html.ejs +5 -5
  59. package/generators/client/templates/angular/src/main/webapp/app/admin/user-management/list/user-management.component.ts.ejs +1 -1
  60. package/generators/client/templates/angular/src/main/webapp/app/admin/user-management/update/user-management-update.component.html.ejs +11 -11
  61. package/generators/client/templates/angular/src/main/webapp/app/core/util/data-util.service.ts.ejs +1 -1
  62. package/generators/client/templates/angular/src/main/webapp/app/core/util/parse-links.service.ts.ejs +1 -1
  63. package/generators/client/templates/angular/src/main/webapp/app/layouts/navbar/navbar.component.html.ejs +4 -2
  64. package/generators/client/templates/angular/src/main/webapp/app/layouts/navbar/navbar.component.scss.ejs +0 -6
  65. package/generators/client/templates/angular/src/main/webapp/app/layouts/profiles/page-ribbon.component.scss.ejs +0 -6
  66. package/generators/client/templates/angular/src/main/webapp/app/login/login.component.html.ejs +3 -3
  67. package/generators/client/templates/angular/src/main/webapp/content/scss/_bootstrap-variables.scss.ejs +5 -5
  68. package/generators/client/templates/angular/src/main/webapp/content/scss/global.scss.ejs +29 -0
  69. package/generators/client/templates/angular/src/main/webapp/content/scss/vendor.scss.ejs +0 -4
  70. package/generators/client/templates/angular/webpack/webpack.custom.js.ejs +31 -1
  71. package/generators/client/templates/common/package.json +7 -6
  72. package/generators/client/templates/common/src/main/webapp/swagger-ui/index.html.ejs +1 -7
  73. package/generators/client/templates/common/webpack/webpack.microfrontend.js.jhi.ejs +2 -3
  74. package/generators/client/templates/react/.eslintrc.json.ejs +1 -1
  75. package/generators/client/templates/react/jest.conf.js.ejs +1 -1
  76. package/generators/client/templates/react/package.json +44 -45
  77. package/generators/client/templates/react/package.json.ejs +1 -0
  78. package/generators/client/templates/react/src/main/webapp/app/app.scss.ejs +1 -1
  79. package/generators/client/templates/react/src/main/webapp/app/config/store.ts.ejs +53 -6
  80. package/generators/client/templates/react/src/main/webapp/app/config/translation-middleware.ts.ejs +58 -0
  81. package/generators/client/templates/react/src/main/webapp/app/entities/menu.tsx.ejs +45 -0
  82. package/generators/client/templates/react/src/main/webapp/app/entities/reducers.ts.ejs +25 -0
  83. package/generators/client/templates/react/src/main/webapp/app/entities/routes.tsx.ejs +47 -0
  84. package/generators/client/templates/react/src/main/webapp/app/index.tsx.ejs +7 -7
  85. package/generators/client/templates/react/src/main/webapp/app/main.tsx.ejs +19 -0
  86. package/generators/client/templates/react/src/main/webapp/app/modules/administration/logs/logs.tsx.ejs +1 -1
  87. package/generators/client/templates/react/src/main/webapp/app/modules/administration/user-management/user-management.tsx.ejs +2 -1
  88. package/generators/client/templates/react/src/main/webapp/app/modules/login/login-modal.tsx.ejs +5 -1
  89. package/generators/client/templates/react/src/main/webapp/app/routes.tsx.ejs +24 -7
  90. package/generators/client/templates/react/src/main/webapp/app/shared/error/error-loading.tsx.ejs +15 -0
  91. package/generators/client/templates/react/src/main/webapp/app/shared/layout/menus/entities.tsx.ejs +34 -6
  92. package/generators/client/templates/react/src/main/webapp/app/shared/reducers/index.ts.ejs +9 -2
  93. package/generators/client/templates/react/src/main/webapp/app/shared/reducers/locale.spec.ts.ejs +9 -3
  94. package/generators/client/templates/react/src/main/webapp/app/shared/reducers/locale.ts.ejs +21 -5
  95. package/generators/client/templates/react/src/main/webapp/app/typings.d.ts.ejs +15 -0
  96. package/generators/client/templates/react/src/main/webapp/microfrontends/entities-menu.tsx.ejs +3 -0
  97. package/generators/client/templates/react/src/main/webapp/microfrontends/entities-routes.tsx.ejs +3 -0
  98. package/generators/client/templates/react/tsconfig.json.ejs +3 -3
  99. package/generators/client/templates/react/tsconfig.test.json.ejs +9 -1
  100. package/generators/client/templates/react/webpack/webpack.common.js.ejs +6 -13
  101. package/generators/client/templates/react/webpack/webpack.dev.js.ejs +7 -8
  102. package/generators/client/templates/react/webpack/webpack.microfrontend.js.jhi.react.ejs +99 -0
  103. package/generators/client/templates/react/webpack/webpack.prod.js.ejs +31 -21
  104. package/generators/client/templates/vue/package.json +30 -31
  105. package/generators/client/templates/vue/package.json.ejs +1 -1
  106. package/generators/client/templates/vue/src/main/webapp/app/core/jhi-navbar/jhi-navbar.component.ts.ejs +4 -3
  107. package/generators/client/templates/vue/src/main/webapp/app/entities/user/user.service.ts.ejs +0 -0
  108. package/generators/client/templates/vue/src/main/webapp/app/main.ts.ejs +29 -1
  109. package/generators/client/templates/vue/src/main/webapp/app/shared/config/axios-interceptor.ts.ejs +2 -2
  110. package/generators/client/templates/vue/src/main/webapp/app/shared/config/config.ts.ejs +0 -4
  111. package/generators/client/templates/vue/src/main/webapp/app/shared/data/data-utils.service.ts.ejs +1 -1
  112. package/generators/client/templates/vue/src/test/javascript/jest.conf.js.ejs +2 -2
  113. package/generators/client/templates/vue/tsconfig.json.ejs +0 -3
  114. package/generators/client/templates/vue/webpack/webpack.common.js.ejs +6 -2
  115. package/generators/cloudfoundry/esm.mjs +1 -3
  116. package/generators/common/esm.mjs +2 -3
  117. package/generators/common/files.js +1 -2
  118. package/generators/common/index.js +6 -0
  119. package/generators/common/templates/.husky/{pre-commit → pre-commit.ejs} +4 -0
  120. package/generators/common/templates/README.md.jhi.ejs +3 -1
  121. package/generators/common/templates/package.json +4 -4
  122. package/generators/common/templates/sonar-project.properties.ejs +1 -1
  123. package/generators/cypress/esm.mjs +2 -3
  124. package/generators/cypress/files.js +2 -1
  125. package/generators/cypress/templates/src/test/javascript/cypress/integration/account/settings-page.spec.ts.ejs +18 -14
  126. package/generators/database-changelog/esm.mjs +1 -3
  127. package/generators/database-changelog/index.js +1 -1
  128. package/generators/database-changelog-liquibase/esm.mjs +2 -3
  129. package/generators/docker-compose/esm.mjs +1 -3
  130. package/generators/docker-compose/index.js +9 -5
  131. package/generators/entities/esm.mjs +1 -3
  132. package/generators/entities/index.js +2 -2
  133. package/generators/entities-client/esm.mjs +1 -3
  134. package/generators/entity/esm.mjs +1 -3
  135. package/generators/entity/index.js +39 -28
  136. package/generators/entity/prompts.js +4 -1
  137. package/generators/entity-client/esm.mjs +2 -3
  138. package/generators/entity-client/index.js +8 -0
  139. package/generators/entity-client/templates/angular/src/main/webapp/app/entities/delete/entity-management-delete-dialog.component.html.ejs +1 -1
  140. package/generators/entity-client/templates/angular/src/main/webapp/app/entities/detail/entity-management-detail.component.html.ejs +2 -2
  141. package/generators/entity-client/templates/angular/src/main/webapp/app/entities/list/entity-management.component.html.ejs +20 -21
  142. package/generators/entity-client/templates/angular/src/main/webapp/app/entities/list/entity-management.component.ts.ejs +1 -1
  143. package/generators/entity-client/templates/angular/src/main/webapp/app/entities/update/entity-management-update.component.html.ejs +14 -16
  144. package/generators/entity-client/templates/angular/src/main/webapp/app/entities/update/entity-management-update.component.ts.ejs +3 -3
  145. package/generators/entity-client/templates/common/src/test/javascript/cypress/integration/entity/entity.spec.ts.ejs +2 -1
  146. package/generators/entity-client/templates/react/src/main/webapp/app/entities/entity-delete-dialog.tsx.ejs +3 -3
  147. package/generators/entity-client/templates/react/src/main/webapp/app/entities/entity-detail.tsx.ejs +5 -4
  148. package/generators/entity-client/templates/react/src/main/webapp/app/entities/entity-reducer.spec.ts.ejs +1 -1
  149. package/generators/entity-client/templates/react/src/main/webapp/app/entities/entity-update.tsx.ejs +20 -19
  150. package/generators/entity-client/templates/react/src/main/webapp/app/entities/entity.reducer.ts.ejs +2 -2
  151. package/generators/entity-client/templates/react/src/main/webapp/app/entities/entity.tsx.ejs +21 -20
  152. package/generators/entity-client/templates/react/src/test/javascript/e2e/entities/entity-update-page-object.ts.ejs +1 -1
  153. package/generators/entity-client/templates/vue/src/test/javascript/e2e/entities/entity-update-page-object.ts.ejs +1 -1
  154. package/generators/entity-client/templates/vue/src/test/javascript/e2e/entities/entity.spec.ts.ejs +1 -1
  155. package/generators/entity-i18n/esm.mjs +2 -3
  156. package/generators/entity-i18n/templates/i18n/entity_fr.json.ejs +1 -1
  157. package/generators/entity-server/esm.mjs +2 -3
  158. package/generators/entity-server/files-couchbase.js +23 -2
  159. package/generators/entity-server/files.js +40 -6
  160. package/generators/entity-server/index.js +27 -2
  161. package/generators/entity-server/templates/couchbase/src/main/java/package/domain/Entity.java.jhi.spring_data_couchbase.ejs +11 -13
  162. package/generators/entity-server/templates/couchbase/src/main/java/package/repository/EntityRepository.java.ejs +30 -43
  163. package/generators/entity-server/templates/couchbase/src/main/resources/config/couchmove/changelog/entity.fts.ejs +5 -6
  164. package/generators/entity-server/templates/couchbase/src/main/resources/config/couchmove/changelog/entity.n1ql.ejs +5 -0
  165. package/generators/entity-server/templates/partials/it_patch_update.partial.java.ejs +2 -2
  166. package/generators/entity-server/templates/partials/save_template.ejs +1 -1
  167. package/generators/entity-server/templates/partials/update_template.ejs +77 -0
  168. package/generators/entity-server/templates/reactive/partials/save_template.ejs +1 -1
  169. package/generators/entity-server/templates/reactive/partials/update_template.ejs +41 -0
  170. package/generators/entity-server/templates/src/main/java/package/common/get_all_template.ejs +5 -5
  171. package/generators/entity-server/templates/src/main/java/package/common/get_template.ejs +1 -1
  172. package/generators/entity-server/templates/src/main/java/package/common/inject_template.ejs +17 -8
  173. package/generators/entity-server/templates/src/main/java/package/common/patch_template.ejs +5 -5
  174. package/generators/entity-server/templates/src/main/java/package/common/search_stream_template.ejs +1 -1
  175. package/generators/entity-server/templates/src/main/java/package/common/search_template.ejs +1 -1
  176. package/generators/entity-server/templates/src/main/java/package/domain/Entity.java.jhi.ejs +4 -3
  177. package/generators/entity-server/templates/src/main/java/package/domain/Entity.java.jhi.javax_lifecycle_events.ejs +31 -0
  178. package/generators/entity-server/templates/src/main/java/package/domain/Entity.java.jhi.spring_data_persistable.ejs +54 -0
  179. package/generators/entity-server/templates/src/main/java/package/domain/Entity.java.jhi.spring_data_reactive.ejs +1 -1
  180. package/generators/entity-server/templates/src/main/java/package/domain/EntityCallback.java.ejs +43 -0
  181. package/generators/entity-server/templates/src/main/java/package/repository/EntityRepository.java.ejs +36 -23
  182. package/generators/entity-server/templates/src/main/java/package/repository/EntityRepositoryInternalImpl_reactive.java.ejs +24 -28
  183. package/generators/entity-server/templates/src/main/java/package/repository/EntityRepositoryWithBagRelationships.java.ejs +37 -0
  184. package/generators/entity-server/templates/src/main/java/package/repository/EntityRepositoryWithBagRelationshipsImpl.java.ejs +91 -0
  185. package/generators/entity-server/templates/src/main/java/package/repository/EntityRepository_reactive.java.ejs +17 -25
  186. package/generators/entity-server/templates/src/main/java/package/repository/EntitySqlHelper_reactive.java.ejs +2 -2
  187. package/generators/entity-server/templates/src/main/java/package/repository/rowmapper/EntityRowMapper.java.ejs +3 -3
  188. package/generators/entity-server/templates/src/main/java/package/repository/search/EntitySearchRepository.java.ejs +12 -27
  189. package/generators/entity-server/templates/src/main/java/package/service/EntityService.java.ejs +10 -2
  190. package/generators/entity-server/templates/src/main/java/package/service/criteria/EntityCriteria.java.ejs +8 -6
  191. package/generators/entity-server/templates/src/main/java/package/service/impl/EntityServiceImpl.java.ejs +21 -5
  192. package/generators/entity-server/templates/src/main/java/package/service/mapper/EntityMapper.java.ejs +61 -90
  193. package/generators/entity-server/templates/src/main/java/package/web/rest/EntityResource.java.ejs +6 -4
  194. package/generators/entity-server/templates/src/test/java/package/web/rest/EntityResourceIT.java.ejs +33 -20
  195. package/generators/export-jdl/esm.mjs +1 -3
  196. package/generators/gae/esm.mjs +1 -3
  197. package/generators/generate-blueprint/constants.mjs +146 -0
  198. package/generators/generate-blueprint/esm.mjs +19 -0
  199. package/generators/generate-blueprint/files.mjs +81 -0
  200. package/generators/generate-blueprint/generator.mjs +363 -0
  201. package/generators/generate-blueprint/index.mjs +20 -0
  202. package/generators/generate-blueprint/templates/.eslintrc.json.ejs +41 -0
  203. package/generators/generate-blueprint/templates/.github/workflows/generator.yml.ejs +32 -0
  204. package/generators/generate-blueprint/templates/.mocharc.cjs.ejs +29 -0
  205. package/generators/{server/templates/couchbase/src/main/java/package/config/couchbase/package-info.java.ejs → generate-blueprint/templates/.prettierignore.jhi.blueprint.ejs} +4 -7
  206. package/generators/generate-blueprint/templates/README.md.ejs +75 -0
  207. package/generators/generate-blueprint/templates/cli/cli.mjs.ejs +35 -0
  208. package/generators/generate-blueprint/templates/cli/commands.cjs.ejs +25 -0
  209. package/generators/generate-blueprint/templates/generators/generator/generator.mjs.jhi.ejs +98 -0
  210. package/generators/generate-blueprint/templates/generators/generator/generator.spec.mjs.ejs +42 -0
  211. package/generators/generate-blueprint/templates/generators/generator/index.mjs.ejs +19 -0
  212. package/generators/generate-blueprint/templates/generators/generator/templates/template-file.ejs +0 -0
  213. package/generators/generate-blueprint/templates/test/utils.mjs.ejs +17 -0
  214. package/generators/generator-base-blueprint.js +29 -0
  215. package/generators/generator-base-docker.js +1 -0
  216. package/generators/generator-base-entities.cjs +368 -0
  217. package/generators/generator-base-private.js +1 -1
  218. package/generators/generator-base.js +157 -23
  219. package/generators/generator-constants.js +22 -20
  220. package/generators/generator-list.js +2 -0
  221. package/generators/generator-transforms.js +0 -1
  222. package/generators/gradle/constants.cjs +1 -1
  223. package/generators/gradle/esm.mjs +19 -0
  224. package/generators/heroku/esm.mjs +1 -3
  225. package/generators/info/esm.mjs +1 -3
  226. package/generators/init/esm.mjs +19 -0
  227. package/generators/init/files.cjs +9 -3
  228. package/generators/init/index.cjs +5 -0
  229. package/generators/init/templates/.gitignore.jhi.ejs +5 -0
  230. package/generators/init/templates/{.lintstagedrc.js.ejs → .lintstagedrc.cjs.ejs} +0 -0
  231. package/generators/java/esm.mjs +19 -0
  232. package/generators/java/index.cjs +58 -2
  233. package/generators/kubernetes/esm.mjs +1 -3
  234. package/generators/kubernetes-helm/esm.mjs +1 -3
  235. package/generators/kubernetes-knative/esm.mjs +1 -3
  236. package/generators/languages/esm.mjs +2 -3
  237. package/generators/languages/templates/src/test/resources/i18n/messages_fr.properties.ejs +4 -1
  238. package/generators/maven/esm.mjs +19 -0
  239. package/generators/maven/files.cjs +0 -1
  240. package/generators/maven/templates/.mvn/wrapper/maven-wrapper.jar +0 -0
  241. package/generators/maven/templates/.mvn/wrapper/maven-wrapper.properties +18 -2
  242. package/generators/maven/templates/mvnw +13 -7
  243. package/generators/maven/templates/mvnw.cmd +19 -13
  244. package/generators/maven/templates/pom.xml.jhi.ejs +1 -1
  245. package/generators/openapi-client/esm.mjs +1 -3
  246. package/generators/openapi-client/index.js +11 -4
  247. package/generators/openshift/esm.mjs +1 -3
  248. package/generators/page/esm.mjs +1 -3
  249. package/generators/project-name/esm.mjs +19 -0
  250. package/generators/server/cleanup.js +19 -3
  251. package/generators/server/esm.mjs +2 -2
  252. package/generators/server/files-couchbase.js +28 -31
  253. package/generators/server/files.js +115 -18
  254. package/generators/server/index.js +23 -17
  255. package/generators/server/needle-api/needle-server-gradle.js +38 -0
  256. package/generators/server/needle-api/needle-server-maven.js +1 -1
  257. package/generators/server/templates/.mvn/jvm.config +1 -0
  258. package/generators/server/templates/.mvn/wrapper/maven-wrapper.jar +0 -0
  259. package/generators/server/templates/.mvn/wrapper/maven-wrapper.properties +18 -2
  260. package/generators/server/templates/build.gradle.ejs +7 -5
  261. package/generators/server/templates/couchbase/src/main/java/package/repository/CouchbaseSearchRepository.java.ejs +91 -0
  262. package/generators/server/templates/couchbase/src/main/java/package/repository/JHipsterCouchbaseRepository.java.ejs +47 -45
  263. package/generators/server/templates/couchbase/src/main/java/package/repository/PersistentTokenRepository_couchbase.java.ejs +2 -2
  264. package/generators/server/templates/couchbase/src/main/resources/config/couchmove/changelog/V0.1__initial_setup/authority/ROLE_ADMIN.json.ejs +3 -0
  265. package/generators/server/templates/couchbase/src/main/resources/config/couchmove/changelog/V0.1__initial_setup/authority/ROLE_USER.json.ejs +3 -0
  266. package/generators/server/templates/couchbase/src/main/resources/config/couchmove/changelog/V0.1__initial_setup/{user__admin.json.ejs → user/admin.json.ejs} +2 -2
  267. package/generators/server/templates/couchbase/src/main/resources/config/couchmove/changelog/V0.1__initial_setup/{user__user.json.ejs → user/user.json.ejs} +2 -2
  268. package/generators/server/templates/couchbase/src/main/resources/config/couchmove/changelog/V0.2__create_indexes.n1ql.ejs +34 -0
  269. package/generators/server/templates/couchbase/src/main/resources/config/couchmove/changelog/V0__create_collections.n1ql.ejs +8 -0
  270. package/generators/server/templates/couchbase/src/test/java/package/CouchbaseTestContainerExtension.java.ejs +4 -3
  271. package/generators/server/templates/couchbase/src/test/java/package/repository/{JHipsterCouchbaseRepositoryTest.java.ejs → CouchbaseSearchRepositoryTest.java.ejs} +2 -2
  272. package/generators/server/templates/devcontainer/Dockerfile.ejs +25 -0
  273. package/generators/server/templates/devcontainer/devcontainer.json.ejs +64 -0
  274. package/generators/server/templates/gradle/profile_prod.gradle.ejs +4 -0
  275. package/generators/server/templates/gradle/wrapper/gradle-wrapper.jar +0 -0
  276. package/generators/server/templates/gradle.properties.ejs +8 -8
  277. package/generators/server/templates/mvnw +13 -7
  278. package/generators/server/templates/mvnw.cmd +19 -13
  279. package/generators/server/templates/npmw +14 -5
  280. package/generators/server/templates/pom.xml.ejs +65 -58
  281. package/generators/server/templates/settings.gradle.ejs +6 -4
  282. package/generators/server/templates/src/main/docker/app.yml.ejs +4 -6
  283. package/generators/server/templates/src/main/docker/config/realm-config/jhipster-realm.json.ejs +2 -1
  284. package/generators/server/templates/src/main/docker/mysql.yml.ejs +1 -0
  285. package/generators/server/templates/src/main/docker/zipkin.yml.ejs +25 -0
  286. package/generators/server/templates/src/main/java/package/config/AsyncConfiguration.java.ejs +6 -0
  287. package/generators/server/templates/src/main/java/package/config/DatabaseConfiguration_couchbase.java.ejs +26 -16
  288. 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
  289. package/generators/server/templates/src/main/java/package/config/KafkaSseProducer.java.ejs +30 -0
  290. package/generators/server/templates/src/main/java/package/config/LocaleConfiguration_reactive.java.ejs +1 -1
  291. package/generators/server/templates/src/main/java/package/config/SecurityConfiguration.java.ejs +12 -10
  292. package/generators/server/templates/src/main/java/package/config/SecurityConfiguration_reactive.java.ejs +2 -1
  293. package/generators/server/templates/src/main/java/package/domain/Authority.java.ejs +11 -0
  294. package/generators/server/templates/src/main/java/package/domain/PersistentToken.java.ejs +6 -6
  295. package/generators/server/templates/src/main/java/package/domain/User.java.ejs +9 -7
  296. package/generators/server/templates/src/main/java/package/repository/AuthorityRepository.java.ejs +1 -11
  297. package/generators/server/templates/src/main/java/package/repository/EntityManager.java.ejs +48 -38
  298. package/generators/server/templates/src/main/java/package/repository/UserRepository.java.ejs +48 -72
  299. package/generators/server/templates/src/main/java/package/security/jwt/JWTFilter.java.ejs +1 -1
  300. package/generators/server/templates/src/main/java/package/security/jwt/TokenProvider.java.ejs +1 -1
  301. package/generators/server/templates/src/main/java/package/security/oauth2/CustomClaimConverter.java.ejs +1 -1
  302. package/generators/server/templates/src/main/java/package/service/UserService.java.ejs +8 -6
  303. package/generators/server/templates/src/main/java/package/web/filter/OAuth2ReactiveRefreshTokensWebFilter.java.ejs +0 -1
  304. package/generators/server/templates/src/main/java/package/web/rest/AccountResource.java.ejs +1 -1
  305. package/generators/server/templates/src/main/java/package/web/rest/KafkaResource.java.ejs +60 -108
  306. package/generators/server/templates/src/main/java/package/web/rest/KafkaResource_reactive.java.ejs +74 -0
  307. package/generators/server/templates/src/main/java/package/web/rest/LogoutResource_reactive.java.ejs +1 -1
  308. package/generators/server/templates/src/main/java/package/web/rest/PublicUserResource.java.ejs +2 -2
  309. package/generators/server/templates/src/main/resources/config/application-dev.yml.ejs +8 -0
  310. package/generators/server/templates/src/main/resources/config/application-prod.yml.ejs +6 -0
  311. package/generators/server/templates/src/main/resources/config/application.yml.ejs +28 -22
  312. package/generators/server/templates/src/test/java/package/CassandraKeyspaceIT.java.ejs +3 -4
  313. package/generators/server/templates/src/test/java/package/IntegrationTest.java.ejs +12 -4
  314. package/generators/server/templates/src/test/java/package/TechnicalStructureTest.java.ejs +18 -15
  315. package/generators/server/templates/src/test/java/package/config/CassandraTestContainer.java.ejs +122 -0
  316. package/generators/server/templates/src/test/java/package/config/EmbeddedCassandra.java.ejs +11 -0
  317. package/generators/server/templates/src/test/java/package/config/EmbeddedKafka.java.ejs +11 -0
  318. package/generators/server/templates/src/test/java/package/config/EmbeddedMongo.java.ejs +11 -0
  319. package/generators/server/templates/src/test/java/package/config/JHipsterBlockHoundIntegration.java.ejs +2 -0
  320. package/generators/server/templates/src/test/java/package/config/KafkaTestContainer.java.ejs +38 -0
  321. package/generators/server/templates/src/test/java/package/config/MongoDbTestContainer.java.ejs +67 -0
  322. package/generators/server/templates/src/test/java/package/config/TestContainersSpringContextCustomizerFactory.java.ejs +114 -0
  323. package/generators/server/templates/src/test/java/package/cucumber/CucumberIT.java.ejs +3 -10
  324. package/generators/server/templates/src/test/java/package/cucumber/stepdefs/StepDefs.java.ejs +8 -0
  325. package/generators/server/templates/src/test/java/package/cucumber/stepdefs/UserStepDefs.java.ejs +17 -3
  326. package/generators/server/templates/src/test/java/package/security/DomainUserDetailsServiceIT.java.ejs +1 -4
  327. package/generators/server/templates/src/test/java/package/security/SecurityUtilsUnitTest_reactive.java.ejs +1 -1
  328. package/generators/server/templates/src/test/java/package/security/jwt/JWTFilterTest.java.ejs +5 -5
  329. package/generators/server/templates/src/test/java/package/security/oauth2/CustomClaimConverterIT.java.ejs +1 -1
  330. package/generators/server/templates/src/test/java/package/service/MailServiceIT.java.ejs +2 -4
  331. package/generators/server/templates/src/test/java/package/service/UserServiceIT.java.ejs +1 -4
  332. package/generators/server/templates/src/test/java/package/service/mapper/UserMapperTest.java.ejs +1 -1
  333. package/generators/server/templates/src/test/java/package/web/rest/AccountResourceIT.java.ejs +15 -8
  334. package/generators/server/templates/src/test/java/package/web/rest/AccountResourceIT_oauth2.java.ejs +1 -4
  335. package/generators/server/templates/src/test/java/package/web/rest/AccountResourceIT_skipUserManagement.java.ejs +1 -4
  336. package/generators/server/templates/src/test/java/package/web/rest/KafkaResourceIT.java.ejs +52 -123
  337. package/generators/server/templates/src/test/java/package/web/rest/KafkaResourceIT_reactive.java.ejs +99 -0
  338. package/generators/server/templates/src/test/java/package/web/rest/PublicUserResourceIT.java.ejs +7 -10
  339. package/generators/server/templates/src/test/java/package/web/rest/TestUtil.java.ejs +1 -6
  340. package/generators/server/templates/src/test/java/package/web/rest/UserJWTControllerIT.java.ejs +1 -4
  341. package/generators/server/templates/src/test/java/package/web/rest/UserResourceIT.java.ejs +42 -47
  342. package/generators/server/templates/src/test/java/package/web/rest/errors/ExceptionTranslatorIT.java.ejs +1 -4
  343. package/generators/server/templates/src/test/java/package/web/rest/errors/ExceptionTranslatorIT_reactive.java.ejs +2 -5
  344. package/generators/server/templates/src/test/resources/META-INF/spring.factories.ejs +1 -1
  345. package/generators/server/templates/src/test/resources/config/application.yml.ejs +21 -20
  346. package/generators/server/templates/src/test/resources/testcontainers.properties.ejs +1 -0
  347. package/generators/spring-boot/esm.mjs +19 -0
  348. package/generators/spring-controller/esm.mjs +1 -3
  349. package/generators/spring-service/esm.mjs +1 -3
  350. package/generators/upgrade/esm.mjs +1 -3
  351. package/generators/upgrade-config/esm.mjs +1 -3
  352. package/generators/workspaces/esm.mjs +1 -3
  353. package/generators/workspaces/index.js +2 -1
  354. package/lib/constants/logo.cjs +30 -0
  355. package/lib/constants/priorities.cjs +216 -2
  356. package/lib/constants/priorities.mjs +29 -1
  357. package/lib/index.mjs +6 -0
  358. package/lib/support/mixin.cjs +5 -1
  359. package/lib/support/shared-data.cjs +34 -1
  360. package/package.json +33 -29
  361. package/utils/entity.js +21 -2
  362. package/utils/faker.js +3 -3
  363. package/utils/field.js +69 -52
  364. package/utils/relationship.js +15 -4
  365. package/utils/user.js +109 -0
  366. package/generators/app/generator.spec.mjs +0 -47
  367. package/generators/aws/generator.spec.mjs +0 -47
  368. package/generators/azure-app-service/generator.spec.mjs +0 -47
  369. package/generators/azure-spring-cloud/generator.spec.mjs +0 -47
  370. package/generators/base/generator.spec.mjs +0 -44
  371. package/generators/bootstrap/generator.spec.mjs +0 -44
  372. package/generators/ci-cd/generator.spec.mjs +0 -47
  373. package/generators/client/__workflow/devserver-angular.json +0 -13
  374. package/generators/client/__workflow/devserver-react.json +0 -13
  375. package/generators/client/__workflow/devserver-vue.json +0 -13
  376. package/generators/client/generator.spec.mjs +0 -47
  377. package/generators/cloudfoundry/generator.spec.mjs +0 -47
  378. package/generators/common/generator.spec.mjs +0 -47
  379. package/generators/cypress/generator.spec.mjs +0 -47
  380. package/generators/database-changelog/generator.spec.mjs +0 -47
  381. package/generators/database-changelog-liquibase/generator.spec.mjs +0 -47
  382. package/generators/docker-compose/generator.spec.mjs +0 -44
  383. package/generators/entities/generator.spec.mjs +0 -47
  384. package/generators/entities-client/generator.spec.mjs +0 -47
  385. package/generators/entity/generator.spec.mjs +0 -47
  386. package/generators/entity-client/generator.spec.mjs +0 -47
  387. package/generators/entity-i18n/generator.spec.mjs +0 -47
  388. package/generators/entity-server/generator.spec.mjs +0 -47
  389. package/generators/entity-server/templates/src/main/java/package/repository/search/SortToFieldSortBuilderConverter.java.ejs +0 -24
  390. package/generators/export-jdl/generator.spec.mjs +0 -44
  391. package/generators/gae/generator.spec.mjs +0 -47
  392. package/generators/gradle/__snapshots__/generator.spec.cjs.snap +0 -59
  393. package/generators/gradle/generator.spec.cjs +0 -71
  394. package/generators/heroku/generator.spec.mjs +0 -47
  395. package/generators/info/generator.spec.mjs +0 -44
  396. package/generators/init/__snapshots__/generator.spec.cjs.snap +0 -65
  397. package/generators/init/generator.spec.cjs +0 -112
  398. package/generators/java/__snapshots__/generator.spec.cjs.snap +0 -118
  399. package/generators/java/generator.spec.cjs +0 -87
  400. package/generators/kubernetes/generator.spec.mjs +0 -44
  401. package/generators/kubernetes-helm/generator.spec.mjs +0 -44
  402. package/generators/kubernetes-knative/generator.spec.mjs +0 -44
  403. package/generators/languages/generator.spec.mjs +0 -47
  404. package/generators/maven/__snapshots__/generator.spec.cjs.snap +0 -53
  405. package/generators/maven/generator.spec.cjs +0 -78
  406. package/generators/maven/templates/.mvn/wrapper/MavenWrapperDownloader.java +0 -117
  407. package/generators/openapi-client/generator.spec.mjs +0 -47
  408. package/generators/openshift/generator.spec.mjs +0 -44
  409. package/generators/page/generator.spec.mjs +0 -47
  410. package/generators/project-name/generator.spec.cjs +0 -43
  411. package/generators/server/__snapshots__/generator.spec.mjs.snap +0 -1931
  412. package/generators/server/generator.spec.mjs +0 -52
  413. package/generators/server/templates/.mvn/wrapper/MavenWrapperDownloader.java +0 -117
  414. package/generators/server/templates/couchbase/src/main/java/package/config/couchbase/CustomCouchbaseRepositoryFactory.java.ejs +0 -83
  415. package/generators/server/templates/couchbase/src/main/java/package/config/couchbase/CustomCouchbaseRepositoryFactoryBean.java.ejs +0 -40
  416. package/generators/server/templates/couchbase/src/main/java/package/config/couchbase/CustomCouchbaseRepositoryQuery.java.ejs +0 -44
  417. package/generators/server/templates/couchbase/src/main/java/package/config/couchbase/CustomN1qlQueryCreator.java.ejs +0 -162
  418. package/generators/server/templates/couchbase/src/main/java/package/config/couchbase/CustomN1qlRepositoryQueryExecutor.java.ejs +0 -104
  419. package/generators/server/templates/couchbase/src/main/resources/config/couchmove/changelog/V0.1__initial_setup/ROLE_ADMIN.json.ejs +0 -3
  420. package/generators/server/templates/couchbase/src/main/resources/config/couchmove/changelog/V0.1__initial_setup/ROLE_USER.json.ejs +0 -3
  421. package/generators/server/templates/couchbase/src/main/resources/config/couchmove/changelog/V0__create_indexes.n1ql.ejs +0 -19
  422. package/generators/server/templates/src/main/java/package/config/KafkaProperties.java.ejs +0 -68
  423. package/generators/server/templates/src/test/java/package/AbstractCassandraTest.java.ejs +0 -125
  424. package/generators/server/templates/src/test/java/package/MongoDbTestContainerExtension.java.ejs +0 -37
  425. package/generators/server/templates/src/test/java/package/TestContainersSpringContextCustomizerFactory.java.ejs +0 -24
  426. package/generators/spring-boot/__snapshots__/generator.spec.cjs.snap +0 -80
  427. package/generators/spring-boot/generator.spec.cjs +0 -64
  428. package/generators/spring-controller/generator.spec.mjs +0 -47
  429. package/generators/spring-service/generator.spec.mjs +0 -47
  430. package/generators/upgrade/generator.spec.mjs +0 -44
  431. package/generators/upgrade-config/generator.spec.mjs +0 -44
  432. package/generators/workspaces/generator.spec.mjs +0 -47
@@ -0,0 +1,122 @@
1
+ package <%= packageName %>.config;
2
+
3
+ import static java.nio.file.Files.newDirectoryStream;
4
+ import static java.nio.file.Paths.get;
5
+ import static java.util.Spliterator.SORTED;
6
+ import static java.util.Spliterators.spliteratorUnknownSize;
7
+ import static java.util.stream.StreamSupport.stream;
8
+
9
+ import com.datastax.driver.core.Cluster;
10
+ import com.datastax.driver.core.Session;
11
+ import com.datastax.oss.driver.api.core.CqlSession;
12
+ import java.io.IOException;
13
+ import java.net.InetSocketAddress;
14
+ import java.net.URISyntaxException;
15
+ import java.net.URL;
16
+ import java.nio.file.Path;
17
+ import java.time.Duration;
18
+ import java.time.temporal.ChronoUnit;
19
+ import java.util.Iterator;
20
+ import java.util.Spliterator;
21
+
22
+ import com.datastax.oss.driver.api.core.CqlSessionBuilder;
23
+ import com.datastax.oss.driver.api.core.config.DefaultDriverOption;
24
+ import com.datastax.oss.driver.api.core.config.DriverConfigLoader;
25
+ import org.cassandraunit.CQLDataLoader;
26
+ import org.cassandraunit.dataset.cql.ClassPathCQLDataSet;
27
+ import org.springframework.beans.factory.DisposableBean;
28
+ import org.springframework.beans.factory.InitializingBean;
29
+ import org.springframework.test.context.junit.jupiter.SpringExtension;
30
+ import org.slf4j.Logger;
31
+ import org.slf4j.LoggerFactory;
32
+ import org.testcontainers.containers.CassandraContainer;
33
+ import org.testcontainers.containers.output.Slf4jLogConsumer;
34
+
35
+ /**
36
+ * Base class for starting/stopping Cassandra during tests.
37
+ */
38
+ public class CassandraTestContainer implements InitializingBean, DisposableBean {
39
+
40
+ private static final Logger log = LoggerFactory.getLogger(CassandraTestContainer.class);
41
+ private static final Integer DATABASE_REQUEST_TIMEOUT = 20;
42
+ private static final Integer CONTAINER_STARTUP_TIMEOUT_MINUTES = 10;
43
+ private CassandraContainer cassandraContainer;
44
+
45
+ @Override
46
+ public void destroy() {
47
+ if (null != cassandraContainer && cassandraContainer.isRunning()) {
48
+ cassandraContainer.stop();
49
+ }
50
+ }
51
+
52
+ @Override
53
+ public void afterPropertiesSet() {
54
+ if (null == cassandraContainer) {
55
+ cassandraContainer = (CassandraContainer) new CassandraContainer("<%= DOCKER_CASSANDRA %>")
56
+ .withStartupTimeout(Duration.of(CONTAINER_STARTUP_TIMEOUT_MINUTES, ChronoUnit.MINUTES))
57
+ .withLogConsumer(new Slf4jLogConsumer(log))
58
+ .withReuse(true);
59
+ }
60
+ if (!cassandraContainer.isRunning()) {
61
+ cassandraContainer.start();
62
+ Cluster cluster = cassandraContainer.getCluster();
63
+
64
+ try(Session session = cluster.connect()) {
65
+ createTestKeyspace(session);
66
+ }
67
+ CqlSession cqlSession = new CqlSessionBuilder()
68
+ .addContactPoint(
69
+ new InetSocketAddress(
70
+ cassandraContainer.getHost(),
71
+ cassandraContainer.getMappedPort(CassandraContainer.CQL_PORT))
72
+ ).withLocalDatacenter(cluster.getMetadata().getAllHosts().iterator().next().getDatacenter())
73
+ .withKeyspace(CQLDataLoader.DEFAULT_KEYSPACE_NAME)
74
+ .withConfigLoader(getConfigLoader())
75
+ .build();
76
+ CQLDataLoader dataLoader = new CQLDataLoader(cqlSession);
77
+ applyScripts(dataLoader, "config/cql/changelog/", "*.cql");
78
+ cqlSession.close();
79
+ }
80
+ }
81
+
82
+ public CassandraContainer getCassandraContainer() {
83
+ return cassandraContainer;
84
+ }
85
+
86
+ private DriverConfigLoader getConfigLoader() {
87
+ return DriverConfigLoader.programmaticBuilder()
88
+ .withDuration(DefaultDriverOption.REQUEST_TIMEOUT, Duration.ofSeconds(DATABASE_REQUEST_TIMEOUT))
89
+ .build();
90
+ }
91
+
92
+ private void createTestKeyspace(Session session) {
93
+ String createQuery =
94
+ "CREATE KEYSPACE " + CQLDataLoader.DEFAULT_KEYSPACE_NAME + " WITH replication={'class' : 'SimpleStrategy', 'replication_factor':1}";
95
+ session.execute(createQuery);
96
+ }
97
+
98
+ private void applyScripts(CQLDataLoader dataLoader, String cqlDir, String pattern) {
99
+ URL dirUrl = ClassLoader.getSystemResource(cqlDir);
100
+ if (dirUrl == null) { // protect for empty directory
101
+ return;
102
+ }
103
+
104
+ Iterator<Path> pathIterator = null;
105
+ try {
106
+ pathIterator = newDirectoryStream(get(dirUrl.toURI()), pattern).iterator();
107
+ } catch (IOException e) {
108
+ log.error("error trying to reading CQL chagelog", e);
109
+ } catch (URISyntaxException e) {
110
+ log.error("error trying to get CQL chagelog uri", e);
111
+ }
112
+
113
+ Spliterator<Path> pathSpliterator = spliteratorUnknownSize(pathIterator, SORTED);
114
+ stream(pathSpliterator, false)
115
+ .map(Path::getFileName)
116
+ .map(Path::toString)
117
+ .sorted()
118
+ .map(file -> cqlDir + file)
119
+ .map(dataSetLocation -> new ClassPathCQLDataSet(dataSetLocation, false, false, dataLoader.getSession().getKeyspace().get().toString()))
120
+ .forEach(dataLoader::load);
121
+ }
122
+ }
@@ -0,0 +1,11 @@
1
+ package <%= packageName %>.config;
2
+
3
+ import java.lang.annotation.ElementType;
4
+ import java.lang.annotation.Retention;
5
+ import java.lang.annotation.RetentionPolicy;
6
+ import java.lang.annotation.Target;
7
+
8
+ @Target(ElementType.TYPE)
9
+ @Retention(RetentionPolicy.RUNTIME)
10
+ public @interface EmbeddedCassandra {
11
+ }
@@ -0,0 +1,11 @@
1
+ package <%= packageName %>.config;
2
+
3
+ import java.lang.annotation.ElementType;
4
+ import java.lang.annotation.Retention;
5
+ import java.lang.annotation.RetentionPolicy;
6
+ import java.lang.annotation.Target;
7
+
8
+ @Target(ElementType.TYPE)
9
+ @Retention(RetentionPolicy.RUNTIME)
10
+ public @interface EmbeddedKafka {
11
+ }
@@ -0,0 +1,11 @@
1
+ package <%= packageName %>.config;
2
+
3
+ import java.lang.annotation.ElementType;
4
+ import java.lang.annotation.Retention;
5
+ import java.lang.annotation.RetentionPolicy;
6
+ import java.lang.annotation.Target;
7
+
8
+ @Target(ElementType.TYPE)
9
+ @Retention(RetentionPolicy.RUNTIME)
10
+ public @interface EmbeddedMongo {
11
+ }
@@ -30,6 +30,8 @@ public class JHipsterBlockHoundIntegration implements BlockHoundIntegration {
30
30
  builder.allowBlockingCallsInside("org.springframework.validation.beanvalidation.SpringValidatorAdapter", "validate");
31
31
  <%_ if (databaseTypeCouchbase) { _%>
32
32
  builder.allowBlockingCallsInside("org.springframework.data.couchbase.core.convert.MappingCouchbaseConverter", "read");
33
+ builder.allowBlockingCallsInside("com.github.couchmove.repository.CouchbaseRepositoryImpl", "lambda$query$2");
34
+ builder.allowBlockingCallsInside("com.github.couchmove.repository.CouchbaseRepositoryImpl", "lambda$importFtsIndex$1");
33
35
  <%_} _%>
34
36
  }
35
37
 
@@ -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,10 +18,18 @@
18
18
  -%>
19
19
  package <%= packageName %>.cucumber.stepdefs;
20
20
 
21
+ <%_ if (reactive) { _%>
22
+ import org.springframework.test.web.reactive.server.WebTestClient;
23
+ <%_ } else { _%>
21
24
  import org.springframework.test.web.servlet.ResultActions;
25
+ <%_ } _%>
22
26
 
23
27
  public abstract class StepDefs {
24
28
 
29
+ <%_ if (reactive) { _%>
30
+ protected WebTestClient.ResponseSpec actions;
31
+ <%_ } else { _%>
25
32
  protected ResultActions actions;
33
+ <%_ } _%>
26
34
 
27
35
  }
@@ -40,6 +40,7 @@ import <%= packageName %>.security.AuthoritiesConstants;
40
40
 
41
41
  <%_ if (reactive) { _%>
42
42
  import org.springframework.test.web.reactive.server.WebTestClient;
43
+ import static org.hamcrest.Matchers.is;
43
44
  <%_ } else { _%>
44
45
  import org.springframework.test.web.servlet.setup.MockMvcBuilders;
45
46
  import org.springframework.test.web.servlet.MockMvc;
@@ -72,29 +73,42 @@ public class UserStepDefs extends StepDefs {
72
73
  SecurityContext context = SecurityContextHolder.createEmptyContext();
73
74
  context.setAuthentication(authentication);
74
75
  SecurityContextHolder.setContext(context);
76
+ <%_ if (reactive) { _%>
77
+ this.userResourceMock = WebTestClient.bindToController(userResource).build();
78
+ <%_ } else { _%>
75
79
  this.userResourceMock = MockMvcBuilders.standaloneSetup(userResource).build();
80
+ <%_ } _%>
76
81
  }
77
82
 
78
83
  @When("I search user {string}")
79
84
  public void i_search_user(String userId) throws Throwable {
80
85
  <%_ if (reactive) { _%>
81
- actions = userResourceMock.get().uri("/api/admin/users/" + userId)
86
+ actions = userResourceMock.get().uri("/api/admin/users/" + userId).accept(MediaType.APPLICATION_JSON).exchange();
82
87
  <%_ } else { _%>
83
- actions = userResourceMock.perform(get("/api/admin/users/" + userId)
88
+ actions = userResourceMock.perform(get("/api/admin/users/" + userId).accept(MediaType.APPLICATION_JSON));
84
89
  <%_ } _%>
85
- .accept(MediaType.APPLICATION_JSON)<% if (!reactive) { %>)<%_ } _%>;
86
90
  }
87
91
 
88
92
  @Then("the user is found")
89
93
  public void the_user_is_found() throws Throwable {
94
+ <%_ if (reactive) { _%>
95
+ actions
96
+ .expectStatus().isOk()
97
+ .expectHeader().contentTypeCompatibleWith(MediaType.APPLICATION_JSON_VALUE);
98
+ <%_ } else { _%>
90
99
  actions
91
100
  .andExpect(status().isOk())
92
101
  .andExpect(content().contentType(MediaType.APPLICATION_JSON_VALUE));
102
+ <%_ } _%>
93
103
  }
94
104
 
95
105
  @Then("his last name is {string}")
96
106
  public void his_last_name_is(String lastName) throws Throwable {
107
+ <%_ if (reactive) { _%>
108
+ actions.expectBody().jsonPath("$.lastName").value(is(lastName));
109
+ <%_ } else { _%>
97
110
  actions.andExpect(jsonPath("$.lastName").value(lastName));
111
+ <%_ } _%>
98
112
  }
99
113
 
100
114
  }
@@ -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";
@@ -1,5 +1,5 @@
1
1
  <%#
2
- Copyright 2013-2021 the original author or authors from the JHipster project.
2
+ Copyright 2013-2022 the original author or authors from the JHipster project.
3
3
 
4
4
  This file is part of the JHipster project, see https://www.jhipster.tech/
5
5
  for more information.
@@ -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())
@@ -1,5 +1,5 @@
1
1
  <%#
2
- Copyright 2013-2020 the original author or authors from the JHipster project.
2
+ Copyright 2013-2022 the original author or authors from the JHipster project.
3
3
 
4
4
  This file is part of the JHipster project, see https://jhipster.github.io/
5
5
  for more information.
@@ -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
 
@@ -44,7 +44,7 @@ class UserMapperTest {
44
44
 
45
45
  private static final String DEFAULT_LOGIN = "johndoe";
46
46
  <%_ if (databaseTypeCouchbase) { _%>
47
- private static final String DEFAULT_ID = <%= asEntity('User') %>.PREFIX + DEFAULT_LOGIN;
47
+ private static final String DEFAULT_ID = DEFAULT_LOGIN;
48
48
  <%_ } else { _%>
49
49
  private static final <%= user.primaryKey.type %> DEFAULT_ID = <%- getPrimaryKeyValue(user.primaryKey.type) %>;
50
50
  <%_ } _%>