diff --git a/src/main/java/tech/jhipster/lite/generator/client/vue/core/domain/VueModulesFactory.java b/src/main/java/tech/jhipster/lite/generator/client/vue/core/domain/VueModulesFactory.java index 1e38db4792a..fe81ff5b033 100644 --- a/src/main/java/tech/jhipster/lite/generator/client/vue/core/domain/VueModulesFactory.java +++ b/src/main/java/tech/jhipster/lite/generator/client/vue/core/domain/VueModulesFactory.java @@ -14,17 +14,12 @@ public class VueModulesFactory { private static final JHipsterSource SOURCE = from("client/vue"); + private static final JHipsterSource APP_SOURCE = from("client/vue/webapp/app"); private static final JHipsterSource DOCUMENTATION_SOURCE = SOURCE.append("documentation"); - private static final JHipsterSource TEST_SOURCE = SOURCE.append("test/unit"); private static final JHipsterSource IMAGE_SOURCE = SOURCE.append("webapp/content/images"); - private static final JHipsterSource COMMON_PRIMARY_SOURCE = SOURCE.append("webapp/app/common/primary"); - private static final JHipsterSource COMMON_PRIMARY_TEST_SOURCE = SOURCE.append("test/unit/common/primary"); private static final JHipsterSource SOURCE_COMMON = from("client/common"); private static final JHipsterDestination MAIN_DESTINATION = to("src/main/webapp/app"); - private static final JHipsterDestination TEST_DESTINATION = to("src/test/webapp/unit"); - private static final JHipsterDestination MAIN_PRIMARY_DESTINATION = MAIN_DESTINATION.append("common/primary"); - private static final JHipsterDestination COMMON_PRIMARY_TEST_DESTINATION = to("src/test/webapp/unit/common/primary"); private static final String IMPORT_NEEDLE = "// jhipster-needle-main-ts-import"; private static final String PROVIDER_NEEDLE = "// jhipster-needle-main-ts-provider"; @@ -79,6 +74,7 @@ public JHipsterModule buildVueModule(JHipsterModuleProperties properties) { .addScript(scriptKey("dev"), scriptCommand("npm-run-all --parallel dev:*")) .addScript(scriptKey("dev:vite"), scriptCommand("vite")) .addScript(scriptKey("watch"), scriptCommand("npm-run-all --parallel watch:*")) + .addDevDependency(packageName("piqure"), VUE) .addScript(scriptKey("lint"), scriptCommand("eslint .")) .addScript(scriptKey("preview"), scriptCommand("vite preview")) .addScript(scriptKey("start"), scriptCommand("vite")) @@ -92,7 +88,6 @@ public JHipsterModule buildVueModule(JHipsterModuleProperties properties) { .add(SOURCE.template("eslint.config.js.mustache"), to("eslint.config.js")) .add(SOURCE.file("tsconfig.json"), to("tsconfig.json")) .add(SOURCE.file("tsconfig.build.json"), to("tsconfig.build.json")) - .add(SOURCE.template("webapp/app/http/AxiosHttp.ts.mustache"), MAIN_DESTINATION.append("http/AxiosHttp.ts")) .batch(SOURCE, to(".")) .addTemplate("vite.config.ts") .addTemplate("vitest.config.ts") @@ -100,49 +95,25 @@ public JHipsterModule buildVueModule(JHipsterModuleProperties properties) { .batch(SOURCE_COMMON, to(".")) .addFile(".npmrc") .and() - .batch(SOURCE.file("test/unit/http"), to("src/test/webapp/unit/http")) - .addTemplate("AxiosHttp.spec.ts") - .addTemplate("AxiosHttpStub.ts") - .addTemplate("AxiosStub.ts") - .and() .add(SOURCE.template("webapp/index.html"), to("src/main/webapp/index.html")) - .batch(SOURCE.append("webapp/app"), MAIN_DESTINATION) + .batch(APP_SOURCE, MAIN_DESTINATION) .addTemplate("env.d.ts") .addTemplate("main.ts") - .and() - .batch(COMMON_PRIMARY_SOURCE.append("app"), MAIN_PRIMARY_DESTINATION.append("app")) - .addTemplate("App.component.ts") - .addTemplate("App.html") .addTemplate("AppVue.vue") - .addTemplate("index.ts") + .addTemplate("injections.ts") + .addTemplate("router.ts") + .and() + .batch(APP_SOURCE.append("home"), MAIN_DESTINATION.append("home")) + .addTemplate("application/HomeRouter.ts") + .addTemplate("infrastructure/primary/HomepageVue.vue") .and() + .add(APP_SOURCE.template("shared/http/infrastructure/secondary/AxiosHttp.ts.mustache"), MAIN_DESTINATION.append("shared/http/infrastructure/secondary/AxiosHttp.ts")) .batch(IMAGE_SOURCE, to("src/main/webapp/content/images")) .addFile("JHipster-Lite-neon-green.png") .addFile("VueLogo.png") .and() - .add(COMMON_PRIMARY_TEST_SOURCE.template("app/App.spec.ts"), COMMON_PRIMARY_TEST_DESTINATION.append("app/App.spec.ts")) - .batch(COMMON_PRIMARY_SOURCE.append("homepage"), MAIN_PRIMARY_DESTINATION.append("homepage")) - .addTemplate("Homepage.component.ts") - .addTemplate("Homepage.html") - .addTemplate("HomepageVue.vue") - .addTemplate("index.ts") - .and() - .add(COMMON_PRIMARY_TEST_SOURCE.template("homepage/Homepage.spec.ts"), COMMON_PRIMARY_TEST_DESTINATION.append("homepage/Homepage.spec.ts")) - .add(SOURCE.template("webapp/app/router/router.ts"), MAIN_DESTINATION.append("router/router.ts")) - .add(SOURCE.template("test/unit/router/Router.spec.ts"), to("src/test/webapp/unit/router/Router.spec.ts")) - .batch(SOURCE.append("webapp/app/common/domain"), MAIN_DESTINATION.append("common/domain")) - .addTemplate("Logger.ts") - .addTemplate("Message.ts") - .and() - .add(SOURCE.template("webapp/app/common/secondary/ConsoleLogger.ts"), MAIN_DESTINATION.append("common/secondary/ConsoleLogger.ts")) - .add(SOURCE.template("test/unit/common/domain/Logger.fixture.ts"), to("src/test/webapp/unit/common/domain/Logger.fixture.ts")) - .add(SOURCE.template("test/unit/common/secondary/ConsoleLogger.spec.ts"), to("src/test/webapp/unit/common/secondary/ConsoleLogger.spec.ts")) - .add(SOURCE.file("webapp/app/vue/VueProp.ts"), to("src/main/webapp/app/vue/VueProp.ts")) - .batch(TEST_SOURCE.append("vue/vue-prop"), TEST_DESTINATION.append("vue/vue-prop")) - .addFile("ArrayComponentVue.vue") - .addFile("ObjectComponentVue.vue") - .addFile("VueProp.spec.ts") - .and() + .add(SOURCE.template("webapp/app/router.ts"), MAIN_DESTINATION.append("router.ts")) + .add(SOURCE.template("Dummy.spec.ts"), to("src/test/webapp/unit/Dummy.spec.ts")) .and() .build(); //@formatter:on diff --git a/src/main/resources/generator/client/vue/Dummy.spec.ts.mustache b/src/main/resources/generator/client/vue/Dummy.spec.ts.mustache new file mode 100644 index 00000000000..abb0b853889 --- /dev/null +++ b/src/main/resources/generator/client/vue/Dummy.spec.ts.mustache @@ -0,0 +1,8 @@ +import { describe } from 'vitest'; + +// This dummy test can be removed as soon as you have another test. It's here only to keep coverage analysis working. +describe('Dummy test', () => { + it('should pass', () => { + expect(true).toBe(true); + }); +}); diff --git a/src/main/resources/generator/client/vue/test/unit/common/domain/Logger.fixture.ts.mustache b/src/main/resources/generator/client/vue/test/unit/common/domain/Logger.fixture.ts.mustache deleted file mode 100644 index ab808c718d7..00000000000 --- a/src/main/resources/generator/client/vue/test/unit/common/domain/Logger.fixture.ts.mustache +++ /dev/null @@ -1,10 +0,0 @@ -import sinon, { type SinonStub } from 'sinon'; -import type { Logger } from '@/common/domain/Logger'; - -export interface LoggerFixture extends Logger { - error: SinonStub; -} - -export const stubLogger = (): LoggerFixture => ({ - error: sinon.stub(), -}); diff --git a/src/main/resources/generator/client/vue/test/unit/common/primary/app/App.spec.ts.mustache b/src/main/resources/generator/client/vue/test/unit/common/primary/app/App.spec.ts.mustache deleted file mode 100644 index 122b291a519..00000000000 --- a/src/main/resources/generator/client/vue/test/unit/common/primary/app/App.spec.ts.mustache +++ /dev/null @@ -1,21 +0,0 @@ -import { describe, it, expect } from 'vitest'; -import { shallowMount, VueWrapper } from '@vue/test-utils'; -import { AppVue } from '@/common/primary/app'; - -let wrapper: VueWrapper; - -const wrap = () => { - wrapper = shallowMount(AppVue, { - global: { - stubs: ['router-link', 'router-view'], - }, - }); -}; - -describe('App', () => { - it('should exist', () => { - wrap(); - - expect(wrapper.exists()).toBeTruthy(); - }); -}); diff --git a/src/main/resources/generator/client/vue/test/unit/common/primary/homepage/Homepage.spec.ts.mustache b/src/main/resources/generator/client/vue/test/unit/common/primary/homepage/Homepage.spec.ts.mustache deleted file mode 100644 index 2932aad09ed..00000000000 --- a/src/main/resources/generator/client/vue/test/unit/common/primary/homepage/Homepage.spec.ts.mustache +++ /dev/null @@ -1,17 +0,0 @@ -import { describe, it, expect } from 'vitest'; -import { shallowMount, VueWrapper } from '@vue/test-utils'; -import { HomepageVue } from '@/common/primary/homepage'; - -let wrapper: VueWrapper; - -const wrap = () => { - wrapper = shallowMount(HomepageVue); -}; - -describe('App', () => { - it('should exist', () => { - wrap(); - - expect(wrapper.exists()).toBeTruthy(); - }); -}); diff --git a/src/main/resources/generator/client/vue/test/unit/common/secondary/ConsoleLogger.spec.ts.mustache b/src/main/resources/generator/client/vue/test/unit/common/secondary/ConsoleLogger.spec.ts.mustache deleted file mode 100644 index a81a3f2cfc7..00000000000 --- a/src/main/resources/generator/client/vue/test/unit/common/secondary/ConsoleLogger.spec.ts.mustache +++ /dev/null @@ -1,18 +0,0 @@ -import { describe, it, expect, vi } from 'vitest'; - -import ConsoleLogger from '@/common/secondary/ConsoleLogger'; - -describe('ConsoleLogger', () => { - it('should log an error', () => { - const logger = { - error: vi.fn(), - }; - const consoleLogger = new ConsoleLogger(logger as any); - const error = new Error('Error message'); - - consoleLogger.error('An error occurs', error); - - expect(logger.error).toHaveBeenCalledTimes(1); - expect(logger.error).toBeCalledWith('An error occurs\n', error); - }); -}); diff --git a/src/main/resources/generator/client/vue/test/unit/http/AxiosHttp.spec.ts.mustache b/src/main/resources/generator/client/vue/test/unit/http/AxiosHttp.spec.ts.mustache deleted file mode 100644 index 5113745a83b..00000000000 --- a/src/main/resources/generator/client/vue/test/unit/http/AxiosHttp.spec.ts.mustache +++ /dev/null @@ -1,120 +0,0 @@ -import { describe, it, expect } from 'vitest'; -import type { AxiosResponse } from 'axios'; -import { AxiosHttp } from '@/http/AxiosHttp'; -import { dataAxiosResponse, stubAxiosInstance } from './AxiosStub'; - -interface Payload { - payload: string; -} - -const fakePayload = (): Payload => ({ - payload: 'content', -}); - -interface Result { - result: string; -} - -const fakeResult = (): Result => ({ - result: 'content', -}); - -const responseResult = (): AxiosResponse => dataAxiosResponse(fakeResult()); - -const expectForQuerying = (uri: string, result: AxiosResponse) => { - expect(result.data).toEqual(fakeResult()); - expect(uri).toBe('/uri'); -}; - -describe('axiosHttp', () => { - describe('GET', () => { - it('should get content', async () => { - const axiosInstance = stubAxiosInstance(); - axiosInstance.get.resolves(responseResult()); - const axiosHttp = new AxiosHttp(axiosInstance); - - const result = await axiosHttp.get('/uri'); - - const [uri] = axiosInstance.get.getCall(0).args; - expect(result.data).toEqual(fakeResult()); - expect(uri).toBe('/uri'); - }); - - it('should get content with params', async () => { - const axiosInstance = stubAxiosInstance(); - axiosInstance.get.resolves(responseResult()); - const axiosHttp = new AxiosHttp(axiosInstance); - - await axiosHttp.get('/uri', { params: { beer: 'chips' } }); - - const [, config] = axiosInstance.get.getCall(0).args; - expect(config.params.beer).toBe('chips'); - }); - }); - - describe('PUT', () => { - it('should only get content', async () => { - const axiosInstance = stubAxiosInstance(); - axiosInstance.put.resolves(responseResult()); - const axiosHttp = new AxiosHttp(axiosInstance); - - const result = await axiosHttp.put('/uri'); - - const [uri] = axiosInstance.put.getCall(0).args; - expect(result.data).toEqual(fakeResult()); - expect(uri).toBe('/uri'); - }); - - it('should send and get content', async () => { - const axiosInstance = stubAxiosInstance(); - axiosInstance.put.resolves(responseResult()); - const axiosHttp = new AxiosHttp(axiosInstance); - - const result = await axiosHttp.put('/uri', fakePayload()); - - const [uri, payload] = axiosInstance.put.getCall(0).args; - expect(payload).toEqual(fakePayload()); - expectForQuerying(uri, result); - }); - }); - - describe('POST', () => { - it('should only get content', async () => { - const axiosInstance = stubAxiosInstance(); - axiosInstance.post.resolves(responseResult()); - const axiosHttp = new AxiosHttp(axiosInstance); - - const result = await axiosHttp.post('/uri'); - - const [uri] = axiosInstance.post.getCall(0).args; - expect(result.data).toEqual(fakeResult()); - expect(uri).toBe('/uri'); - }); - - it('should send and get content', async () => { - const axiosInstance = stubAxiosInstance(); - axiosInstance.post.resolves(responseResult()); - const axiosHttp = new AxiosHttp(axiosInstance); - - const result = await axiosHttp.post('/uri', fakePayload()); - - const [uri, payload] = axiosInstance.post.getCall(0).args; - expect(payload).toEqual(fakePayload()); - expectForQuerying(uri, result); - }); - }); - - describe('DELETE', () => { - it('should get content', async () => { - const axiosInstance = stubAxiosInstance(); - axiosInstance.delete.resolves(responseResult()); - const axiosHttp = new AxiosHttp(axiosInstance); - - const result = await axiosHttp.delete('/uri'); - - const [uri] = axiosInstance.delete.getCall(0).args; - expect(result.data).toEqual(fakeResult()); - expect(uri).toBe('/uri'); - }); - }); -}); diff --git a/src/main/resources/generator/client/vue/test/unit/http/AxiosHttpStub.ts.mustache b/src/main/resources/generator/client/vue/test/unit/http/AxiosHttpStub.ts.mustache deleted file mode 100644 index e3cc46cbcea..00000000000 --- a/src/main/resources/generator/client/vue/test/unit/http/AxiosHttpStub.ts.mustache +++ /dev/null @@ -1,22 +0,0 @@ -import sinon, { type SinonStub } from 'sinon'; -import { AxiosHttp, type AxiosHttpResponse } from '@/http/AxiosHttp'; - -export interface AxiosHttpStub extends AxiosHttp { - get: SinonStub; - post: SinonStub; - delete: SinonStub; - put: SinonStub; -} - -export const stubAxiosHttp = (): AxiosHttpStub => - ({ - get: sinon.stub(), - post: sinon.stub(), - delete: sinon.stub(), - put: sinon.stub(), - }) as AxiosHttpStub; - -export const dataBackendResponse = (data: T): AxiosHttpResponse => - ({ - data, - }) as AxiosHttpResponse; diff --git a/src/main/resources/generator/client/vue/test/unit/http/AxiosStub.ts.mustache b/src/main/resources/generator/client/vue/test/unit/http/AxiosStub.ts.mustache deleted file mode 100644 index 6d586fac6ad..00000000000 --- a/src/main/resources/generator/client/vue/test/unit/http/AxiosStub.ts.mustache +++ /dev/null @@ -1,22 +0,0 @@ -import type { AxiosInstance, AxiosResponse } from 'axios'; -import sinon, { type SinonStub } from 'sinon'; - -export interface AxiosStubInstance extends AxiosInstance { - get: SinonStub; - put: SinonStub; - post: SinonStub; - delete: SinonStub; -} - -export const stubAxiosInstance = (): AxiosStubInstance => - ({ - get: sinon.stub(), - put: sinon.stub(), - post: sinon.stub(), - delete: sinon.stub(), - }) as AxiosStubInstance; - -export const dataAxiosResponse = (data: T): AxiosResponse => - ({ - data, - }) as AxiosResponse; diff --git a/src/main/resources/generator/client/vue/test/unit/router/Router.spec.ts.mustache b/src/main/resources/generator/client/vue/test/unit/router/Router.spec.ts.mustache deleted file mode 100644 index 67be0deaea9..00000000000 --- a/src/main/resources/generator/client/vue/test/unit/router/Router.spec.ts.mustache +++ /dev/null @@ -1,34 +0,0 @@ -import { describe, it, expect } from 'vitest'; -import { shallowMount, VueWrapper } from '@vue/test-utils'; -import { AppVue } from '@/common/primary/app'; - -import router from '@/router/router'; - -let wrapper: VueWrapper; - -const wrap = () => { - wrapper = shallowMount(AppVue, { - global: { - stubs: ['router-link', 'router-view'], - }, - router, - }); -}; - -describe('Router', () => { - it('should redirect to App by default', async () => { - wrap(); - await router.push('/'); - await wrapper.vm.$nextTick(); - - expect(wrapper.findComponent(AppVue)).toBeTruthy(); - }); - - it('should go to AppVue', async () => { - wrap(); - await router.push('/home'); - await wrapper.vm.$nextTick(); - - expect(wrapper.findComponent(AppVue)).toBeTruthy(); - }); -}); diff --git a/src/main/resources/generator/client/vue/test/unit/vue/vue-prop/ArrayComponentVue.vue b/src/main/resources/generator/client/vue/test/unit/vue/vue-prop/ArrayComponentVue.vue deleted file mode 100644 index ea0f1780152..00000000000 --- a/src/main/resources/generator/client/vue/test/unit/vue/vue-prop/ArrayComponentVue.vue +++ /dev/null @@ -1,18 +0,0 @@ - - - diff --git a/src/main/resources/generator/client/vue/test/unit/vue/vue-prop/ObjectComponentVue.vue b/src/main/resources/generator/client/vue/test/unit/vue/vue-prop/ObjectComponentVue.vue deleted file mode 100644 index ee2e1fd477a..00000000000 --- a/src/main/resources/generator/client/vue/test/unit/vue/vue-prop/ObjectComponentVue.vue +++ /dev/null @@ -1,23 +0,0 @@ - - - diff --git a/src/main/resources/generator/client/vue/test/unit/vue/vue-prop/VueProp.spec.ts b/src/main/resources/generator/client/vue/test/unit/vue/vue-prop/VueProp.spec.ts deleted file mode 100644 index 006e21b0348..00000000000 --- a/src/main/resources/generator/client/vue/test/unit/vue/vue-prop/VueProp.spec.ts +++ /dev/null @@ -1,36 +0,0 @@ -import { describe, expect } from 'vitest'; -import { shallowMount } from '@vue/test-utils'; - -import ArrayComponentVue from './ArrayComponentVue.vue'; -import ObjectComponentVue from './ObjectComponentVue.vue'; -describe('VueProp', () => { - describe('Array', () => { - it('should type', () => { - const mounted = shallowMount(ArrayComponentVue, { - props: { - strings: ['first', 'second'], - }, - }); - - expect(mounted.vm.strings).toEqual(['first', 'second']); - }); - }); - - describe('Object', () => { - it('should type', () => { - const mounted = shallowMount(ObjectComponentVue, { - props: { - customObject: { - someString: 'Some string', - someNumber: 42, - }, - }, - }); - - const customObject = mounted.vm.customObject; - - expect(customObject.someString).toBe('Some string'); - expect(customObject.someNumber).toBe(42); - }); - }); -}); diff --git a/src/main/resources/generator/client/vue/vitest.config.ts.mustache b/src/main/resources/generator/client/vue/vitest.config.ts.mustache index b94a7a671ba..6062abddd0c 100644 --- a/src/main/resources/generator/client/vue/vitest.config.ts.mustache +++ b/src/main/resources/generator/client/vue/vitest.config.ts.mustache @@ -23,11 +23,6 @@ export default defineConfig({ cache: false, include: ['src/test/webapp/unit/**/*.{test,spec}.?(c|m)[jt]s?(x)'], coverage: { - thresholds: { - perFile: true, - autoUpdate: true, - 100: true, - }, include: ['src/main/webapp/**/*.ts?(x)'], exclude: [ ...configDefaults.coverage.exclude as string[], @@ -36,13 +31,7 @@ export default defineConfig({ ], provider: 'istanbul', reportsDirectory: '{{projectBuildDirectory}}/test-results/', - reporter: ['html', 'json-summary', 'text', 'text-summary', 'lcov', 'clover'], - watermarks: { - statements: [100, 100], - branches: [100, 100], - functions: [100, 100], - lines: [100, 100], - }, + reporter: ['html', 'json-summary', 'text', 'text-summary', 'lcov', 'clover'] }, }, }); diff --git a/src/main/resources/generator/client/vue/webapp/app/AppVue.vue.mustache b/src/main/resources/generator/client/vue/webapp/app/AppVue.vue.mustache new file mode 100644 index 00000000000..ca8180f7a93 --- /dev/null +++ b/src/main/resources/generator/client/vue/webapp/app/AppVue.vue.mustache @@ -0,0 +1,9 @@ + + + diff --git a/src/main/resources/generator/client/vue/webapp/app/common/domain/Logger.ts.mustache b/src/main/resources/generator/client/vue/webapp/app/common/domain/Logger.ts.mustache deleted file mode 100644 index b28a8d27a1e..00000000000 --- a/src/main/resources/generator/client/vue/webapp/app/common/domain/Logger.ts.mustache +++ /dev/null @@ -1,5 +0,0 @@ -import type { Message } from '@/common/domain/Message'; - -export interface Logger { - error(message: Message, error: Error): void; -} diff --git a/src/main/resources/generator/client/vue/webapp/app/common/domain/Message.ts.mustache b/src/main/resources/generator/client/vue/webapp/app/common/domain/Message.ts.mustache deleted file mode 100644 index 94065aa545f..00000000000 --- a/src/main/resources/generator/client/vue/webapp/app/common/domain/Message.ts.mustache +++ /dev/null @@ -1 +0,0 @@ -export type Message = string; diff --git a/src/main/resources/generator/client/vue/webapp/app/common/primary/app/App.component.ts.mustache b/src/main/resources/generator/client/vue/webapp/app/common/primary/app/App.component.ts.mustache deleted file mode 100644 index 22dbf49dc4f..00000000000 --- a/src/main/resources/generator/client/vue/webapp/app/common/primary/app/App.component.ts.mustache +++ /dev/null @@ -1,3 +0,0 @@ -export default { - name: 'AppVue', -}; diff --git a/src/main/resources/generator/client/vue/webapp/app/common/primary/app/App.html.mustache b/src/main/resources/generator/client/vue/webapp/app/common/primary/app/App.html.mustache deleted file mode 100644 index 4940eb76708..00000000000 --- a/src/main/resources/generator/client/vue/webapp/app/common/primary/app/App.html.mustache +++ /dev/null @@ -1 +0,0 @@ - diff --git a/src/main/resources/generator/client/vue/webapp/app/common/primary/app/AppVue.vue.mustache b/src/main/resources/generator/client/vue/webapp/app/common/primary/app/AppVue.vue.mustache deleted file mode 100644 index cbb40f7d348..00000000000 --- a/src/main/resources/generator/client/vue/webapp/app/common/primary/app/AppVue.vue.mustache +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/src/main/resources/generator/client/vue/webapp/app/common/primary/app/index.ts.mustache b/src/main/resources/generator/client/vue/webapp/app/common/primary/app/index.ts.mustache deleted file mode 100644 index 3a80e9ac5ca..00000000000 --- a/src/main/resources/generator/client/vue/webapp/app/common/primary/app/index.ts.mustache +++ /dev/null @@ -1,4 +0,0 @@ -import AppComponent from './App.component'; -import AppVue from './AppVue.vue'; - -export { AppComponent, AppVue }; diff --git a/src/main/resources/generator/client/vue/webapp/app/common/primary/homepage/Homepage.component.ts.mustache b/src/main/resources/generator/client/vue/webapp/app/common/primary/homepage/Homepage.component.ts.mustache deleted file mode 100644 index 6cba84b7073..00000000000 --- a/src/main/resources/generator/client/vue/webapp/app/common/primary/homepage/Homepage.component.ts.mustache +++ /dev/null @@ -1,8 +0,0 @@ -export default { - name: 'HomepageVue', - data: () => { - return { - appName: '{{baseName}}', - }; - }, -}; diff --git a/src/main/resources/generator/client/vue/webapp/app/common/primary/homepage/Homepage.html.mustache b/src/main/resources/generator/client/vue/webapp/app/common/primary/homepage/Homepage.html.mustache deleted file mode 100644 index bbf89ea7c45..00000000000 --- a/src/main/resources/generator/client/vue/webapp/app/common/primary/homepage/Homepage.html.mustache +++ /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/main/resources/generator/client/vue/webapp/app/common/primary/homepage/HomepageVue.vue.mustache b/src/main/resources/generator/client/vue/webapp/app/common/primary/homepage/HomepageVue.vue.mustache deleted file mode 100644 index 778c0192d3c..00000000000 --- a/src/main/resources/generator/client/vue/webapp/app/common/primary/homepage/HomepageVue.vue.mustache +++ /dev/null @@ -1,29 +0,0 @@ - - - - - diff --git a/src/main/resources/generator/client/vue/webapp/app/common/primary/homepage/index.ts.mustache b/src/main/resources/generator/client/vue/webapp/app/common/primary/homepage/index.ts.mustache deleted file mode 100644 index c485bde1e6c..00000000000 --- a/src/main/resources/generator/client/vue/webapp/app/common/primary/homepage/index.ts.mustache +++ /dev/null @@ -1,4 +0,0 @@ -import HomepageComponent from './Homepage.component'; -import HomepageVue from './HomepageVue.vue'; - -export { HomepageComponent, HomepageVue }; diff --git a/src/main/resources/generator/client/vue/webapp/app/common/secondary/ConsoleLogger.ts.mustache b/src/main/resources/generator/client/vue/webapp/app/common/secondary/ConsoleLogger.ts.mustache deleted file mode 100644 index 8839fefa425..00000000000 --- a/src/main/resources/generator/client/vue/webapp/app/common/secondary/ConsoleLogger.ts.mustache +++ /dev/null @@ -1,10 +0,0 @@ -import type { Logger } from '@/common/domain/Logger'; -import type { Message } from '@/common/domain/Message'; - -export default class ConsoleLogger implements Logger { - constructor(private readonly logger: Console) {} - - error(message: Message, error: Error) { - this.logger.error(`${message}\n`, error); - } -} diff --git a/src/main/resources/generator/client/vue/webapp/app/home/application/HomeRouter.ts.mustache b/src/main/resources/generator/client/vue/webapp/app/home/application/HomeRouter.ts.mustache new file mode 100644 index 00000000000..9b3d4249ac4 --- /dev/null +++ b/src/main/resources/generator/client/vue/webapp/app/home/application/HomeRouter.ts.mustache @@ -0,0 +1,14 @@ +import type { RouteRecordRaw } from 'vue-router'; +import HomepageVue from '@/home/infrastructure/primary/HomepageVue.vue'; + +export const homeRoutes = (): RouteRecordRaw[] => [ + { + path: '/', + redirect: { name: 'Homepage' }, + }, + { + path: '/home', + name: 'Homepage', + component: HomepageVue, + }, +]; diff --git a/src/main/resources/generator/client/vue/webapp/app/home/infrastructure/primary/HomepageVue.vue.mustache b/src/main/resources/generator/client/vue/webapp/app/home/infrastructure/primary/HomepageVue.vue.mustache new file mode 100644 index 00000000000..fa7fce3014d --- /dev/null +++ b/src/main/resources/generator/client/vue/webapp/app/home/infrastructure/primary/HomepageVue.vue.mustache @@ -0,0 +1,57 @@ + + + + + diff --git a/src/main/resources/generator/client/vue/webapp/app/injections.ts.mustache b/src/main/resources/generator/client/vue/webapp/app/injections.ts.mustache new file mode 100644 index 00000000000..16b9afd086d --- /dev/null +++ b/src/main/resources/generator/client/vue/webapp/app/injections.ts.mustache @@ -0,0 +1,5 @@ +import { piqureWrapper } from 'piqure'; + +const { provide, inject } = piqureWrapper(window, 'piqure'); + +export { provide, inject }; diff --git a/src/main/resources/generator/client/vue/webapp/app/main.ts.mustache b/src/main/resources/generator/client/vue/webapp/app/main.ts.mustache index 1e6357e164d..1ab21867124 100644 --- a/src/main/resources/generator/client/vue/webapp/app/main.ts.mustache +++ b/src/main/resources/generator/client/vue/webapp/app/main.ts.mustache @@ -1,6 +1,6 @@ import { createApp } from 'vue'; -import { AppVue } from './common/primary/app'; -import router from './router/router'; +import AppVue from './AppVue.vue'; +import router from './router'; // jhipster-needle-main-ts-import const app = createApp(AppVue); diff --git a/src/main/resources/generator/client/vue/webapp/app/router.ts.mustache b/src/main/resources/generator/client/vue/webapp/app/router.ts.mustache new file mode 100644 index 00000000000..37d248cd396 --- /dev/null +++ b/src/main/resources/generator/client/vue/webapp/app/router.ts.mustache @@ -0,0 +1,11 @@ +import { createRouter, createWebHistory } from 'vue-router'; +import { homeRoutes } from '@/home/application/HomeRouter'; + +const routes = [...homeRoutes()]; + +const router = createRouter({ + history: createWebHistory(), + routes, +}); + +export default router; diff --git a/src/main/resources/generator/client/vue/webapp/app/router/router.ts.mustache b/src/main/resources/generator/client/vue/webapp/app/router/router.ts.mustache deleted file mode 100644 index c84e7e8fb03..00000000000 --- a/src/main/resources/generator/client/vue/webapp/app/router/router.ts.mustache +++ /dev/null @@ -1,21 +0,0 @@ -import { HomepageVue } from '@/common/primary/homepage'; -import { createRouter, createWebHistory } from 'vue-router'; - -const routes = [ - { - path: '/', - redirect: { name: 'Homepage' }, - }, - { - path: '/home', - name: 'Homepage', - component: HomepageVue, - }, -]; - -const router = createRouter({ - history: createWebHistory(), - routes, -}); - -export default router; diff --git a/src/main/resources/generator/client/vue/webapp/app/http/AxiosHttp.ts.mustache b/src/main/resources/generator/client/vue/webapp/app/shared/http/infrastructure/secondary/AxiosHttp.ts.mustache similarity index 100% rename from src/main/resources/generator/client/vue/webapp/app/http/AxiosHttp.ts.mustache rename to src/main/resources/generator/client/vue/webapp/app/shared/http/infrastructure/secondary/AxiosHttp.ts.mustache diff --git a/src/main/resources/generator/client/vue/webapp/app/vue/VueProp.ts b/src/main/resources/generator/client/vue/webapp/app/vue/VueProp.ts deleted file mode 100644 index 796e322bbd9..00000000000 --- a/src/main/resources/generator/client/vue/webapp/app/vue/VueProp.ts +++ /dev/null @@ -1,4 +0,0 @@ -import type { PropType } from 'vue'; - -export const objectType = () => Object as PropType; -export const arrayType = () => Array as PropType; diff --git a/src/main/resources/generator/dependencies/vue/package.json b/src/main/resources/generator/dependencies/vue/package.json index 471be4b74b5..6e9fb760d24 100644 --- a/src/main/resources/generator/dependencies/vue/package.json +++ b/src/main/resources/generator/dependencies/vue/package.json @@ -7,6 +7,7 @@ "axios": "1.7.7", "pinia": "2.2.2", "pinia-plugin-persistedstate": "4.0.0", + "piqure": "2.0.0", "vue": "3.5.3", "vue-router": "4.4.3" }, diff --git a/src/test/features/client/vue.feature b/src/test/features/client/vue.feature index 04e355e8f97..3092bb9150d 100644 --- a/src/test/features/client/vue.feature +++ b/src/test/features/client/vue.feature @@ -5,8 +5,8 @@ Feature: Vue.js modules | init | | prettier | | vue-core | - Then I should have files in "src/main/webapp/app/http" - | AxiosHttp.ts | + Then I should have files in "src/main/webapp/app" + | AppVue.vue | Scenario: Should apply pinia module Given I apply "vue-core" module to default project with package json without parameters diff --git a/src/test/java/tech/jhipster/lite/generator/client/vue/core/domain/VueModulesFactoryTest.java b/src/test/java/tech/jhipster/lite/generator/client/vue/core/domain/VueModulesFactoryTest.java index 1aba9d60dff..42122ebf80e 100644 --- a/src/test/java/tech/jhipster/lite/generator/client/vue/core/domain/VueModulesFactoryTest.java +++ b/src/test/java/tech/jhipster/lite/generator/client/vue/core/domain/VueModulesFactoryTest.java @@ -57,6 +57,7 @@ void shouldCreateVueModule() { .containing(nodeScript("watch", "npm-run-all --parallel watch:*")) .containing(nodeScript("watch:tsc", "vue-tsc -p tsconfig.build.json --noEmit --watch")) .containing(nodeScript("watch:test", "vitest --")) + .containing(nodeDependency("piqure")) .containing(nodeScript("lint", "eslint .")) .containing(nodeScript("preview", "vite preview")) .containing(nodeScript("start", "vite")) @@ -75,33 +76,12 @@ void shouldCreateVueModule() { ) .and() .hasPrefixedFiles("", ".npmrc", "eslint.config.js", "tsconfig.json", "tsconfig.build.json", "vite.config.ts", "vitest.config.ts") - .hasFiles("src/main/webapp/app/http/AxiosHttp.ts") - .hasPrefixedFiles("src/test/webapp/unit/http", "AxiosHttp.spec.ts", "AxiosHttpStub.ts", "AxiosStub.ts") + .hasFiles("src/main/webapp/app/shared/http/infrastructure/secondary/AxiosHttp.ts") .hasFiles("src/main/webapp/index.html") - .hasPrefixedFiles("src/main/webapp/app", "env.d.ts") - .hasPrefixedFiles("src/main/webapp/app/common/primary/app", "App.component.ts", "index.ts", "App.html", "AppVue.vue") + .hasPrefixedFiles("src/main/webapp/app", "env.d.ts", "AppVue.vue", "injections.ts", "router.ts", "main.ts") + .hasPrefixedFiles("src/main/webapp/app/home","infrastructure/primary/HomepageVue.vue", "application/HomeRouter.ts") .hasPrefixedFiles("src/main/webapp/content/images", "JHipster-Lite-neon-green.png", "VueLogo.png") - .hasFiles("src/test/webapp/unit/common/primary/app/App.spec.ts") - .hasPrefixedFiles("src/main/webapp/app/common/primary/homepage", "Homepage.component.ts", "Homepage.html","HomepageVue.vue", "index.ts") - .hasFile("src/main/webapp/app/common/primary/homepage/Homepage.component.ts") - .containing("appName: 'jhiTest'") - .and() - .hasFiles("src/test/webapp/unit/common/primary/homepage/Homepage.spec.ts") - .hasFiles("src/main/webapp/app/router/router.ts", "src/test/webapp/unit/router/Router.spec.ts") - .hasFile("src/main/webapp/app/main.ts") - .containing("import router from './router/router';") - .containing("app.use(router);") - .and() - .hasPrefixedFiles("src/main/webapp/app/common/domain", "Logger.ts", "Message.ts") - .hasFiles("src/main/webapp/app/common/secondary/ConsoleLogger.ts") - .hasFiles("src/test/webapp/unit/common/domain/Logger.fixture.ts") - .hasFiles("src/test/webapp/unit/common/secondary/ConsoleLogger.spec.ts") - .hasFiles("src/main/webapp/app/vue/VueProp.ts") - .hasFiles( - "src/test/webapp/unit/vue/vue-prop/ArrayComponentVue.vue", - "src/test/webapp/unit/vue/vue-prop/ObjectComponentVue.vue", - "src/test/webapp/unit/vue/vue-prop/VueProp.spec.ts" - ); + .hasFiles("src/test/webapp/unit/Dummy.spec.ts"); //@formatter:on }