generator-jhipster 7.9.0 → 7.9.3

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 (227) hide show
  1. package/cli/environment-builder.js +15 -1
  2. package/cli/jhipster.js +0 -0
  3. package/generators/app/index.js +12 -1
  4. package/generators/bootstrap/index.js +33 -1
  5. package/generators/ci-cd/templates/circle.yml.ejs +3 -13
  6. package/generators/client/files-angular.js +1 -1
  7. package/generators/client/files-react.js +5 -2
  8. package/generators/client/files-vue.js +3 -2
  9. package/generators/client/templates/angular/jest.conf.js.ejs +6 -3
  10. package/generators/client/templates/angular/package.json +18 -18
  11. package/generators/client/templates/angular/package.json.ejs +3 -7
  12. package/generators/client/templates/angular/src/main/webapp/app/admin/admin-routing.module.ts.ejs +1 -1
  13. package/generators/client/templates/angular/src/main/webapp/app/admin/health/health.model.ts.ejs +1 -1
  14. package/generators/client/templates/angular/src/main/webapp/app/admin/user-management/update/user-management-update.component.ts.ejs +17 -15
  15. package/generators/client/templates/angular/src/main/webapp/app/admin/user-management/user-management.model.ts.ejs +2 -2
  16. package/generators/client/templates/angular/src/main/webapp/app/admin/user-management/user-management.route.ts.ejs +4 -4
  17. package/generators/client/templates/angular/src/main/webapp/app/core/request/request-util.ts.ejs +4 -2
  18. package/generators/client/templates/angular/src/main/webapp/app/core/util/data-util.service.ts.ejs +1 -1
  19. package/generators/client/templates/angular/src/main/webapp/app/core/util/parse-links.service.ts.ejs +1 -1
  20. package/generators/client/templates/angular/src/main/webapp/app/layouts/navbar/navbar.component.html.ejs +1 -1
  21. package/generators/client/templates/angular/src/main/webapp/app/shared/filter/filter.component.html.ejs +8 -6
  22. package/generators/client/templates/angular/src/main/webapp/app/shared/filter/filter.component.ts.ejs +6 -11
  23. package/generators/client/templates/angular/src/main/webapp/app/shared/filter/filter.model.spec.ts.ejs +227 -25
  24. package/generators/client/templates/angular/src/main/webapp/app/shared/filter/filter.model.ts.ejs +104 -43
  25. package/generators/client/templates/angular/src/main/webapp/content/scss/global.scss.ejs +8 -0
  26. package/generators/client/templates/angular/tsconfig.json.ejs +0 -1
  27. package/generators/client/templates/angular/tsconfig.spec.json.ejs +2 -3
  28. package/generators/client/templates/angular/webpack/webpack.microfrontend.js.ejs +0 -3
  29. package/generators/client/templates/common/package.json +4 -4
  30. package/generators/client/templates/common/src/main/webapp/swagger-ui/index.html.ejs +1 -1
  31. package/generators/client/templates/react/jest.conf.js.ejs +2 -2
  32. package/generators/client/templates/react/package.json +24 -24
  33. package/generators/client/templates/react/package.json.ejs +3 -7
  34. package/generators/client/templates/react/src/main/webapp/app/config/store.ts.ejs +0 -6
  35. package/generators/client/templates/react/src/main/webapp/app/index.tsx.ejs +4 -5
  36. package/generators/client/templates/react/src/main/webapp/app/modules/administration/administration.reducer.spec.ts.ejs +7 -7
  37. package/generators/client/templates/react/src/main/webapp/app/modules/administration/administration.reducer.ts.ejs +6 -6
  38. package/generators/client/templates/react/src/main/webapp/app/modules/administration/index.tsx.ejs +2 -2
  39. package/generators/client/templates/react/src/main/webapp/app/shared/layout/menus/admin.tsx.ejs +1 -1
  40. package/generators/client/templates/react/src/main/webapp/app/shared/reducers/authentication.spec.ts.ejs +17 -8
  41. package/generators/client/templates/react/src/main/webapp/app/shared/reducers/authentication.ts.ejs +1 -1
  42. package/generators/client/templates/react/src/main/webapp/app/shared/reducers/locale.spec.ts.ejs +176 -19
  43. package/generators/client/templates/react/src/main/webapp/app/shared/reducers/locale.ts.ejs +46 -13
  44. package/generators/client/templates/react/webpack/webpack.microfrontend.js.jhi.react.ejs +1 -1
  45. package/generators/client/templates/vue/package.json +17 -17
  46. package/generators/client/templates/vue/package.json.ejs +3 -7
  47. package/generators/client/templates/vue/src/main/webapp/app/core/jhi-navbar/jhi-navbar.component.ts.ejs +2 -1
  48. package/generators/client/templates/vue/src/main/webapp/app/core/jhi-navbar/jhi-navbar.vue.ejs +1 -1
  49. package/generators/client/templates/vue/src/main/webapp/app/main.ts.ejs +2 -2
  50. package/generators/client/templates/vue/src/main/webapp/app/router/admin.ts.ejs +2 -2
  51. package/generators/client/templates/vue/src/test/javascript/e2e/modules/administration/administration.spec.ts.ejs +1 -1
  52. package/generators/client/templates/vue/src/test/javascript/e2e/page-objects/administration-page.ts.ejs +1 -1
  53. package/generators/client/templates/vue/src/test/javascript/e2e/page-objects/navbar-page.ts.ejs +2 -2
  54. package/generators/client/templates/vue/src/test/javascript/jest.conf.js.ejs +5 -6
  55. package/generators/client/templates/vue/src/test/javascript/spec/app/account/account.service.spec.ts.ejs +4 -0
  56. package/generators/client/templates/vue/src/test/javascript/spec/app/shared/alert/alert.service.spec.ts.ejs +106 -3
  57. package/generators/client/templates/vue/src/test/javascript/spec/app/shared/config/axios-interceptor.spec.ts.ejs +12 -0
  58. package/generators/client/templates/vue/src/test/javascript/spec/app/shared/config/formatter.spec.ts.ejs +6 -0
  59. package/generators/client/templates/vue/src/test/javascript/spec/app/shared/sort/sorts.spec.ts.ejs +10 -0
  60. package/generators/client/templates/vue/webpack/webpack.common.js.ejs +1 -1
  61. package/generators/client/templates/vue/webpack/webpack.dev.js.ejs +2 -2
  62. package/generators/common/files.js +5 -4
  63. package/generators/common/templates/.husky/pre-commit.ejs +0 -0
  64. package/generators/common/templates/package.json +1 -1
  65. package/generators/common/templates/sonar-project.properties.ejs +19 -11
  66. package/generators/cypress/index.js +1 -1
  67. package/generators/docker-compose/templates/README-DOCKER-COMPOSE.md.ejs +3 -3
  68. package/generators/docker-compose/templates/docker-compose.yml.ejs +1 -1
  69. package/generators/docker-compose/templates/realm-config/jhipster-realm.json.ejs +32 -14
  70. package/generators/entity/index.js +4 -3
  71. package/generators/entity-client/templates/angular/src/main/webapp/app/entities/detail/entity-management-detail.component.html.ejs +1 -1
  72. package/generators/entity-client/templates/angular/src/main/webapp/app/entities/list/entity-management.component.html.ejs +18 -6
  73. package/generators/entity-client/templates/angular/src/main/webapp/app/entities/list/entity-management.component.spec.ts.ejs +1 -1
  74. package/generators/entity-client/templates/angular/src/main/webapp/app/entities/list/entity-management.component.ts.ejs +23 -19
  75. package/generators/entity-client/templates/angular/src/main/webapp/app/entities/service/entity.service.spec.ts.ejs +3 -1
  76. package/generators/entity-client/templates/angular/src/main/webapp/app/entities/service/entity.service.ts.ejs +1 -1
  77. package/generators/entity-client/templates/angular/src/main/webapp/app/entities/update/entity-form.service.ts.ejs +1 -1
  78. package/generators/entity-client/templates/vue/src/main/webapp/app/entities/entity.component.ts.ejs +2 -2
  79. package/generators/entity-server/templates/src/main/java/package/common/delete_template.ejs +7 -3
  80. package/generators/entity-server/templates/src/main/java/package/common/get_all_template.ejs +2 -2
  81. package/generators/entity-server/templates/src/main/java/package/domain/Entity.java.jhi.ejs +15 -5
  82. package/generators/entity-server/templates/src/main/java/package/domain/Entity.java.jhi.spring_data_persistable.ejs +8 -1
  83. package/generators/entity-server/templates/src/main/java/package/repository/EntityRepositoryInternalImpl_reactive.java.ejs +5 -0
  84. package/generators/entity-server/templates/src/main/java/package/service/EntityQueryService.java.ejs +4 -4
  85. package/generators/entity-server/templates/src/main/java/package/service/EntityService.java.ejs +6 -4
  86. package/generators/entity-server/templates/src/main/java/package/service/criteria/EntityCriteria.java.ejs +3 -26
  87. package/generators/entity-server/templates/src/main/java/package/service/dto/EntityDTO.java.ejs +1 -0
  88. package/generators/entity-server/templates/src/main/java/package/service/impl/EntityServiceImpl.java.ejs +1 -1
  89. package/generators/entity-server/templates/src/test/java/package/web/rest/EntityResourceIT.java.ejs +33 -28
  90. package/generators/generate-blueprint/constants.mjs +46 -6
  91. package/generators/generate-blueprint/esm.mjs +0 -0
  92. package/generators/generate-blueprint/files.mjs +7 -5
  93. package/generators/generate-blueprint/generator.mjs +73 -19
  94. package/generators/generate-blueprint/templates/cli/cli.mjs.ejs +0 -0
  95. package/generators/generate-blueprint/templates/generators/generator/generator.spec.mjs.ejs +1 -1
  96. package/generators/generate-blueprint/templates/generators/generator/templates/template-file.ejs +0 -0
  97. package/generators/generator-base-blueprint.js +23 -1
  98. package/generators/generator-base-entities.cjs +5 -1
  99. package/generators/generator-base.js +82 -15
  100. package/generators/generator-constants.js +17 -23
  101. package/generators/init/templates/.husky/pre-commit +0 -0
  102. package/generators/kubernetes/templates/deployment.yml.ejs +1 -1
  103. package/generators/kubernetes/templates/ingress.yml.ejs +1 -1
  104. package/generators/kubernetes/templates/istio/gateway.yml.ejs +1 -1
  105. package/generators/kubernetes/templates/kubectl-apply.sh.ejs +0 -0
  106. package/generators/kubernetes/templates/kustomize/kustomization.yml.ejs +1 -1
  107. package/generators/kubernetes/templates/service.yml.ejs +1 -1
  108. package/generators/kubernetes-knative/templates/istio/gateway.yml.ejs +1 -1
  109. package/generators/kubernetes-knative/templates/kubectl-apply.sh.ejs +0 -0
  110. package/generators/kubernetes-knative/templates/service.yml.ejs +3 -3
  111. package/generators/languages/templates/src/main/webapp/i18n/al/health.json.ejs +1 -1
  112. package/generators/languages/templates/src/main/webapp/i18n/ar-ly/health.json.ejs +1 -1
  113. package/generators/languages/templates/src/main/webapp/i18n/bg/health.json.ejs +1 -1
  114. package/generators/languages/templates/src/main/webapp/i18n/bn/health.json.ejs +1 -1
  115. package/generators/languages/templates/src/main/webapp/i18n/by/health.json.ejs +1 -1
  116. package/generators/languages/templates/src/main/webapp/i18n/ca/health.json.ejs +1 -1
  117. package/generators/languages/templates/src/main/webapp/i18n/cs/health.json.ejs +1 -1
  118. package/generators/languages/templates/src/main/webapp/i18n/da/health.json.ejs +1 -1
  119. package/generators/languages/templates/src/main/webapp/i18n/de/health.json.ejs +1 -1
  120. package/generators/languages/templates/src/main/webapp/i18n/el/activate.json.ejs +1 -1
  121. package/generators/languages/templates/src/main/webapp/i18n/el/health.json.ejs +1 -1
  122. package/generators/languages/templates/src/main/webapp/i18n/el/password.json +1 -1
  123. package/generators/languages/templates/src/main/webapp/i18n/el/register.json +3 -3
  124. package/generators/languages/templates/src/main/webapp/i18n/el/tracker.json +1 -1
  125. package/generators/languages/templates/src/main/webapp/i18n/el/user-management.json +9 -9
  126. package/generators/languages/templates/src/main/webapp/i18n/en/health.json.ejs +1 -1
  127. package/generators/languages/templates/src/main/webapp/i18n/es/health.json.ejs +1 -1
  128. package/generators/languages/templates/src/main/webapp/i18n/et/health.json.ejs +1 -1
  129. package/generators/languages/templates/src/main/webapp/i18n/fa/health.json.ejs +1 -1
  130. package/generators/languages/templates/src/main/webapp/i18n/fi/health.json.ejs +1 -1
  131. package/generators/languages/templates/src/main/webapp/i18n/fr/health.json.ejs +1 -1
  132. package/generators/languages/templates/src/main/webapp/i18n/gl/health.json.ejs +1 -1
  133. package/generators/languages/templates/src/main/webapp/i18n/hi/health.json.ejs +1 -1
  134. package/generators/languages/templates/src/main/webapp/i18n/hr/health.json.ejs +1 -1
  135. package/generators/languages/templates/src/main/webapp/i18n/hu/health.json.ejs +1 -1
  136. package/generators/languages/templates/src/main/webapp/i18n/hy/health.json.ejs +1 -1
  137. package/generators/languages/templates/src/main/webapp/i18n/in/health.json.ejs +1 -1
  138. package/generators/languages/templates/src/main/webapp/i18n/it/health.json.ejs +1 -1
  139. package/generators/languages/templates/src/main/webapp/i18n/ja/health.json.ejs +1 -1
  140. package/generators/languages/templates/src/main/webapp/i18n/ko/health.json.ejs +1 -1
  141. package/generators/languages/templates/src/main/webapp/i18n/mr/health.json.ejs +1 -1
  142. package/generators/languages/templates/src/main/webapp/i18n/my/health.json.ejs +1 -1
  143. package/generators/languages/templates/src/main/webapp/i18n/nl/health.json.ejs +1 -1
  144. package/generators/languages/templates/src/main/webapp/i18n/pa/health.json.ejs +1 -1
  145. package/generators/languages/templates/src/main/webapp/i18n/pl/health.json.ejs +1 -1
  146. package/generators/languages/templates/src/main/webapp/i18n/pt-br/health.json.ejs +1 -1
  147. package/generators/languages/templates/src/main/webapp/i18n/pt-pt/health.json.ejs +1 -1
  148. package/generators/languages/templates/src/main/webapp/i18n/ro/health.json.ejs +1 -1
  149. package/generators/languages/templates/src/main/webapp/i18n/ru/health.json.ejs +1 -1
  150. package/generators/languages/templates/src/main/webapp/i18n/si/health.json.ejs +1 -1
  151. package/generators/languages/templates/src/main/webapp/i18n/sk/health.json.ejs +1 -1
  152. package/generators/languages/templates/src/main/webapp/i18n/sr/health.json.ejs +1 -1
  153. package/generators/languages/templates/src/main/webapp/i18n/sv/health.json.ejs +1 -1
  154. package/generators/languages/templates/src/main/webapp/i18n/ta/health.json.ejs +1 -1
  155. package/generators/languages/templates/src/main/webapp/i18n/te/health.json.ejs +1 -1
  156. package/generators/languages/templates/src/main/webapp/i18n/th/health.json.ejs +1 -1
  157. package/generators/languages/templates/src/main/webapp/i18n/tr/health.json.ejs +1 -1
  158. package/generators/languages/templates/src/main/webapp/i18n/ua/health.json.ejs +1 -1
  159. package/generators/languages/templates/src/main/webapp/i18n/uz-Latn-uz/health.json.ejs +1 -1
  160. package/generators/languages/templates/src/main/webapp/i18n/vi/health.json.ejs +1 -1
  161. package/generators/languages/templates/src/main/webapp/i18n/zh-cn/health.json.ejs +1 -1
  162. package/generators/languages/templates/src/main/webapp/i18n/zh-tw/health.json.ejs +1 -1
  163. package/generators/maven/templates/mvnw +0 -0
  164. package/generators/openshift/templates/deployment.yml.ejs +2 -2
  165. package/generators/server/cleanup-elasticsearch.js +5 -0
  166. package/generators/server/files.js +17 -8
  167. package/generators/server/index.js +0 -2
  168. package/generators/server/templates/build.gradle.ejs +6 -14
  169. package/generators/server/templates/gradle/profile_dev.gradle.ejs +1 -1
  170. package/generators/server/templates/gradle/profile_prod.gradle.ejs +1 -1
  171. package/generators/server/templates/gradle.properties.ejs +6 -4
  172. package/generators/server/templates/gradlew +0 -0
  173. package/generators/server/templates/mvnw +0 -0
  174. package/generators/server/templates/npmw +0 -0
  175. package/generators/server/templates/npmw.cmd +31 -29
  176. package/generators/server/templates/package.json.ejs +2 -2
  177. package/generators/server/templates/pom.xml.ejs +12 -23
  178. package/generators/server/templates/sql/common/src/test/java/package/config/MsSqlTestContainer.java.ejs +2 -3
  179. package/generators/server/templates/src/main/docker/app.yml.ejs +7 -1
  180. package/generators/server/templates/src/main/docker/config/realm-config/jhipster-realm.json.ejs +32 -14
  181. package/generators/server/templates/src/main/docker/jhipster-control-center.yml.ejs +1 -1
  182. package/generators/server/templates/src/main/docker/prometheus/prometheus.yml.ejs +1 -1
  183. package/generators/server/templates/src/main/java/package/Application.java.ejs +11 -4
  184. package/generators/server/templates/src/main/java/package/config/CRLFLogConverter.java.ejs +57 -0
  185. package/generators/server/templates/src/main/java/package/config/EurekaWorkaroundConfiguration.java.ejs +49 -0
  186. package/generators/server/templates/src/main/java/package/config/LoggingConfiguration.java.ejs +4 -4
  187. package/generators/server/templates/src/main/java/package/config/SecurityConfiguration.java.ejs +17 -18
  188. package/generators/server/templates/src/main/java/package/config/SecurityConfiguration_reactive.java.ejs +13 -5
  189. package/generators/server/templates/src/main/java/package/domain/AbstractAuditingEntity.java.ejs +5 -6
  190. package/generators/server/templates/src/main/java/package/domain/User.java.ejs +1 -1
  191. package/generators/server/templates/src/main/java/package/repository/UserRepository.java.ejs +1 -1
  192. package/generators/server/templates/src/main/java/package/security/oauth2/CustomClaimConverter.java.ejs +13 -6
  193. package/generators/server/templates/src/main/java/package/service/dto/AdminUserDTO.java.ejs +3 -1
  194. package/generators/server/templates/src/main/java/package/service/dto/PasswordChangeDTO.java.ejs +5 -1
  195. package/generators/server/templates/src/main/java/package/service/dto/UserDTO.java.ejs +3 -1
  196. package/generators/server/templates/src/main/java/package/web/rest/UserResource.java.ejs +15 -42
  197. package/generators/server/templates/src/main/java/package/web/rest/errors/BadRequestAlertException.java.ejs +1 -0
  198. package/generators/server/templates/src/main/java/package/web/rest/errors/EmailAlreadyUsedException.java.ejs +1 -0
  199. package/generators/server/templates/src/main/java/package/web/rest/errors/InvalidPasswordException.java.ejs +1 -0
  200. package/generators/server/templates/src/main/java/package/web/rest/errors/LoginAlreadyUsedException.java.ejs +1 -0
  201. package/generators/server/templates/src/main/resources/config/application-dev.yml.ejs +1 -1
  202. package/generators/server/templates/src/main/resources/config/application-prod.yml.ejs +3 -3
  203. package/generators/server/templates/src/main/resources/config/application.yml.ejs +4 -2
  204. package/generators/server/templates/src/main/resources/config/liquibase/master.xml.ejs +3 -8
  205. package/generators/server/templates/src/main/resources/logback-spring.xml.ejs +5 -0
  206. package/generators/server/templates/src/test/java/package/config/{ElasticsearchReactiveTestConfiguration.java.ejs → ElasticsearchTestConfiguration.java.ejs} +3 -3
  207. package/generators/server/templates/src/test/java/package/config/ElasticsearchTestContainer.java.ejs +1 -0
  208. package/generators/server/templates/src/test/java/package/config/JHipsterBlockHoundIntegration.java.ejs +3 -0
  209. package/generators/server/templates/src/test/java/package/config/TestContainersSpringContextCustomizerFactory.java.ejs +2 -2
  210. package/generators/sql-constants.js +5 -2
  211. package/generators/utils.js +43 -3
  212. package/generators/workspaces/index.js +2 -1
  213. package/jdl/exporters/jdl-exporter.js +6 -1
  214. package/jdl/jhipster/application-options.js +2 -1
  215. package/jdl/jhipster/binary-options.js +2 -2
  216. package/jdl/jhipster/default-application-options.js +11 -8
  217. package/jdl/jhipster/entity-options.js +1 -0
  218. package/jdl/jhipster/search-engine-types.js +1 -0
  219. package/lib/constants/priorities.cjs +16 -0
  220. package/lib/constants/priorities.mjs +1 -0
  221. package/lib/index.js +2 -0
  222. package/lib/support/base.cjs +2 -1
  223. package/package.json +7 -6
  224. package/utils/blueprint.js +10 -0
  225. package/utils/field.js +9 -9
  226. package/generators/client/templates/react/src/main/webapp/app/config/translation-middleware.ts.ejs +0 -58
  227. package/generators/server/templates/.npmrc.ejs +0 -1
