From 722b90e428e4414a04aec579f0185c2015843bec Mon Sep 17 00:00:00 2001 From: Quentin France Date: Mon, 7 Mar 2022 18:39:35 +0100 Subject: [PATCH] Add front JavaBase and SpringBoot buttons --- .../app/generator/domain/ProjectService.ts | 2 + .../generator/primary/Generator.component.ts | 18 +++++- .../app/generator/primary/Generator.html | 2 + .../generator/secondary/ProjectRepository.ts | 10 ++++ .../spec/generator/domain/Project.fixture.ts | 6 ++ .../domain/ProjectService.fixture.ts | 4 ++ .../spec/generator/primary/Generator.spec.ts | 55 ++++++++++++++++++- .../secondary/ProjectRepository.spec.ts | 33 ++++++++++- .../generator/secondary/RestProject.spec.ts | 5 +- 9 files changed, 127 insertions(+), 8 deletions(-) create mode 100644 src/test/javascript/spec/generator/domain/Project.fixture.ts diff --git a/src/main/webapp/app/generator/domain/ProjectService.ts b/src/main/webapp/app/generator/domain/ProjectService.ts index 83a1989c1e5..4871b2f73c4 100644 --- a/src/main/webapp/app/generator/domain/ProjectService.ts +++ b/src/main/webapp/app/generator/domain/ProjectService.ts @@ -3,4 +3,6 @@ import { Project } from '@/generator/domain/Project'; export interface ProjectService { init(project: Project): Promise; addMaven(project: Project): Promise; + addJavaBase(project: Project): Promise; + addSpringBoot(project: Project): Promise; } diff --git a/src/main/webapp/app/generator/primary/Generator.component.ts b/src/main/webapp/app/generator/primary/Generator.component.ts index 52c6833d6bc..6e916a14033 100644 --- a/src/main/webapp/app/generator/primary/Generator.component.ts +++ b/src/main/webapp/app/generator/primary/Generator.component.ts @@ -10,22 +10,36 @@ export default defineComponent({ const project = ref({ folder: '' }); - const initProject = async () => { + const initProject = async (): Promise => { if (project.value.folder !== '') { await projectService.init(project.value); } }; - const addMaven = async () => { + const addMaven = async (): Promise => { if (project.value.folder !== '') { await projectService.addMaven(project.value); } }; + const addJavaBase = async (): Promise => { + if (project.value.folder !== '') { + await projectService.addJavaBase(project.value); + } + }; + + const addSpringBoot = async (): Promise => { + if (project.value.folder !== '') { + await projectService.addSpringBoot(project.value); + } + }; + return { project, initProject, addMaven, + addJavaBase, + addSpringBoot, }; }, }); diff --git a/src/main/webapp/app/generator/primary/Generator.html b/src/main/webapp/app/generator/primary/Generator.html index 6166d5d0a9a..21e20b5c0f5 100644 --- a/src/main/webapp/app/generator/primary/Generator.html +++ b/src/main/webapp/app/generator/primary/Generator.html @@ -2,3 +2,5 @@ + + diff --git a/src/main/webapp/app/generator/secondary/ProjectRepository.ts b/src/main/webapp/app/generator/secondary/ProjectRepository.ts index 5b40bd7b1f7..d8811c3d951 100644 --- a/src/main/webapp/app/generator/secondary/ProjectRepository.ts +++ b/src/main/webapp/app/generator/secondary/ProjectRepository.ts @@ -15,4 +15,14 @@ export default class ProjectRepository implements ProjectService { const restProject: RestProject = toRestProject(project); await this.axiosHttp.post('api/build-tools/maven', restProject); } + + async addJavaBase(project: Project): Promise { + const restProject: RestProject = toRestProject(project); + await this.axiosHttp.post('/api/servers/java/base', restProject); + } + + async addSpringBoot(project: Project): Promise { + const restProject: RestProject = toRestProject(project); + await this.axiosHttp.post('/api/servers/spring-boot', restProject); + } } diff --git a/src/test/javascript/spec/generator/domain/Project.fixture.ts b/src/test/javascript/spec/generator/domain/Project.fixture.ts new file mode 100644 index 00000000000..7d31db48d78 --- /dev/null +++ b/src/test/javascript/spec/generator/domain/Project.fixture.ts @@ -0,0 +1,6 @@ +import { Project } from '@/generator/domain/Project'; + +export const createProject = (project?: Partial): Project => ({ + folder: 'folder/path', + ...project, +}); diff --git a/src/test/javascript/spec/generator/domain/ProjectService.fixture.ts b/src/test/javascript/spec/generator/domain/ProjectService.fixture.ts index e6a28c339aa..5736f71e974 100644 --- a/src/test/javascript/spec/generator/domain/ProjectService.fixture.ts +++ b/src/test/javascript/spec/generator/domain/ProjectService.fixture.ts @@ -4,9 +4,13 @@ import sinon, { SinonStub } from 'sinon'; export interface ProjectServiceFixture extends ProjectService { init: SinonStub; addMaven: SinonStub; + addJavaBase: SinonStub; + addSpringBoot: SinonStub; } export const stubProjectService = (): ProjectServiceFixture => ({ init: sinon.stub(), addMaven: sinon.stub(), + addJavaBase: sinon.stub(), + addSpringBoot: sinon.stub(), }); diff --git a/src/test/javascript/spec/generator/primary/Generator.spec.ts b/src/test/javascript/spec/generator/primary/Generator.spec.ts index e8309934b69..6a7133871f1 100644 --- a/src/test/javascript/spec/generator/primary/Generator.spec.ts +++ b/src/test/javascript/spec/generator/primary/Generator.spec.ts @@ -3,6 +3,7 @@ import { GeneratorVue } from '@/generator/primary'; import { mount, VueWrapper } from '@vue/test-utils'; import { Project } from '@/generator/domain/Project'; import { stubProjectService } from '../domain/ProjectService.fixture'; +import { createProject } from '../domain/Project.fixture'; let wrapper: VueWrapper; @@ -46,7 +47,7 @@ describe('Generator', () => { const projectService = stubProjectService(); projectService.init.resolves({}); await wrap({ projectService }); - const project: Project = { folder: 'project/path' }; + const project: Project = createProject({ folder: 'project/path' }); const projectPathInput = wrapper.find('#path'); await projectPathInput.setValue(project.folder); @@ -71,7 +72,7 @@ describe('Generator', () => { const projectService = stubProjectService(); projectService.addMaven.resolves({}); await wrap({ projectService }); - const project: Project = { folder: 'project/path' }; + const project: Project = createProject({ folder: 'project/path' }); const projectPathInput = wrapper.find('#path'); await projectPathInput.setValue(project.folder); @@ -80,4 +81,54 @@ describe('Generator', () => { expect(projectService.addMaven.called).toBe(true); }); + + it('should not add JavaBase when project path is not filled', async () => { + const projectService = stubProjectService(); + projectService.addJavaBase.resolves({}); + await wrap({ projectService }); + + const mavenButton = wrapper.find('#javabase'); + await mavenButton.trigger('click'); + + expect(projectService.addJavaBase.called).toBe(false); + }); + + it('should add JavaBase when project path is filled', async () => { + const projectService = stubProjectService(); + projectService.addJavaBase.resolves({}); + await wrap({ projectService }); + const project: Project = createProject({ folder: 'project/path' }); + + const projectPathInput = wrapper.find('#path'); + await projectPathInput.setValue(project.folder); + const mavenButton = wrapper.find('#javabase'); + await mavenButton.trigger('click'); + + expect(projectService.addJavaBase.called).toBe(true); + }); + + it('should not add SpringBoot when project path is not filled', async () => { + const projectService = stubProjectService(); + projectService.addSpringBoot.resolves({}); + await wrap({ projectService }); + + const mavenButton = wrapper.find('#springboot'); + await mavenButton.trigger('click'); + + expect(projectService.addSpringBoot.called).toBe(false); + }); + + it('should add SpringBoot when project path is filled', async () => { + const projectService = stubProjectService(); + projectService.addSpringBoot.resolves({}); + await wrap({ projectService }); + const project: Project = createProject({ folder: 'project/path' }); + + const projectPathInput = wrapper.find('#path'); + await projectPathInput.setValue(project.folder); + const mavenButton = wrapper.find('#springboot'); + await mavenButton.trigger('click'); + + expect(projectService.addSpringBoot.called).toBe(true); + }); }); diff --git a/src/test/javascript/spec/generator/secondary/ProjectRepository.spec.ts b/src/test/javascript/spec/generator/secondary/ProjectRepository.spec.ts index 812ea8ebe8a..b3d0412fa1d 100644 --- a/src/test/javascript/spec/generator/secondary/ProjectRepository.spec.ts +++ b/src/test/javascript/spec/generator/secondary/ProjectRepository.spec.ts @@ -2,13 +2,14 @@ import { Project } from '@/generator/domain/Project'; import ProjectRepository from '@/generator/secondary/ProjectRepository'; import { stubAxiosHttp } from '../../http/AxiosHttpStub'; import { RestProject, toRestProject } from '@/generator/secondary/RestProject'; +import { createProject } from '../domain/Project.fixture'; describe('ProjectRepository', () => { it('should init project', () => { const axiosHttpStub = stubAxiosHttp(); axiosHttpStub.post.resolves(); const projectRepository = new ProjectRepository(axiosHttpStub); - const project: Project = { folder: 'folder/path' }; + const project: Project = createProject({ folder: 'folder/path' }); projectRepository.init(project); @@ -22,7 +23,7 @@ describe('ProjectRepository', () => { const axiosHttpStub = stubAxiosHttp(); axiosHttpStub.post.resolves(); const projectRepository = new ProjectRepository(axiosHttpStub); - const project: Project = { folder: 'folder/path' }; + const project: Project = createProject({ folder: 'folder/path' }); projectRepository.addMaven(project); @@ -31,4 +32,32 @@ describe('ProjectRepository', () => { expect(uri).toBe('api/build-tools/maven'); expect(payload).toEqual(expectedRestProject); }); + + it('should add JavaBase', () => { + const axiosHttpStub = stubAxiosHttp(); + axiosHttpStub.post.resolves(); + const projectRepository = new ProjectRepository(axiosHttpStub); + const project: Project = createProject({ folder: 'folder/path' }); + + projectRepository.addJavaBase(project); + + const expectedRestProject: RestProject = toRestProject(project); + const [uri, payload] = axiosHttpStub.post.getCall(0).args; + expect(uri).toBe('/api/servers/java/base'); + expect(payload).toEqual(expectedRestProject); + }); + + it('should add SpringBoot', () => { + const axiosHttpStub = stubAxiosHttp(); + axiosHttpStub.post.resolves(); + const projectRepository = new ProjectRepository(axiosHttpStub); + const project: Project = createProject({ folder: 'folder/path' }); + + projectRepository.addSpringBoot(project); + + const expectedRestProject: RestProject = toRestProject(project); + const [uri, payload] = axiosHttpStub.post.getCall(0).args; + expect(uri).toBe('/api/servers/spring-boot'); + expect(payload).toEqual(expectedRestProject); + }); }); diff --git a/src/test/javascript/spec/generator/secondary/RestProject.spec.ts b/src/test/javascript/spec/generator/secondary/RestProject.spec.ts index cd1cd4983ec..d104ac47d41 100644 --- a/src/test/javascript/spec/generator/secondary/RestProject.spec.ts +++ b/src/test/javascript/spec/generator/secondary/RestProject.spec.ts @@ -1,11 +1,12 @@ import { RestProject, toRestProject } from '@/generator/secondary/RestProject'; import { Project } from '@/generator/domain/Project'; +import { createProject } from '../domain/Project.fixture'; describe('RestProject', () => { it('should convert to Project', () => { - const project: Project = { + const project: Project = createProject({ folder: 'folder', - }; + }); expect(toRestProject(project)).toEqual({ folder: 'folder',