diff --git a/src/main/java/tech/jhipster/lite/generator/client/vue/i18n/domain/VueI18nModuleFactory.java b/src/main/java/tech/jhipster/lite/generator/client/vue/i18n/domain/VueI18nModuleFactory.java index 90ac05fa7c6..79990ebec24 100644 --- a/src/main/java/tech/jhipster/lite/generator/client/vue/i18n/domain/VueI18nModuleFactory.java +++ b/src/main/java/tech/jhipster/lite/generator/client/vue/i18n/domain/VueI18nModuleFactory.java @@ -1,17 +1,18 @@ package tech.jhipster.lite.generator.client.vue.i18n.domain; import static tech.jhipster.lite.module.domain.JHipsterModule.*; +import static tech.jhipster.lite.module.domain.npm.JHLiteNpmVersionSource.COMMON; +import static tech.jhipster.lite.module.domain.npm.JHLiteNpmVersionSource.VUE; import tech.jhipster.lite.module.domain.JHipsterModule; import tech.jhipster.lite.module.domain.file.JHipsterSource; -import tech.jhipster.lite.module.domain.packagejson.VersionSource; import tech.jhipster.lite.module.domain.properties.JHipsterModuleProperties; import tech.jhipster.lite.shared.error.domain.Assert; public class VueI18nModuleFactory { private static final JHipsterSource APP_SOURCE = from("client/common/i18n"); - private static final JHipsterSource COMMON_CONTEXT_SOURCE = from("client/common/i18n/app"); + private static final JHipsterSource HOME_CONTEXT_SOURCE = from("client/common/i18n/app"); private static final JHipsterSource ASSETS_SOURCE = from("client/common/i18n/app/locales"); private static final JHipsterSource TEST_SOURCE = from("client/vue/i18n/src/test"); @@ -26,25 +27,28 @@ public JHipsterModule buildModule(JHipsterModuleProperties properties) { //@formatter:off return moduleBuilder(properties) .packageJson() - .addDependency(packageName("i18next"), VersionSource.COMMON) - .addDependency(packageName("i18next-vue"), VersionSource.VUE) - .addDependency(packageName("i18next-browser-languagedetector"), VersionSource.COMMON) + .addDependency(packageName("i18next"), COMMON) + .addDependency(packageName("i18next-vue"), VUE) + .addDependency(packageName("i18next-browser-languagedetector"), COMMON) .and() .files() .batch(APP_SOURCE, to(INDEX)) .addFile("i18n.ts") .addFile("Translations.ts") .and() - .batch(COMMON_CONTEXT_SOURCE, to(INDEX + "common/")) - .addFile("CommonTranslations.ts") + .batch(HOME_CONTEXT_SOURCE, to(INDEX + "home/")) + .addFile("HomeTranslations.ts") .and() - .batch(ASSETS_SOURCE, to(INDEX + "common/locales/")) + .batch(ASSETS_SOURCE, to(INDEX + "home/locales/")) .addFile("en.ts") .addFile("fr.ts") .and() .batch(TEST_SOURCE, to(INDEX_TEST)) .addFile("setupTests.ts") .and() + .batch(TEST_SOURCE, to(INDEX_TEST + "webapp/unit/home/infrastructure/primary/")) + .addFile("HomePageVue.spec.ts") + .and() .and() .mandatoryReplacements() .in(path(INDEX + "main.ts")) @@ -53,24 +57,13 @@ public JHipsterModule buildModule(JHipsterModuleProperties properties) { .add(lineBeforeText(PROVIDER_NEEDLE ), "app.use(I18NextVue, { i18next });") .and() - .in(path(INDEX + "/common/primary/homepage/Homepage.html")) - .add(lineAfterRegex("Vue 3 \\+ TypeScript \\+ Vite"), properties.indentation().times(1) + "

") + .in(path(INDEX + "/home/infrastructure/primary/HomepageVue.vue")) + .add(lineAfterRegex("Vue 3 \\+ TypeScript \\+ Vite"), properties.indentation().times(2) + "

") .and() .in(path("./vitest.config.ts")) .add(lineAfterRegex("test:"), properties.indentation().times(2) + "setupFiles: ['./src/test/setupTests.ts'],") .and() - .in(path(INDEX_TEST + "webapp/unit/common/primary/homepage/Homepage.spec.ts")) - .add(append(), LINE_BREAK + """ - describe('App I18next', () => { - it('should renders with translation', () => { - wrap(); - - expect(wrapper.text()).toContain("translationEnabled"); - }); - }); - """) .and() - .and() .build(); //@formatter:off } diff --git a/src/main/resources/generator/client/common/i18n/app/CommonTranslations.ts b/src/main/resources/generator/client/common/i18n/app/HomeTranslations.ts similarity index 67% rename from src/main/resources/generator/client/common/i18n/app/CommonTranslations.ts rename to src/main/resources/generator/client/common/i18n/app/HomeTranslations.ts index 1fc95c79f39..46481a884a0 100644 --- a/src/main/resources/generator/client/common/i18n/app/CommonTranslations.ts +++ b/src/main/resources/generator/client/common/i18n/app/HomeTranslations.ts @@ -2,4 +2,4 @@ import type { Translations } from '@/Translations'; import { en } from './locales/en'; import { fr } from './locales/fr'; -export const commonTranslations: Translations = { fr, en }; +export const homeTranslations: Translations = { fr, en }; diff --git a/src/main/resources/generator/client/common/i18n/app/locales/en.ts b/src/main/resources/generator/client/common/i18n/app/locales/en.ts index 5eb7d1ced1f..53caf0a715d 100644 --- a/src/main/resources/generator/client/common/i18n/app/locales/en.ts +++ b/src/main/resources/generator/client/common/i18n/app/locales/en.ts @@ -1,7 +1,7 @@ import type { Translation } from '@/Translations'; export const en: Translation = { - common: { + home: { translationEnabled: 'Internationalization enabled', }, }; diff --git a/src/main/resources/generator/client/common/i18n/app/locales/fr.ts b/src/main/resources/generator/client/common/i18n/app/locales/fr.ts index 7e91dd9b183..7f982d53b3d 100644 --- a/src/main/resources/generator/client/common/i18n/app/locales/fr.ts +++ b/src/main/resources/generator/client/common/i18n/app/locales/fr.ts @@ -1,7 +1,7 @@ import type { Translation } from '@/Translations'; export const fr: Translation = { - common: { + home: { translationEnabled: 'Internationalisation activée', }, }; diff --git a/src/main/resources/generator/client/common/i18n/i18n.ts b/src/main/resources/generator/client/common/i18n/i18n.ts index cafa5361757..a84026e1aee 100644 --- a/src/main/resources/generator/client/common/i18n/i18n.ts +++ b/src/main/resources/generator/client/common/i18n/i18n.ts @@ -1,6 +1,6 @@ import i18n from 'i18next'; import LanguageDetector from 'i18next-browser-languagedetector'; -import { commonTranslations } from './common/CommonTranslations'; +import { homeTranslations } from './home/HomeTranslations'; import { toTranslationResources } from './Translations'; i18n.use(LanguageDetector).init({ @@ -9,7 +9,7 @@ i18n.use(LanguageDetector).init({ interpolation: { escapeValue: false, }, - resources: toTranslationResources(commonTranslations), + resources: toTranslationResources(homeTranslations), }); export default i18n; diff --git a/src/main/resources/generator/client/vue/i18n/src/test/HomePageVue.spec.ts b/src/main/resources/generator/client/vue/i18n/src/test/HomePageVue.spec.ts new file mode 100644 index 00000000000..b082d640bb7 --- /dev/null +++ b/src/main/resources/generator/client/vue/i18n/src/test/HomePageVue.spec.ts @@ -0,0 +1,17 @@ +import HomepageVue from '@/home/infrastructure/primary/HomepageVue.vue'; +import { shallowMount, VueWrapper } from '@vue/test-utils'; +import { describe, expect, it } from 'vitest'; + +let wrapper: VueWrapper; + +const wrap = () => { + wrapper = shallowMount(HomepageVue); +}; + +describe('App I18next', () => { + it('should renders with translation', () => { + wrap(); + + expect(wrapper.text()).toContain('translationEnabled'); + }); +}); diff --git a/src/test/features/client/vue-i18n.feature b/src/test/features/client/vue-i18n.feature index 47c30c6f704..55b34b6327f 100644 --- a/src/test/features/client/vue-i18n.feature +++ b/src/test/features/client/vue-i18n.feature @@ -3,14 +3,16 @@ Feature: Vue i18n Scenario: Should apply vue i18n module to vue When I apply modules to default project | init | + | prettier | + | typescript | | vue-core | | vue-i18next | Then I should have files in "src/main/webapp/app" | i18n.ts | | Translations.ts | - And I should have files in "src/main/webapp/app/common/" - | CommonTranslations.ts | - And I should have files in "src/main/webapp/app/common/locales" + And I should have files in "src/main/webapp/app/home/" + | HomeTranslations.ts | + And I should have files in "src/main/webapp/app/home/locales" | fr.ts | | en.ts | And I should have files in "src/test" diff --git a/src/test/java/tech/jhipster/lite/generator/client/vue/i18n/domain/VueI18nModuleFactoryTest.java b/src/test/java/tech/jhipster/lite/generator/client/vue/i18n/domain/VueI18nModuleFactoryTest.java index a613f963d7d..2bebd5455c5 100644 --- a/src/test/java/tech/jhipster/lite/generator/client/vue/i18n/domain/VueI18nModuleFactoryTest.java +++ b/src/test/java/tech/jhipster/lite/generator/client/vue/i18n/domain/VueI18nModuleFactoryTest.java @@ -38,7 +38,7 @@ void shouldBuildI18nModule() { """ import i18n from 'i18next'; import LanguageDetector from 'i18next-browser-languagedetector'; - import { commonTranslations } from './common/CommonTranslations'; + import { homeTranslations } from './home/HomeTranslations'; import { toTranslationResources } from './Translations'; i18n.use(LanguageDetector).init({ @@ -47,7 +47,7 @@ void shouldBuildI18nModule() { interpolation: { escapeValue: false, }, - resources: toTranslationResources(commonTranslations), + resources: toTranslationResources(homeTranslations), }); export default i18n; @@ -93,14 +93,14 @@ void shouldBuildI18nModule() { """ ) .and() - .hasFile("src/main/webapp/app/common/CommonTranslations.ts") + .hasFile("src/main/webapp/app/home/HomeTranslations.ts") .containing( """ import type { Translations } from '@/Translations'; import { en } from './locales/en'; import { fr } from './locales/fr'; - export const commonTranslations: Translations = { fr, en }; + export const homeTranslations: Translations = { fr, en }; """ ) .and() @@ -109,8 +109,8 @@ void shouldBuildI18nModule() { .containing("import I18NextVue from 'i18next-vue';") .containing("app.use(I18NextVue, { i18next });") .and() - .hasFile("src/main/webapp/app/common/primary/homepage/Homepage.html") - .containing("

") + .hasFile("src/main/webapp/app/home/infrastructure/primary/HomepageVue.vue") + .containing("

") .and() .hasFile("src/test/setupTests.ts") .containing( @@ -126,33 +126,33 @@ void shouldBuildI18nModule() { .hasFile("vitest.config.ts") .containing("setupFiles: ['./src/test/setupTests.ts']") .and() - .hasFile("src/main/webapp/app/common/locales/en.ts") + .hasFile("src/main/webapp/app/home/locales/en.ts") .containing( """ import type { Translation } from '@/Translations'; export const en: Translation = { - common: { + home: { translationEnabled: 'Internationalization enabled', }, }; """ ) .and() - .hasFile("src/main/webapp/app/common/locales/fr.ts") + .hasFile("src/main/webapp/app/home/locales/fr.ts") .containing( """ import type { Translation } from '@/Translations'; export const fr: Translation = { - common: { + home: { translationEnabled: 'Internationalisation activée', }, }; """ ) .and() - .hasFile("src/test/webapp/unit/common/primary/homepage/Homepage.spec.ts") + .hasFile("src/test/webapp/unit/home/infrastructure/primary/HomepageVue.spec.ts") .containing("describe('App I18next', () => {"); } @@ -161,13 +161,16 @@ private ModuleFile mainFile() { } private ModuleFile homepage() { - return file("src/test/resources/projects/vue/Homepage.html.template", "src/main/webapp/app/common/primary/homepage/Homepage.html"); + return file( + "src/test/resources/projects/vue/HomepageVue.vue.template", + "src/main/webapp/app/home/infrastructure/primary/HomepageVue.vue" + ); } private ModuleFile homepageTest() { return file( - "src/test/resources/projects/vue/Homepage.spec.ts.template", - "src/test/webapp/unit/common/primary/homepage/Homepage.spec.ts" + "src/test/resources/projects/vue/HomepageVue.spec.ts.template", + "src/test/webapp/unit/home/infrastructure/primary/HomepageVue.spec.ts" ); } diff --git a/src/test/resources/projects/vue/Homepage.html.template b/src/test/resources/projects/vue/Homepage.html.template deleted file mode 100644 index bbf89ea7c45..00000000000 --- a/src/test/resources/projects/vue/Homepage.html.template +++ /dev/null @@ -1,23 +0,0 @@ -
- Vue logo -
- JHipster logo -

{{ appName }}: Vue 3 + TypeScript + Vite

-

- Recommended IDE setup: - VSCode - + - Volar -

- -

- Vite Documentation - | - Vue 3 Documentation -

- -

- Edit - src/main/webapp/app/common/primary/app/AppVue.vue to test hot module replacement. -

-
diff --git a/src/test/resources/projects/vue/Homepage.spec.ts.template b/src/test/resources/projects/vue/HomepageVue.spec.ts.template similarity index 100% rename from src/test/resources/projects/vue/Homepage.spec.ts.template rename to src/test/resources/projects/vue/HomepageVue.spec.ts.template diff --git a/src/test/resources/projects/vue/HomepageVue.vue.template b/src/test/resources/projects/vue/HomepageVue.vue.template new file mode 100644 index 00000000000..26eef431e0f --- /dev/null +++ b/src/test/resources/projects/vue/HomepageVue.vue.template @@ -0,0 +1,71 @@ + + + + +