@@ -1,9 +1,9 @@
1
1
  {
2
2
  "dependencies": {
3
- "@fortawesome/fontawesome-svg-core": "6.1.2",
4
- "@fortawesome/free-solid-svg-icons": "6.1.2",
3
+ "@fortawesome/fontawesome-svg-core": "6.2.0",
4
+ "@fortawesome/free-solid-svg-icons": "6.2.0",
5
5
  "@fortawesome/react-fontawesome": "0.2.0",
6
- "@reduxjs/toolkit": "1.8.3",
6
+ "@reduxjs/toolkit": "1.8.5",
7
7
  "axios": "0.27.2",
8
8
  "bootstrap": "5.2.0",
9
9
  "bootswatch": "5.2.0",
@@ -12,14 +12,14 @@
12
12
  "react": "18.2.0",
13
13
  "react-dom": "18.2.0",
14
14
  "react-hook-form": "7.30.0",
15
- "react-jhipster": "0.21.0",
15
+ "react-jhipster": "0.22.0",
16
16
  "react-loadable": "5.5.0",
17
17
  "react-redux": "8.0.2",
18
18
  "react-redux-loading-bar": "5.0.4",
19
19
  "react-router-dom": "6.3.0",
20
- "react-toastify": "9.0.7",
21
- "react-transition-group": "4.4.4",
22
- "reactstrap": "9.1.2",
20
+ "react-toastify": "9.0.8",
21
+ "react-transition-group": "4.4.5",
22
+ "reactstrap": "9.1.4",
23
23
  "redux": "4.2.0",
24
24
  "redux-thunk": "2.4.1",
25
25
  "sonar-scanner": "3.1.0",
@@ -28,27 +28,27 @@
28
28
  },
29
29
  "devDependencies": {
30
30
  "@testing-library/react": "13.3.0",
31
- "@types/jest": "28.1.6",
32
- "@types/lodash": "4.14.182",
33
- "@types/node": "16.11.47",
34
- "@types/react": "18.0.15",
31
+ "@types/jest": "28.1.8",
32
+ "@types/lodash": "4.14.184",
33
+ "@types/node": "16.11.56",
34
+ "@types/react": "18.0.18",
35
35
  "@types/react-dom": "18.0.6",
36
36
  "@types/react-redux": "7.1.24",
37
37
  "@types/redux": "3.6.31",
38
- "@types/webpack-env": "1.17.0",
39
- "@typescript-eslint/eslint-plugin": "5.31.0",
40
- "@typescript-eslint/parser": "5.31.0",
38
+ "@types/webpack-env": "1.18.0",
39
+ "@typescript-eslint/eslint-plugin": "5.36.1",
40
+ "@typescript-eslint/parser": "5.36.1",
41
41
  "autoprefixer": "10.4.8",
42
42
  "browser-sync": "2.27.10",
43
43
  "browser-sync-webpack-plugin": "2.3.0",
44
44
  "copy-webpack-plugin": "11.0.0",
45
- "core-js": "3.24.1",
45
+ "core-js": "3.25.0",
46
46
  "cross-env": "7.0.3",
47
47
  "css-loader": "6.7.1",
48
48
  "css-minimizer-webpack-plugin": "4.0.0",
49
- "eslint": "8.20.0",
49
+ "eslint": "8.23.0",
50
50
  "eslint-config-prettier": "8.5.0",
51
- "eslint-plugin-react": "7.30.1",
51
+ "eslint-plugin-react": "7.31.1",
52
52
  "eslint-webpack-plugin": "3.2.0",
53
53
  "folder-hash": "4.0.2",
54
54
  "fork-ts-checker-webpack-plugin": "7.2.13",
@@ -56,8 +56,8 @@
56
56
  "identity-obj-proxy": "3.0.0",
57
57
  "jest": "28.1.3",
58
58
  "jest-environment-jsdom": "28.1.3",
59
- "jest-junit": "14.0.0",
60
- "jest-sonar-reporter": "2.0.0",
59
+ "jest-junit": "14.0.1",
60
+ "jest-sonar": "0.2.12",
61
61
  "json-loader": "0.5.7",
62
62
  "merge-jsons-webpack-plugin": "2.0.1",
63
63
  "mini-css-extract-plugin": "2.6.1",
@@ -66,21 +66,21 @@
66
66
  "react-infinite-scroll-component": "6.1.0",
67
67
  "redux-mock-store": "1.5.4",
68
68
  "rimraf": "3.0.2",
69
- "sass": "1.54.0",
69
+ "sass": "1.54.8",
70
70
  "sass-loader": "13.0.2",
71
71
  "simple-progress-webpack-plugin": "2.0.0",
72
72
  "sinon": "14.0.0",
73
73
  "source-map-loader": "4.0.0",
74
74
  "sourcemap-istanbul-instrumenter-loader": "0.2.0",
75
75
  "style-loader": "3.3.1",
76
- "terser-webpack-plugin": "5.3.3",
76
+ "terser-webpack-plugin": "5.3.6",
77
77
  "thread-loader": "3.0.4",
78
- "ts-jest": "28.0.7",
78
+ "ts-jest": "28.0.8",
79
79
  "ts-loader": "9.3.1",
80
- "typescript": "4.7.4",
80
+ "typescript": "4.8.2",
81
81
  "webpack": "5.74.0",
82
82
  "webpack-cli": "4.10.0",
83
- "webpack-dev-server": "4.9.3",
83
+ "webpack-dev-server": "4.10.1",
84
84
  "webpack-merge": "5.8.0",
85
85
  "webpack-notifier": "1.15.0",
86
86
  "workbox-webpack-plugin": "6.5.4"
@@ -112,7 +112,7 @@
112
112
  "jest": "<%= dependabotPackageJson.devDependencies['jest'] %>",
113
113
  "jest-environment-jsdom": "<%= dependabotPackageJson.devDependencies['jest-environment-jsdom'] %>",
114
114
  "jest-junit": "<%= dependabotPackageJson.devDependencies['jest-junit'] %>",
115
- "jest-sonar-reporter": "<%= dependabotPackageJson.devDependencies['jest-sonar-reporter'] %>",
115
+ "jest-sonar": "<%= dependabotPackageJson.devDependencies['jest-sonar'] %>",
116
116
  "json-loader": "<%= dependabotPackageJson.devDependencies['json-loader'] %>",
117
117
  <%_ if (enableTranslation) { _%>
118
118
  "folder-hash": "<%= dependabotPackageJson.devDependencies['folder-hash'] %>",
@@ -173,8 +173,8 @@
173
173
  "default_environment": "prod"
174
174
  },
175
175
  "scripts": {
176
- "prettier:check": "prettier --check \"{,src/**/,webpack/}*.{<%= getPrettierExtensions() %>}\"",
177
- "prettier:format": "prettier --write \"{,src/**/,webpack/}*.{<%= getPrettierExtensions() %>}\"",
176
+ "prettier:check": "prettier --check \"{,src/**/,webpack/,.blueprint/**/}*.{<%= getPrettierExtensions() %>}\"",
177
+ "prettier:format": "prettier --write \"{,src/**/,webpack/,.blueprint/**/}*.{<%= getPrettierExtensions() %>}\"",
178
178
  "lint": "eslint . --ext .js,.ts,.jsx,.tsx",
179
179
  "lint:fix": "<%= clientPackageManager %> run lint -- --fix",
180
180
  "cleanup": "rimraf <%= DIST_DIR %>",
@@ -221,9 +221,5 @@
221
221
  "webapp:prod": "<%= clientPackageManager %> run clean-www && <%= clientPackageManager %> run webapp:build:prod --",
222
222
  "webapp:test": "<%= clientPackageManager %> run test --",
223
223
  "webpack-dev-server": "webpack serve"
224
- },
225
- "jestSonar": {
226
- "reportPath": "<%= BUILD_DIR %>test-results/jest",
227
- "reportFile": "TESTS-results-sonar.xml"
228
224
  }
229
225
  }
@@ -38,9 +38,6 @@ import loggerMiddleware from './logger-middleware';
38
38
  <%_ if (communicationSpringWebsocket) { _%>
39
39
  import websocketMiddleware from './websocket-middleware';
40
40
  <%_ } _%>
41
- <%_ if (enableTranslation) { _%>
42
- import translationMiddleware from './translation-middleware';
43
- <%_ } _%>
44
41
 
45
42
  const store = configureStore({
46
43
  reducer: sharedReducers,
@@ -56,9 +53,6 @@ const store = configureStore({
56
53
  loadingBarMiddleware(),
57
54
  <%_ if (communicationSpringWebsocket) { _%>
58
55
  websocketMiddleware,
59
- <%_ } _%>
60
- <%_ if (enableTranslation) { _%>
61
- translationMiddleware,
62
56
  <%_ } _%>
63
57
  loggerMiddleware
64
58
  ),
@@ -17,7 +17,7 @@
17
17
  limitations under the License.
18
18
  -%>
19
19
  import React from 'react';
20
- import ReactDOM from 'react-dom';
20
+ import { createRoot } from 'react-dom/client';
21
21
  import { Provider } from 'react-redux';
22
22
  import { bindActionCreators } from 'redux';
23
23
 
@@ -42,18 +42,17 @@ setupAxiosInterceptors(() => actions.clearAuthentication('login.error.unauthoriz
42
42
  loadIcons();
43
43
 
44
44
  const rootEl = document.getElementById('root');
45
+ const root = createRoot(rootEl);
45
46
 
46
47
  const render = Component =>
47
- // eslint-disable-next-line react/no-render-return-value
48
- ReactDOM.render(
48
+ root.render(
49
49
  <ErrorBoundary>
50
50
  <Provider store={store}>
51
51
  <div>
52
52
  <Component />
53
53
  </div>
54
54
  </Provider>
55
- </ErrorBoundary>,
56
- rootEl
55
+ </ErrorBoundary>
57
56
  );
58
57
 
59
58
  render(AppComponent);
@@ -23,7 +23,7 @@ import thunk from 'redux-thunk';
23
23
  import sinon from 'sinon';
24
24
 
25
25
  import administration, {
26
- <%_ if (applicationTypeGateway && serviceDiscoveryType) { _%>
26
+ <%_ if (applicationTypeGateway && serviceDiscoveryAny) { _%>
27
27
  getGatewayRoutes,
28
28
  <%_ } _%>
29
29
  <%_ if (withAdminUi) { _%>
@@ -56,7 +56,7 @@ describe('Administration reducer tests', () => {
56
56
  errorMessage: null,
57
57
  totalItems: 0
58
58
  });
59
- <%_ if (applicationTypeGateway && serviceDiscoveryType) { _%>
59
+ <%_ if (applicationTypeGateway && serviceDiscoveryAny) { _%>
60
60
  expect(isEmpty(state.gateway.routes));
61
61
  <%_ } _%>
62
62
  <%_ if (withAdminUi) { _%>
@@ -84,7 +84,7 @@ describe('Administration reducer tests', () => {
84
84
  it('should set state to loading', () => {
85
85
  testMultipleTypes(
86
86
  [
87
- <%_ if (applicationTypeGateway && serviceDiscoveryType) { _%>
87
+ <%_ if (applicationTypeGateway && serviceDiscoveryAny) { _%>
88
88
  getGatewayRoutes.pending.type,
89
89
  <%_ } _%>
90
90
  <%_ if (withAdminUi) { _%>
@@ -111,7 +111,7 @@ describe('Administration reducer tests', () => {
111
111
  it('should set state to failed and put an error message in errorMessage', () => {
112
112
  testMultipleTypes(
113
113
  [
114
- <%_ if (applicationTypeGateway && serviceDiscoveryType) { _%>
114
+ <%_ if (applicationTypeGateway && serviceDiscoveryAny) { _%>
115
115
  getGatewayRoutes.rejected.type,
116
116
  <%_ } _%>
117
117
  <%_ if (withAdminUi) { _%>
@@ -138,7 +138,7 @@ describe('Administration reducer tests', () => {
138
138
  });
139
139
 
140
140
  describe('Success', () => {
141
- <%_ if (applicationTypeGateway && serviceDiscoveryType) { _%>
141
+ <%_ if (applicationTypeGateway && serviceDiscoveryAny) { _%>
142
142
  it('should update state according to a successful fetch gateway routes request', () => {
143
143
  const payload = { data: [] };
144
144
  const toTest = administration(undefined, { type: getGatewayRoutes.fulfilled.type, payload });
@@ -264,7 +264,7 @@ describe('Administration reducer tests', () => {
264
264
  let store;
265
265
 
266
266
  const resolvedObject = { value: 'whatever' };
267
- <%_ if (applicationTypeGateway && serviceDiscoveryType || withAdminUi) { _%>
267
+ <%_ if (applicationTypeGateway && serviceDiscoveryAny || withAdminUi) { _%>
268
268
  beforeEach(() => {
269
269
  const mockStore = configureStore([thunk]);
270
270
  store = mockStore({});
@@ -272,7 +272,7 @@ describe('Administration reducer tests', () => {
272
272
  axios.post = sinon.stub().returns(Promise.resolve(resolvedObject));
273
273
  });
274
274
  <%_ } _%>
275
- <%_ if (applicationTypeGateway && serviceDiscoveryType) { _%>
275
+ <%_ if (applicationTypeGateway && serviceDiscoveryAny) { _%>
276
276
  it('dispatches FETCH_GATEWAY_ROUTE_PENDING and FETCH_GATEWAY_ROUTE_FULFILLED actions', async () => {
277
277
  const expectedActions = [
278
278
  {
@@ -25,7 +25,7 @@ import { AppThunk } from 'app/config/store';
25
25
  const initialState = {
26
26
  loading: false,
27
27
  errorMessage: null,
28
- <%_ if (applicationTypeGateway && serviceDiscoveryType) { _%>
28
+ <%_ if (applicationTypeGateway && serviceDiscoveryAny) { _%>
29
29
  gateway: {
30
30
  routes: []
31
31
  },
@@ -53,7 +53,7 @@ const initialState = {
53
53
  export type AdministrationState = Readonly<typeof initialState>;
54
54
 
55
55
  // Actions
56
- <%_ if (applicationTypeGateway && serviceDiscoveryType) { _%>
56
+ <%_ if (applicationTypeGateway && serviceDiscoveryAny) { _%>
57
57
  export const getGatewayRoutes = createAsyncThunk('administration/fetch_gateway_route', async () => axios.get<any>('api/gateway/routes'), {
58
58
  serializeError: serializeAxiosError,
59
59
  });
@@ -113,9 +113,9 @@ export const AdministrationSlice = createSlice({
113
113
  <%_ } _%>
114
114
  },
115
115
  extraReducers(builder) {
116
- <%_ if (withAdminUi || (applicationTypeGateway && serviceDiscoveryType)) { _%>
116
+ <%_ if (withAdminUi || (applicationTypeGateway && serviceDiscoveryAny)) { _%>
117
117
  builder
118
- <%_ if (applicationTypeGateway && serviceDiscoveryType) { _%>
118
+ <%_ if (applicationTypeGateway && serviceDiscoveryAny) { _%>
119
119
  .addCase(getGatewayRoutes.fulfilled, (state, action) => {
120
120
  state.loading = false;
121
121
  state.gateway = {
@@ -159,7 +159,7 @@ export const AdministrationSlice = createSlice({
159
159
  <%_ } _%>
160
160
  .addMatcher(
161
161
  isPending(
162
- <%_ if (applicationTypeGateway && serviceDiscoveryType) { _%>
162
+ <%_ if (applicationTypeGateway && serviceDiscoveryAny) { _%>
163
163
  getGatewayRoutes,
164
164
  <%_ } _%>
165
165
  <%_ if (withAdminUi) { _%>
@@ -178,7 +178,7 @@ export const AdministrationSlice = createSlice({
178
178
  )
179
179
  .addMatcher(
180
180
  isRejected(
181
- <%_ if (applicationTypeGateway && serviceDiscoveryType) { _%>
181
+ <%_ if (applicationTypeGateway && serviceDiscoveryAny) { _%>
182
182
  getGatewayRoutes,
183
183
  <%_ } _%>
184
184
  <%_ if (withAdminUi) { _%>
@@ -30,7 +30,7 @@ import Metrics from './metrics/metrics';
30
30
  import Configuration from './configuration/configuration';
31
31
  <%_ } _%>
32
32
  import Docs from './docs/docs';
33
- <%_ if (applicationTypeGateway && serviceDiscoveryType) { _%>
33
+ <%_ if (applicationTypeGateway && serviceDiscoveryAny) { _%>
34
34
  import Gateway from './gateway/gateway';
35
35
  <%_ } _%>
36
36
  <%_ if (communicationSpringWebsocket) { _%>
@@ -46,7 +46,7 @@ const AdministrationRoutes = () => (
46
46
  <%_ if (communicationSpringWebsocket) { _%>
47
47
  <Route path="tracker" element={<Tracker />} />
48
48
  <%_ } _%>
49
- <%_ if (applicationTypeGateway && serviceDiscoveryType) { _%>
49
+ <%_ if (applicationTypeGateway && serviceDiscoveryAny) { _%>
50
50
  <Route path="gateway" element={<Gateway />} />
51
51
  <%_ } _%>
52
52
  <%_ if (withAdminUi) { _%>
@@ -27,7 +27,7 @@ import { Translate, translate } from 'react-jhipster';
27
27
 
28
28
  const adminMenuItems = () => (
29
29
  <>
30
- <%_ if (applicationTypeGateway && serviceDiscoveryType) { _%>
30
+ <%_ if (applicationTypeGateway && serviceDiscoveryAny) { _%>
31
31
  <MenuItem icon="road" to="/admin/gateway"><Translate contentKey="global.menu.admin.gateway">Gateway</Translate></MenuItem>
32
32
  <%_ } _%>
33
33
  <%_ if (!skipUserManagement) { _%>
@@ -40,7 +40,9 @@ import authentication, {
40
40
  clearAuth,
41
41
  initialState,
42
42
  } from 'app/shared/reducers/authentication';
43
- <% if (enableTranslation) { %>import { updateLocale } from 'app/shared/reducers/locale';<% } %>
43
+ <%_ if (enableTranslation) { _%>
44
+ import { updateLocale, setLocale } from 'app/shared/reducers/locale';
45
+ <%_ } _%>
44
46
 
45
47
  describe('Authentication reducer tests', () => {
46
48
  function isAccountEmpty(state): boolean {
@@ -204,7 +206,11 @@ describe('Authentication reducer tests', () => {
204
206
  const resolvedObject = { value: 'whatever' };
205
207
  beforeEach(() => {
206
208
  const mockStore = configureStore([thunk]);
207
- store = mockStore({ authentication: { account: { <%_ if (enableTranslation) { _%> langKey: '<%= nativeLanguage %>' <% } %> } } });
209
+ <%_ if (enableTranslation) { _%>
210
+ store = mockStore({ authentication: { account: { langKey: '<%= nativeLanguage %>' } }, locale: { loadedLocales: ['<%= nativeLanguage %>'] } });
211
+ <%_ } else { _%>
212
+ store = mockStore({ authentication: { account: { } } });
213
+ <%_ } _%>
208
214
  axios.get = sinon.stub().returns(Promise.resolve(resolvedObject));
209
215
  });
210
216
 
@@ -218,15 +224,18 @@ describe('Authentication reducer tests', () => {
218
224
  type: getAccount.fulfilled.type,
219
225
  payload: resolvedObject
220
226
  },
221
- updateLocale('<%= nativeLanguage %>'),
227
+ {
228
+ type: setLocale.pending.type,
229
+ },
230
+ updateLocale('en'),
231
+ {
232
+ type: setLocale.fulfilled.type,
233
+ payload: 'en',
234
+ },
222
235
  <%_ } _%>
223
236
  ];
224
237
  await store.dispatch(getSession());
225
- expect(store.getActions()[0]).toMatchObject(expectedActions[0]);
226
- <%_ if (enableTranslation) { _%>
227
- expect(store.getActions()[1]).toMatchObject(expectedActions[1]);
228
- expect(store.getActions()[2]).toMatchObject(expectedActions[2]);
229
- <%_ } _%>
238
+ expect(store.getActions()).toMatchObject(expectedActions);
230
239
  });
231
240
 
232
241
  it('dispatches LOGOUT actions', async () => {
@@ -56,7 +56,7 @@ export const getSession = (): AppThunk => <% if (enableTranslation) { %>async<%
56
56
  const { account } = getState().authentication;
57
57
  if (account && account.langKey) {
58
58
  const langKey = Storage.session.get('locale', account.langKey);
59
- dispatch(setLocale(langKey));
59
+ await dispatch(setLocale(langKey));
60
60
  }
61
61
  <%_ } else { _%>
62
62
  dispatch(getAccount());
@@ -4,7 +4,9 @@ import configureStore from 'redux-mock-store';
4
4
  import thunk from 'redux-thunk';
5
5
  import { TranslatorContext } from 'react-jhipster';
6
6
 
7
- import locale, { setLocale, updateLocale } from 'app/shared/reducers/locale';
7
+ import locale, { setLocale, updateLocale, loaded, addTranslationSourcePrefix } from 'app/shared/reducers/locale';
8
+
9
+ const defaultLocale = '<%= nativeLanguage %>';
8
10
 
9
11
  describe('Locale reducer tests', () => {
10
12
  it('should return the initial state', () => {
@@ -15,19 +17,19 @@ describe('Locale reducer tests', () => {
15
17
  });
16
18
 
17
19
  it('should correctly set the first time locale', () => {
18
- const localeState = locale(undefined, updateLocale('en'));
20
+ const localeState = locale(undefined, updateLocale(defaultLocale));
19
21
  expect(localeState).toMatchObject({
20
- currentLocale: 'en'
22
+ currentLocale: defaultLocale
21
23
  });
22
- expect(TranslatorContext.context.locale).toEqual('en');
24
+ expect(TranslatorContext.context.locale).toEqual(defaultLocale);
23
25
  });
24
26
 
25
27
  it('should correctly detect update in current locale state', () => {
26
- TranslatorContext.setLocale('en');
27
- expect(TranslatorContext.context.locale).toEqual('en');
28
+ TranslatorContext.setLocale(defaultLocale);
29
+ expect(TranslatorContext.context.locale).toEqual(defaultLocale);
28
30
  const localeState = locale(
29
31
  {
30
- currentLocale: 'en',
32
+ currentLocale: defaultLocale,
31
33
  sourcePrefixes: [],
32
34
  lastChange: new Date().getTime(),
33
35
  loadedKeys: [],
@@ -40,22 +42,177 @@ describe('Locale reducer tests', () => {
40
42
  expect(TranslatorContext.context.locale).toEqual('es');
41
43
  });
42
44
 
43
- describe('Locale actions', () => {
44
- let store;
45
- beforeEach(() => {
46
- store = configureStore([thunk])({});
47
- axios.get = sinon.stub().returns(Promise.resolve({ key: 'value' }));
45
+ describe('setLocale reducer', () => {
46
+ describe('with default language loaded', () => {
47
+ let store;
48
+ beforeEach(() => {
49
+ store = configureStore([thunk])({ locale: { loadedLocales: [defaultLocale], loadedKeys: [] } });
50
+ axios.get = sinon.stub().returns(Promise.resolve({ key: 'value' }));
51
+ });
52
+
53
+ it('dispatches updateLocale action for default locale', async () => {
54
+ TranslatorContext.setDefaultLocale(defaultLocale);
55
+ expect(Object.keys(TranslatorContext.context.translations)).not.toContainEqual(defaultLocale);
56
+
57
+ const expectedActions = [
58
+ {
59
+ type: setLocale.pending.type,
60
+ },
61
+ updateLocale(defaultLocale),
62
+ {
63
+ type: setLocale.fulfilled.type,
64
+ payload: defaultLocale,
65
+ },
66
+ ];
67
+
68
+ await store.dispatch(setLocale(defaultLocale));
69
+ expect(store.getActions()).toMatchObject(expectedActions);
70
+ });
71
+ });
72
+
73
+ describe('with no language loaded', () => {
74
+ let store;
75
+ beforeEach(() => {
76
+ store = configureStore([thunk])({ locale: { sourcePrefixes: [], loadedLocales: [], loadedKeys: [] } });
77
+ axios.get = sinon.stub().returns(Promise.resolve({ key: 'value' }));
78
+ });
79
+
80
+ it('dispatches loaded and updateLocale action for default locale', async () => {
81
+ TranslatorContext.setDefaultLocale(defaultLocale);
82
+ expect(Object.keys(TranslatorContext.context.translations)).not.toContainEqual(defaultLocale);
83
+
84
+ const expectedActions = [
85
+ {
86
+ type: setLocale.pending.type,
87
+ },
88
+ loaded({ keys: [defaultLocale], locale: defaultLocale }),
89
+ updateLocale(defaultLocale),
90
+ {
91
+ type: setLocale.fulfilled.type,
92
+ payload: defaultLocale,
93
+ },
94
+ ];
95
+
96
+ await store.dispatch(setLocale(defaultLocale));
97
+ expect(store.getActions()).toMatchObject(expectedActions);
98
+ });
99
+ });
100
+ });
101
+
102
+ describe('addTranslationSourcePrefix reducer', () => {
103
+ const sourcePrefix = 'foo/';
104
+
105
+ describe('with no prefixes and keys loaded', () => {
106
+ let store;
107
+ beforeEach(() => {
108
+ store = configureStore([thunk])({
109
+ locale: { currentLocale: defaultLocale, sourcePrefixes: [], loadedLocales: [], loadedKeys: [] },
110
+ });
111
+ axios.get = sinon.stub().returns(Promise.resolve({ key: 'value' }));
112
+ });
113
+
114
+ it('dispatches loaded action with keys and sourcePrefix', async () => {
115
+ const expectedActions = [
116
+ {
117
+ type: addTranslationSourcePrefix.pending.type,
118
+ },
119
+ loaded({ keys: [`${sourcePrefix}${defaultLocale}`], sourcePrefix }),
120
+ {
121
+ type: addTranslationSourcePrefix.fulfilled.type,
122
+ payload: `${sourcePrefix}${defaultLocale}`,
123
+ },
124
+ ];
125
+
126
+ await store.dispatch(addTranslationSourcePrefix(sourcePrefix));
127
+ expect(store.getActions()).toMatchObject(expectedActions);
128
+ });
48
129
  });
49
130
 
50
- it('dispatches SET_LOCALE action for default locale', async () => {
51
- TranslatorContext.setDefaultLocale('en');
52
- const defaultLocale = TranslatorContext.context.defaultLocale;
53
- expect(Object.keys(TranslatorContext.context.translations)).not.toContainEqual(defaultLocale);
131
+ describe('with prefix already added', () => {
132
+ let store;
133
+ beforeEach(() => {
134
+ store = configureStore([thunk])({
135
+ locale: { currentLocale: defaultLocale, sourcePrefixes: [sourcePrefix], loadedLocales: [], loadedKeys: [] },
136
+ });
137
+ axios.get = sinon.stub().returns(Promise.resolve({ key: 'value' }));
138
+ });
139
+
140
+ it("doesn't dispatches loaded action", async () => {
141
+ const expectedActions = [
142
+ {
143
+ type: addTranslationSourcePrefix.pending.type,
144
+ },
145
+ {
146
+ type: addTranslationSourcePrefix.fulfilled.type,
147
+ payload: `${sourcePrefix}${defaultLocale}`,
148
+ },
149
+ ];
150
+
151
+ await store.dispatch(addTranslationSourcePrefix(sourcePrefix));
152
+ expect(store.getActions()).toMatchObject(expectedActions);
153
+ });
154
+ });
155
+
156
+ describe('with key already loaded', () => {
157
+ let store;
158
+ beforeEach(() => {
159
+ store = configureStore([thunk])({
160
+ locale: { currentLocale: defaultLocale, sourcePrefixes: [], loadedLocales: [], loadedKeys: [`${sourcePrefix}${defaultLocale}`] },
161
+ });
162
+ axios.get = sinon.stub().returns(Promise.resolve({ key: 'value' }));
163
+ });
164
+
165
+ it("doesn't dispatches loaded action", async () => {
166
+ const expectedActions = [
167
+ {
168
+ type: addTranslationSourcePrefix.pending.type,
169
+ },
170
+ {
171
+ type: addTranslationSourcePrefix.fulfilled.type,
172
+ payload: `${sourcePrefix}${defaultLocale}`,
173
+ },
174
+ ];
175
+
176
+ await store.dispatch(addTranslationSourcePrefix(sourcePrefix));
177
+ expect(store.getActions()).toMatchObject(expectedActions);
178
+ });
179
+ });
180
+ });
181
+
182
+ describe('loaded reducer', () => {
183
+ describe('with empty state', () => {
184
+ let initialState;
185
+ beforeEach(() => {
186
+ initialState = { currentLocale: defaultLocale, sourcePrefixes: [], loadedLocales: [], loadedKeys: [] };
187
+ });
188
+
189
+ it("and empty parameter, don't adds anything", () => {
190
+ const expectedState = { currentLocale: defaultLocale, sourcePrefixes: [], loadedLocales: [], loadedKeys: [] };
191
+
192
+ const localeState = locale(initialState, loaded({}));
193
+ expect(localeState).toMatchObject(expectedState);
194
+ });
195
+
196
+ it('and keys parameter, adds to loadedKeys', () => {
197
+ const expectedState = { currentLocale: defaultLocale, sourcePrefixes: [], loadedLocales: [], loadedKeys: ['foo'] };
198
+
199
+ const localeState = locale(initialState, loaded({ keys: ['foo'] }));
200
+ expect(localeState).toMatchObject(expectedState);
201
+ });
202
+
203
+ it('and sourcePrefix parameter, adds to sourcePrefixes', () => {
204
+ const expectedState = { currentLocale: defaultLocale, sourcePrefixes: ['foo'], loadedLocales: [], loadedKeys: [] };
205
+
206
+ const localeState = locale(initialState, loaded({ sourcePrefix: 'foo' }));
207
+ expect(localeState).toMatchObject(expectedState);
208
+ });
54
209
 
55
- const expectedActions = [updateLocale(defaultLocale)];
210
+ it('and locale parameter, adds to loadedLocales', () => {
211
+ const expectedState = { currentLocale: defaultLocale, sourcePrefixes: [], loadedLocales: ['foo'], loadedKeys: [] };
56
212
 
57
- await store.dispatch(setLocale(defaultLocale));
58
- expect(store.getActions()).toEqual(expectedActions);
213
+ const localeState = locale(initialState, loaded({ locale: 'foo' }));
214
+ expect(localeState).toMatchObject(expectedState);
215
+ });
59
216
  });
60
217
  });
61
218
  });