diff --git a/src/main/webapp/app/springboot/primary/Generator.component.ts b/src/main/webapp/app/springboot/primary/Generator.component.ts index 34f4a65823e..cbf9fd43172 100644 --- a/src/main/webapp/app/springboot/primary/Generator.component.ts +++ b/src/main/webapp/app/springboot/primary/Generator.component.ts @@ -92,6 +92,38 @@ export default defineComponent({ } }; + const addPostgreSQL = async (): Promise => { + if (project.value.folder !== '') { + await springBootService + .addPostgres(toProject(project.value)) + .catch(error => logger.error('Adding SpringBoot Database PostgreSQL to project failed', error)); + } + }; + + const addMySQL = async (): Promise => { + if (project.value.folder !== '') { + await springBootService + .addMySQL(toProject(project.value)) + .catch(error => logger.error('Adding SpringBoot Database MySQL to project failed', error)); + } + }; + + const addMariaDB = async (): Promise => { + if (project.value.folder !== '') { + await springBootService + .addMariaDB(toProject(project.value)) + .catch(error => logger.error('Adding SpringBoot Database MariaDB to project failed', error)); + } + }; + + const addMongoDB = async (): Promise => { + if (project.value.folder !== '') { + await springBootService + .addMongoDB(toProject(project.value)) + .catch(error => logger.error('Adding SpringBoot Database MongoDB to project failed', error)); + } + }; + const addAngular = async (): Promise => { if (project.value.folder !== '') { if (isAngularWithStyle.value) { @@ -169,6 +201,10 @@ export default defineComponent({ addSpringBootWebfluxNetty, addSpringBootSecurityJWT, addSpringBootSecurityJWTBasicAuth, + addPostgreSQL, + addMySQL, + addMariaDB, + addMongoDB, addAngular, addReact, addVue, diff --git a/src/main/webapp/app/springboot/primary/Generator.vue b/src/main/webapp/app/springboot/primary/Generator.vue index c6d2f29ac9d..bbd3db0b0a7 100644 --- a/src/main/webapp/app/springboot/primary/Generator.vue +++ b/src/main/webapp/app/springboot/primary/Generator.vue @@ -612,6 +612,43 @@ > Security JWT Basic Auth +
+
+ + + + + + +
{ cy.get(generatorSelector('add-spring-boot-webflux-netty-button')).contains('Spring Webflux Netty'); cy.get(generatorSelector('add-spring-boot-jwt-button')).contains('Security JWT'); cy.get(generatorSelector('add-spring-boot-jwt-basic-auth-button')).contains('Security JWT Basic Auth'); + + cy.get(generatorSelector('add-spring-boot-database-postgresql-button')).contains('PostgreSQL'); + cy.get(generatorSelector('add-spring-boot-database-mysql-button')).contains('MySQL'); + cy.get(generatorSelector('add-spring-boot-database-mariadb-button')).contains('MariaDB'); + cy.get(generatorSelector('add-spring-boot-database-mongodb-button')).contains('MongoDB'); }); it('should display angular', () => { diff --git a/src/test/javascript/spec/springboot/primary/Generator.spec.ts b/src/test/javascript/spec/springboot/primary/Generator.spec.ts index 753daba9c6d..8a08e57fbf9 100644 --- a/src/test/javascript/spec/springboot/primary/Generator.spec.ts +++ b/src/test/javascript/spec/springboot/primary/Generator.spec.ts @@ -510,6 +510,228 @@ describe('Generator', () => { expect(message).toBe('Adding SpringBoot Security JWT Basic Auth to project failed'); }); + describe('Databases', () => { + it('should not add SpringBoot Database PostgreSQL when project path is not filled', async () => { + const springBootService = stubSpringBootService(); + springBootService.addPostgres.resolves({}); + await wrap({ springBootService }); + await selectSection('springboot'); + + const button = wrapper.find('#springboot-database-postgresql'); + await button.trigger('click'); + + expect(springBootService.addPostgres.called).toBe(false); + }); + + it('should add SpringBoot Database PostgreSQL when project path is filled', async () => { + const springBootService = stubSpringBootService(); + springBootService.addPostgres.resolves({}); + await wrap({ springBootService }); + const projectToUpdate: ProjectToUpdate = createProjectToUpdate({ + folder: 'project/path', + baseName: 'beer', + projectName: 'Beer Project', + packageName: 'tech.jhipster.beer', + serverPort: '8080', + }); + await fillFullForm(projectToUpdate); + await selectSection('springboot'); + + const button = wrapper.find('#springboot-database-postgresql'); + await button.trigger('click'); + + const args = springBootService.addPostgres.getCall(0).args[0]; + expect(args).toEqual({ + baseName: 'beer', + folder: 'project/path', + projectName: 'Beer Project', + packageName: 'tech.jhipster.beer', + serverPort: 8080, + }); + }); + + it('should handle error on adding SpringBoot Database PostgreSQL failure', async () => { + const logger = stubLogger(); + const springBootService = stubSpringBootService(); + springBootService.addPostgres.rejects({}); + await wrap({ springBootService, logger }); + const projectToUpdate: ProjectToUpdate = createProjectToUpdate(); + await fillFullForm(projectToUpdate); + await selectSection('springboot'); + + const initButton = wrapper.find('#springboot-database-postgresql'); + await initButton.trigger('click'); + + const [message] = logger.error.getCall(0).args; + expect(message).toBe('Adding SpringBoot Database PostgreSQL to project failed'); + }); + + it('should not add SpringBoot Database MySQL when project path is not filled', async () => { + const springBootService = stubSpringBootService(); + springBootService.addMySQL.resolves({}); + await wrap({ springBootService }); + await selectSection('springboot'); + + const button = wrapper.find('#springboot-database-mysql'); + await button.trigger('click'); + + expect(springBootService.addMySQL.called).toBe(false); + }); + + it('should add SpringBoot Database MySQL when project path is filled', async () => { + const springBootService = stubSpringBootService(); + springBootService.addMySQL.resolves({}); + await wrap({ springBootService }); + const projectToUpdate: ProjectToUpdate = createProjectToUpdate({ + folder: 'project/path', + baseName: 'beer', + projectName: 'Beer Project', + packageName: 'tech.jhipster.beer', + serverPort: '8080', + }); + await fillFullForm(projectToUpdate); + await selectSection('springboot'); + + const button = wrapper.find('#springboot-database-mysql'); + await button.trigger('click'); + + const args = springBootService.addMySQL.getCall(0).args[0]; + expect(args).toEqual({ + baseName: 'beer', + folder: 'project/path', + projectName: 'Beer Project', + packageName: 'tech.jhipster.beer', + serverPort: 8080, + }); + }); + + it('should handle error on adding SpringBoot Database MySQL failure', async () => { + const logger = stubLogger(); + const springBootService = stubSpringBootService(); + springBootService.addMySQL.rejects({}); + await wrap({ springBootService, logger }); + const projectToUpdate: ProjectToUpdate = createProjectToUpdate(); + await fillFullForm(projectToUpdate); + await selectSection('springboot'); + + const initButton = wrapper.find('#springboot-database-mysql'); + await initButton.trigger('click'); + + const [message] = logger.error.getCall(0).args; + expect(message).toBe('Adding SpringBoot Database MySQL to project failed'); + }); + + it('should not add SpringBoot Database MariaDB when project path is not filled', async () => { + const springBootService = stubSpringBootService(); + springBootService.addMariaDB.resolves({}); + await wrap({ springBootService }); + await selectSection('springboot'); + + const button = wrapper.find('#springboot-database-mariadb'); + await button.trigger('click'); + + expect(springBootService.addMariaDB.called).toBe(false); + }); + + it('should add SpringBoot Database MariaDB when project path is filled', async () => { + const springBootService = stubSpringBootService(); + springBootService.addMariaDB.resolves({}); + await wrap({ springBootService }); + const projectToUpdate: ProjectToUpdate = createProjectToUpdate({ + folder: 'project/path', + baseName: 'beer', + projectName: 'Beer Project', + packageName: 'tech.jhipster.beer', + serverPort: '8080', + }); + await fillFullForm(projectToUpdate); + await selectSection('springboot'); + + const button = wrapper.find('#springboot-database-mariadb'); + await button.trigger('click'); + + const args = springBootService.addMariaDB.getCall(0).args[0]; + expect(args).toEqual({ + baseName: 'beer', + folder: 'project/path', + projectName: 'Beer Project', + packageName: 'tech.jhipster.beer', + serverPort: 8080, + }); + }); + + it('should handle error on adding SpringBoot Database MariaDB failure', async () => { + const logger = stubLogger(); + const springBootService = stubSpringBootService(); + springBootService.addMariaDB.rejects({}); + await wrap({ springBootService, logger }); + const projectToUpdate: ProjectToUpdate = createProjectToUpdate(); + await fillFullForm(projectToUpdate); + await selectSection('springboot'); + + const initButton = wrapper.find('#springboot-database-mariadb'); + await initButton.trigger('click'); + + const [message] = logger.error.getCall(0).args; + expect(message).toBe('Adding SpringBoot Database MariaDB to project failed'); + }); + + it('should not add SpringBoot Database MongoDB when project path is not filled', async () => { + const springBootService = stubSpringBootService(); + springBootService.addMongoDB.resolves({}); + await wrap({ springBootService }); + await selectSection('springboot'); + + const button = wrapper.find('#springboot-database-mongodb'); + await button.trigger('click'); + + expect(springBootService.addMongoDB.called).toBe(false); + }); + + it('should add SpringBoot Database MongoDB when project path is filled', async () => { + const springBootService = stubSpringBootService(); + springBootService.addMongoDB.resolves({}); + await wrap({ springBootService }); + const projectToUpdate: ProjectToUpdate = createProjectToUpdate({ + folder: 'project/path', + baseName: 'beer', + projectName: 'Beer Project', + packageName: 'tech.jhipster.beer', + serverPort: '8080', + }); + await fillFullForm(projectToUpdate); + await selectSection('springboot'); + + const button = wrapper.find('#springboot-database-mongodb'); + await button.trigger('click'); + + const args = springBootService.addMongoDB.getCall(0).args[0]; + expect(args).toEqual({ + baseName: 'beer', + folder: 'project/path', + projectName: 'Beer Project', + packageName: 'tech.jhipster.beer', + serverPort: 8080, + }); + }); + + it('should handle error on adding SpringBoot Database MongoDB failure', async () => { + const logger = stubLogger(); + const springBootService = stubSpringBootService(); + springBootService.addMongoDB.rejects({}); + await wrap({ springBootService, logger }); + const projectToUpdate: ProjectToUpdate = createProjectToUpdate(); + await fillFullForm(projectToUpdate); + await selectSection('springboot'); + + const initButton = wrapper.find('#springboot-database-mongodb'); + await initButton.trigger('click'); + + const [message] = logger.error.getCall(0).args; + expect(message).toBe('Adding SpringBoot Database MongoDB to project failed'); + }); + }); + it('should not add Angular when project path is not filled', async () => { const angularService = stubAngularService(); angularService.add.resolves({});