Skip to content

Commit

Permalink
Merge pull request #953 from Franceq34/add-front-java-spring-boot-but…
Browse files Browse the repository at this point in the history
…tons

Add front JavaBase and SpringBoot buttons
  • Loading branch information
pascalgrimaud authored Mar 8, 2022
2 parents 008ed1b + dd00d7b commit 9258e68
Show file tree
Hide file tree
Showing 9 changed files with 131 additions and 12 deletions.
2 changes: 2 additions & 0 deletions src/main/webapp/app/generator/domain/ProjectService.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,4 +3,6 @@ import { Project } from '@/generator/domain/Project';
export interface ProjectService {
init(project: Project): Promise<void>;
addMaven(project: Project): Promise<void>;
addJavaBase(project: Project): Promise<void>;
addSpringBoot(project: Project): Promise<void>;
}
18 changes: 16 additions & 2 deletions src/main/webapp/app/generator/primary/Generator.component.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,22 +10,36 @@ export default defineComponent({

const project = ref<Project>({ folder: '' });

const initProject = async () => {
const initProject = async (): Promise<void> => {
if (project.value.folder !== '') {
await projectService.init(project.value);
}
};

const addMaven = async () => {
const addMaven = async (): Promise<void> => {
if (project.value.folder !== '') {
await projectService.addMaven(project.value);
}
};

const addJavaBase = async (): Promise<void> => {
if (project.value.folder !== '') {
await projectService.addJavaBase(project.value);
}
};

const addSpringBoot = async (): Promise<void> => {
if (project.value.folder !== '') {
await projectService.addSpringBoot(project.value);
}
};

return {
project,
initProject,
addMaven,
addJavaBase,
addSpringBoot,
};
},
});
2 changes: 2 additions & 0 deletions src/main/webapp/app/generator/primary/Generator.html
Original file line number Diff line number Diff line change
Expand Up @@ -2,3 +2,5 @@
<input id="path" type="text" v-model="project.folder" />
<button id="init" @click="initProject">Init</button>
<button id="maven" @click="addMaven">Maven</button>
<button id="javabase" @click="addJavaBase">JavaBase</button>
<button id="springboot" @click="addSpringBoot">SpringBoot</button>
10 changes: 10 additions & 0 deletions src/main/webapp/app/generator/secondary/ProjectRepository.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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<void> {
const restProject: RestProject = toRestProject(project);
await this.axiosHttp.post('/api/servers/java/base', restProject);
}

async addSpringBoot(project: Project): Promise<void> {
const restProject: RestProject = toRestProject(project);
await this.axiosHttp.post('/api/servers/spring-boot', restProject);
}
}
6 changes: 6 additions & 0 deletions src/test/javascript/spec/generator/domain/Project.fixture.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
import { Project } from '@/generator/domain/Project';

export const createProject = (project?: Partial<Project>): Project => ({
folder: 'folder/path',
...project,
});
Original file line number Diff line number Diff line change
Expand Up @@ -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(),
});
63 changes: 57 additions & 6 deletions src/test/javascript/spec/generator/primary/Generator.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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;

Expand Down Expand Up @@ -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);
Expand All @@ -61,8 +62,8 @@ describe('Generator', () => {
projectService.addMaven.resolves({});
await wrap({ projectService });

const mavenButton = wrapper.find('#maven');
await mavenButton.trigger('click');
const button = wrapper.find('#maven');
await button.trigger('click');

expect(projectService.addMaven.called).toBe(false);
});
Expand All @@ -71,13 +72,63 @@ 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);
const mavenButton = wrapper.find('#maven');
await mavenButton.trigger('click');
const button = wrapper.find('#maven');
await button.trigger('click');

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 button = wrapper.find('#javabase');
await button.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 button = wrapper.find('#javabase');
await button.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 button = wrapper.find('#springboot');
await button.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 button = wrapper.find('#springboot');
await button.trigger('click');

expect(projectService.addSpringBoot.called).toBe(true);
});
});
Original file line number Diff line number Diff line change
Expand Up @@ -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);

Expand All @@ -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);

Expand All @@ -31,4 +32,32 @@ describe('ProjectRepository', () => {
expect(uri).toBe('api/build-tools/maven');
expect(payload).toEqual<RestProject>(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<RestProject>(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<RestProject>(expectedRestProject);
});
});
Original file line number Diff line number Diff line change
@@ -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<RestProject>({
folder: 'folder',
Expand Down

0 comments on commit 9258e68

Please sign in to comment.