From c9c9b9027d5ba83d888d65f1fbc3f06d096a71a6 Mon Sep 17 00:00:00 2001 From: matthieulapatate Date: Mon, 23 May 2022 03:48:46 +0200 Subject: [PATCH 1/3] Add Logger to Vue common application --- .../vue/core/domain/VueDomainService.java | 37 +++++++++++++++++++ .../common/domain/Logger.fixture.ts.mustache | 10 +++++ .../secondary/ConsoleLogger.spec.ts.mustache | 20 ++++++++++ .../app/common/domain/Logger.ts.mustache | 5 +++ .../app/common/domain/Message.ts.mustache | 1 + .../secondary/ConsoleLogger.ts.mustache | 10 +++++ .../vue/core/domain/VueDomainServiceTest.java | 9 +++++ 7 files changed, 92 insertions(+) create mode 100644 src/main/resources/generator/client/vue/test/spec/common/domain/Logger.fixture.ts.mustache create mode 100644 src/main/resources/generator/client/vue/test/spec/common/secondary/ConsoleLogger.spec.ts.mustache create mode 100644 src/main/resources/generator/client/vue/webapp/app/common/domain/Logger.ts.mustache create mode 100644 src/main/resources/generator/client/vue/webapp/app/common/domain/Message.ts.mustache create mode 100644 src/main/resources/generator/client/vue/webapp/app/common/secondary/ConsoleLogger.ts.mustache diff --git a/src/main/java/tech/jhipster/lite/generator/client/vue/core/domain/VueDomainService.java b/src/main/java/tech/jhipster/lite/generator/client/vue/core/domain/VueDomainService.java index 12247541cde..4b5c236404f 100644 --- a/src/main/java/tech/jhipster/lite/generator/client/vue/core/domain/VueDomainService.java +++ b/src/main/java/tech/jhipster/lite/generator/client/vue/core/domain/VueDomainService.java @@ -18,9 +18,13 @@ public class VueDomainService implements VueService { public static final String NEEDLE_IMPORT = "// jhipster-needle-main-ts-import"; public static final String NEEDLE_PROVIDER = "// jhipster-needle-main-ts-provider"; public static final String SOURCE_PRIMARY = getPath(SOURCE, "webapp/app/common/primary"); + public static final String SOURCE_DOMAIN = getPath(SOURCE, "webapp/app/common/domain"); + public static final String SOURCE_SECONDARY = getPath(SOURCE, "webapp/app/common/secondary"); public static final String SOURCE_TEST_PRIMARY = getPath(SOURCE, "test/spec/common/primary"); public static final String SOURCE_PRIMARY_APP = getPath(SOURCE_PRIMARY, "app"); public static final String DESTINATION_PRIMARY = "src/main/webapp/app/common/primary"; + public static final String DESTINATION_DOMAIN = "src/main/webapp/app/common/domain"; + public static final String DESTINATION_SECONDARY = "src/main/webapp/app/common/secondary"; public static final String DESTINATION_PRIMARY_APP = DESTINATION_PRIMARY + "/app"; public static final String DESTINATION_PRIMARY_TEST = "src/test/javascript/spec/common/primary"; public static final String DESTINATION_PRIMARY_ROUTER = DESTINATION_PRIMARY + "/app"; @@ -60,6 +64,7 @@ private void addCommonVue(Project project) { addRootFiles(project); addAppFiles(project); addRouter(project); + addLogger(project); } public void addDependencies(Project project) { @@ -120,6 +125,38 @@ private void addAxiosFile(Project project) { ); } + public void addLogger(Project project) { + addLoggerFiles(project); + addLoggerTestFiles(project); + } + + private void addLoggerFiles(Project project) { + projectRepository.template( + ProjectFile.forProject(project).withSource(SOURCE_DOMAIN, "Logger.ts").withDestinationFolder(DESTINATION_DOMAIN) + ); + projectRepository.template( + ProjectFile.forProject(project).withSource(SOURCE_DOMAIN, "Message.ts").withDestinationFolder(DESTINATION_DOMAIN) + ); + projectRepository.template( + ProjectFile.forProject(project).withSource(SOURCE_SECONDARY, "ConsoleLogger.ts").withDestinationFolder(DESTINATION_SECONDARY) + ); + } + + private void addLoggerTestFiles(Project project) { + projectRepository.template( + ProjectFile + .forProject(project) + .withSource(getPath(SOURCE, "test/spec/common/domain"), "Logger.fixture.ts") + .withDestinationFolder("src/test/javascript/spec/common/domain") + ); + projectRepository.template( + ProjectFile + .forProject(project) + .withSource(getPath(SOURCE, "test/spec/common/secondary"), "ConsoleLogger.spec.ts") + .withDestinationFolder("src/test/javascript/spec/common/secondary") + ); + } + public void addDevDependencies(Project project) { Vue.devDependencies().forEach(devDependency -> addDevDependency(project, devDependency)); } diff --git a/src/main/resources/generator/client/vue/test/spec/common/domain/Logger.fixture.ts.mustache b/src/main/resources/generator/client/vue/test/spec/common/domain/Logger.fixture.ts.mustache new file mode 100644 index 00000000000..0f3d17fff15 --- /dev/null +++ b/src/main/resources/generator/client/vue/test/spec/common/domain/Logger.fixture.ts.mustache @@ -0,0 +1,10 @@ +import sinon, { SinonStub } from 'sinon'; +import { Logger } from '@/common/domain/Logger'; + +export interface LoggerFixture extends Logger { + error: SinonStub; +} + +export const stubLogger = (): LoggerFixture => ({ + error: sinon.stub(), +}); \ No newline at end of file diff --git a/src/main/resources/generator/client/vue/test/spec/common/secondary/ConsoleLogger.spec.ts.mustache b/src/main/resources/generator/client/vue/test/spec/common/secondary/ConsoleLogger.spec.ts.mustache new file mode 100644 index 00000000000..143a1c503da --- /dev/null +++ b/src/main/resources/generator/client/vue/test/spec/common/secondary/ConsoleLogger.spec.ts.mustache @@ -0,0 +1,20 @@ +import sinon from 'sinon'; + +import ConsoleLogger from '@/common/secondary/ConsoleLogger'; + +describe('ConsoleLogger', () => { + it('should log an error', () => { + const logger = { + error: sinon.stub(), + }; + const consoleLogger = new ConsoleLogger(logger as any); + const error = new Error('Error message'); + + consoleLogger.error('An error occurs', error); + + const [message, errorPassed] = logger.error.getCall(0).args; + expect(message).toBe('An error occurs\n'); + expect(errorPassed).toBeInstanceOf(Error); + expect(errorPassed.message).toBe('Error message'); + }); +}); \ No newline at end of file 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 new file mode 100644 index 00000000000..1fc288cf04c --- /dev/null +++ b/src/main/resources/generator/client/vue/webapp/app/common/domain/Logger.ts.mustache @@ -0,0 +1,5 @@ +import { Message } from '@/common/domain/Message'; + +export interface Logger { + error(message: Message, error: Error): void; +} \ No newline at end of file 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 new file mode 100644 index 00000000000..615ae667208 --- /dev/null +++ b/src/main/resources/generator/client/vue/webapp/app/common/domain/Message.ts.mustache @@ -0,0 +1 @@ +export type Message = string; \ No newline at end of file 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 new file mode 100644 index 00000000000..01d65e716c9 --- /dev/null +++ b/src/main/resources/generator/client/vue/webapp/app/common/secondary/ConsoleLogger.ts.mustache @@ -0,0 +1,10 @@ +import { Logger } from '@/common/domain/Logger'; +import { Message } from '@/common/domain/Message'; + +export default class ConsoleLogger implements Logger { + constructor(private logger: Console) {} + + error(message: Message, error: Error) { + this.logger.error(`${message}\n`, error); + } +} diff --git a/src/test/java/tech/jhipster/lite/generator/client/vue/core/domain/VueDomainServiceTest.java b/src/test/java/tech/jhipster/lite/generator/client/vue/core/domain/VueDomainServiceTest.java index 7d8c2489bf0..7885504c2de 100644 --- a/src/test/java/tech/jhipster/lite/generator/client/vue/core/domain/VueDomainServiceTest.java +++ b/src/test/java/tech/jhipster/lite/generator/client/vue/core/domain/VueDomainServiceTest.java @@ -210,4 +210,13 @@ void shouldAddAxiosFile() { verify(projectRepository, times(4)).template(any(ProjectFile.class)); } + + @Test + void shouldAddLoggerFiles() { + Project project = tmpProjectWithPackageJson(); + + vueDomainService.addLogger(project); + + verify(projectRepository, times(5)).template(any(ProjectFile.class)); + } } From 299ca37af19fc6b18d9530dfe0331bb460a6059c Mon Sep 17 00:00:00 2001 From: matthieulapatate Date: Tue, 24 May 2022 16:45:52 +0200 Subject: [PATCH 2/3] Assert logger files are created --- .../vue/core/application/VueApplicationServiceIT.java | 1 + .../generator/client/vue/core/application/VueAssert.java | 8 ++++++++ 2 files changed, 9 insertions(+) diff --git a/src/test/java/tech/jhipster/lite/generator/client/vue/core/application/VueApplicationServiceIT.java b/src/test/java/tech/jhipster/lite/generator/client/vue/core/application/VueApplicationServiceIT.java index b43f3b718b2..fc1e85b1ad6 100644 --- a/src/test/java/tech/jhipster/lite/generator/client/vue/core/application/VueApplicationServiceIT.java +++ b/src/test/java/tech/jhipster/lite/generator/client/vue/core/application/VueApplicationServiceIT.java @@ -28,6 +28,7 @@ void shouldAddVue() { VueAssert.assertAppFiles(project); VueAssert.assertAppWithCss(project); VueAssert.assertLogos(project); + VueAssert.assertLogger(project); VueAssert.assertJestSonar(project); } diff --git a/src/test/java/tech/jhipster/lite/generator/client/vue/core/application/VueAssert.java b/src/test/java/tech/jhipster/lite/generator/client/vue/core/application/VueAssert.java index 00c1612d506..c80721b587d 100644 --- a/src/test/java/tech/jhipster/lite/generator/client/vue/core/application/VueAssert.java +++ b/src/test/java/tech/jhipster/lite/generator/client/vue/core/application/VueAssert.java @@ -87,4 +87,12 @@ public static void assertAxiosFile(Project project) { assertFileExist(project, "src/test/javascript/spec/http/AxiosHttpStub.ts"); assertFileExist(project, "src/test/javascript/spec/http/AxiosStub.ts"); } + + public static void assertLogger(Project project) { + assertFileExist(project, "src/main/webapp/app/common/domain/Logger.ts"); + assertFileExist(project, "src/main/webapp/app/common/domain/Message.ts"); + assertFileExist(project, "src/main/webapp/app/common/secondary/ConsoleLogger.ts"); + assertFileExist(project, "src/test/javascript/spec/common/domain/Logger.fixture.ts"); + assertFileExist(project, "src/test/javascript/spec/common/secondary/ConsoleLogger.spec.ts"); + } } From 961c5c04c95bb93ba196d2123ccc03210bddc61c Mon Sep 17 00:00:00 2001 From: matthieulapatate Date: Tue, 24 May 2022 17:20:54 +0200 Subject: [PATCH 3/3] Assert axios files are created --- .../client/vue/core/application/VueApplicationServiceIT.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/test/java/tech/jhipster/lite/generator/client/vue/core/application/VueApplicationServiceIT.java b/src/test/java/tech/jhipster/lite/generator/client/vue/core/application/VueApplicationServiceIT.java index fc1e85b1ad6..03f452129c9 100644 --- a/src/test/java/tech/jhipster/lite/generator/client/vue/core/application/VueApplicationServiceIT.java +++ b/src/test/java/tech/jhipster/lite/generator/client/vue/core/application/VueApplicationServiceIT.java @@ -29,6 +29,7 @@ void shouldAddVue() { VueAssert.assertAppWithCss(project); VueAssert.assertLogos(project); VueAssert.assertLogger(project); + VueAssert.assertAxiosFile(project); VueAssert.assertJestSonar(project); }