From 2088f4e4882fcae9f2ecce10b16795ab643c4395 Mon Sep 17 00:00:00 2001 From: Kamil Sulejewski Date: Fri, 3 Jan 2025 12:20:19 +0100 Subject: [PATCH 1/5] CWS-1.3 feat(Flow and Translate): Modified the pattern. Added a flow commit. Created tests I added the ability to send a request without translation, and added a flag whether the generated commit should include git -m. --- .../gen/controller/CommitController.java | 26 ------ .../controller/CommitTranslateController.java | 27 ++++++ ...quest.java => CommitTranslateRequest.java} | 5 +- .../commit/gen/flow/CommitFlowController.java | 30 ++++++ .../pl/commit/gen/flow/CommitFlowRequest.java | 11 +++ .../commit/gen/pattern/BasicModelPattern.java | 4 + .../gen/pattern/CommitModelPattern.java | 92 ++++++++++++++++++- .../pl/commit/gen/service/CommitService.java | 36 ++++++-- .../pl/commit/gen/service/CommitType.java | 3 +- .../commit/gen/service/CommitServiceTest.java | 35 +++++-- translate/src/main/resources/application.yml | 2 +- 11 files changed, 222 insertions(+), 49 deletions(-) delete mode 100644 src/main/java/pl/commit/gen/controller/CommitController.java create mode 100644 src/main/java/pl/commit/gen/controller/CommitTranslateController.java rename src/main/java/pl/commit/gen/controller/{CommitRequest.java => CommitTranslateRequest.java} (60%) create mode 100644 src/main/java/pl/commit/gen/flow/CommitFlowController.java create mode 100644 src/main/java/pl/commit/gen/flow/CommitFlowRequest.java diff --git a/src/main/java/pl/commit/gen/controller/CommitController.java b/src/main/java/pl/commit/gen/controller/CommitController.java deleted file mode 100644 index f1cbfbf..0000000 --- a/src/main/java/pl/commit/gen/controller/CommitController.java +++ /dev/null @@ -1,26 +0,0 @@ -package pl.commit.gen.controller; - -import org.springframework.web.bind.annotation.*; -import pl.commit.gen.service.CommitService; - -@RestController -@RequestMapping("/api/commit") -public class CommitController { - - private final CommitService commitService; - - public CommitController(CommitService commitService) { - this.commitService = commitService; - } - - @PostMapping("/generate") - public String generateCommit(@RequestBody CommitRequest commitRequest) { - return commitService.generateCommit( - commitRequest.major(), - commitRequest.type(), - commitRequest.component(), - commitRequest.changeDescription(), - commitRequest.details() - ); - } -} diff --git a/src/main/java/pl/commit/gen/controller/CommitTranslateController.java b/src/main/java/pl/commit/gen/controller/CommitTranslateController.java new file mode 100644 index 0000000..daa073d --- /dev/null +++ b/src/main/java/pl/commit/gen/controller/CommitTranslateController.java @@ -0,0 +1,27 @@ +package pl.commit.gen.controller; + +import org.springframework.web.bind.annotation.*; +import pl.commit.gen.service.CommitService; + +@RestController +@RequestMapping("/api/commit-translate") +public class CommitTranslateController { + + private final CommitService commitService; + + public CommitTranslateController(CommitService commitService) { + this.commitService = commitService; + } + + @PostMapping("/generate") + public String generateCommit(@RequestBody CommitTranslateRequest commitTranslateRequest) { + return commitService.generateTranslateCommit( + commitTranslateRequest.major(), + commitTranslateRequest.type(), + commitTranslateRequest.component(), + commitTranslateRequest.changeDescription(), + commitTranslateRequest.details(), + commitTranslateRequest.wholeGitCommand() + ); + } +} diff --git a/src/main/java/pl/commit/gen/controller/CommitRequest.java b/src/main/java/pl/commit/gen/controller/CommitTranslateRequest.java similarity index 60% rename from src/main/java/pl/commit/gen/controller/CommitRequest.java rename to src/main/java/pl/commit/gen/controller/CommitTranslateRequest.java index fcf2c9a..672234a 100644 --- a/src/main/java/pl/commit/gen/controller/CommitRequest.java +++ b/src/main/java/pl/commit/gen/controller/CommitTranslateRequest.java @@ -1,9 +1,10 @@ package pl.commit.gen.controller; -public record CommitRequest( +public record CommitTranslateRequest( String major, String type, String component, String changeDescription, - String details + String details, + boolean wholeGitCommand ) {} diff --git a/src/main/java/pl/commit/gen/flow/CommitFlowController.java b/src/main/java/pl/commit/gen/flow/CommitFlowController.java new file mode 100644 index 0000000..bac1520 --- /dev/null +++ b/src/main/java/pl/commit/gen/flow/CommitFlowController.java @@ -0,0 +1,30 @@ +package pl.commit.gen.flow; + +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import pl.commit.gen.service.CommitService; + +@RestController +@RequestMapping("/api/commit-flow") +public class CommitFlowController { + + private final CommitService commitService; + + public CommitFlowController(CommitService commitService) { + this.commitService = commitService; + } + + @PostMapping("/generate") + public String generateCommit(@RequestBody CommitFlowRequest commitFlowRequest) { + return commitService.generateFlowCommit( + commitFlowRequest.major(), + commitFlowRequest.type(), + commitFlowRequest.component(), + commitFlowRequest.changeDescription(), + commitFlowRequest.details(), + commitFlowRequest.wholeGitCommand() + ); + } +} diff --git a/src/main/java/pl/commit/gen/flow/CommitFlowRequest.java b/src/main/java/pl/commit/gen/flow/CommitFlowRequest.java new file mode 100644 index 0000000..714e2ee --- /dev/null +++ b/src/main/java/pl/commit/gen/flow/CommitFlowRequest.java @@ -0,0 +1,11 @@ +package pl.commit.gen.flow; + +record CommitFlowRequest( + String major, + String type, + String component, + String changeDescription, + String details, + boolean wholeGitCommand +) {} + diff --git a/src/main/java/pl/commit/gen/pattern/BasicModelPattern.java b/src/main/java/pl/commit/gen/pattern/BasicModelPattern.java index 892a630..783b5df 100644 --- a/src/main/java/pl/commit/gen/pattern/BasicModelPattern.java +++ b/src/main/java/pl/commit/gen/pattern/BasicModelPattern.java @@ -3,6 +3,10 @@ sealed class BasicModelPattern permits CommitModelPattern { private static final String TARGET_LANG = "EN"; + protected BasicModelPattern() { + throw new IllegalStateException("Utility class"); + } + public static String getTargetLanguage() { return TARGET_LANG; } diff --git a/src/main/java/pl/commit/gen/pattern/CommitModelPattern.java b/src/main/java/pl/commit/gen/pattern/CommitModelPattern.java index f2c093e..971ba42 100644 --- a/src/main/java/pl/commit/gen/pattern/CommitModelPattern.java +++ b/src/main/java/pl/commit/gen/pattern/CommitModelPattern.java @@ -2,13 +2,97 @@ public final class CommitModelPattern extends BasicModelPattern { private static final String GIT_COMMAND = "git commit -m"; - private static final String COMMITING_WORK_PATTERN = "%s \"%s %s(%s): %s\n\n%s\""; - public static String getCommittingWorkPattern() { + private static final String GIT_COMMAND_COMMITING_WORK_PATTERN = GIT_COMMAND + " \"%s %s(%s): %s\n\n%s\""; + private static final String GIT_COMMAND_COMMITING_WORK_PATTERN_WITHOUT_COMPONENT = GIT_COMMAND + " \"%s %s: %s\n\n%s\""; + private static final String GIT_COMMAND_COMMITING_WORK_PATTERN_WITHOUT_DETAILS = GIT_COMMAND + " \"%s %s(%s): %s\""; + private static final String GIT_COMMAND_COMMITING_WORK_PATTERN_WITHOUT_COMPONENT_AND_DETAILS = GIT_COMMAND + " \"%s %s: %s\""; + + private static final String COMMITING_WORK_PATTERN = "%s %s(%s): %s\n\n%s"; + private static final String COMMITING_WORK_PATTERN_WITHOUT_COMPONENT = "%s %s: %s\n\n%s"; + private static final String COMMITING_WORK_PATTERN_WITHOUT_DETAILS = "%s %s(%s): %s"; + private static final String COMMITING_WORK_PATTERN_WITHOUT_COMPONENT_AND_DETAILS = "%s %s: %s"; + + private static String getGitCommandCommittingWorkPattern() { + return GIT_COMMAND_COMMITING_WORK_PATTERN; + } + + private static String getGitCommandCommittingWorkPatternWithoutComponent() { + return GIT_COMMAND_COMMITING_WORK_PATTERN_WITHOUT_COMPONENT; + } + + private static String getGitCommandCommittingWorkPatternWithoutDetails() { + return GIT_COMMAND_COMMITING_WORK_PATTERN_WITHOUT_DETAILS; + } + + private static String getGitCommandCommittingWorkPatternWithoutComponentAndDetails() { + return GIT_COMMAND_COMMITING_WORK_PATTERN_WITHOUT_COMPONENT_AND_DETAILS; + } + + private static String getCommittingWorkPattern() { return COMMITING_WORK_PATTERN; } - public static String getGitCommandPattern() { - return GIT_COMMAND; + private static String getCommittingWorkPatternWithoutComponent() { + return COMMITING_WORK_PATTERN_WITHOUT_COMPONENT; + } + + private static String getCommittingWorkPatternWithoutDetails() { + return COMMITING_WORK_PATTERN_WITHOUT_DETAILS; + } + + private static String getCommittingWorkPatternWithoutComponentAndDetails() { + return COMMITING_WORK_PATTERN_WITHOUT_COMPONENT_AND_DETAILS; + } + + /** + * Główna metoda wybierająca odpowiedni wzorzec na podstawie flagi `wholeGitCommand`, `component` i `details`. + * @param wholeGitCommand - jeśli true, zwraca wzorzec z pełnym git commit. + * @param component - nazwa komponentu, może być pusta. + * @param details - szczegóły, mogą być puste. + * @return odpowiedni wzorzec. + */ + public static String getPattern(boolean wholeGitCommand, String component, String details) { + if (wholeGitCommand) { + return getPatternWithGitCommand(component, details); + } else { + return getPatternWithoutGitCommand(component, details); + } + } + + /** + * Zwraca odpowiedni wzorzec z pełnym poleceniem Git, w zależności od tego, czy `component` i `details` są puste. + * @param component - nazwa komponentu. + * @param details - szczegóły. + * @return wzorzec z pełnym poleceniem Git. + */ + private static String getPatternWithGitCommand(String component, String details) { + if (component.isEmpty() && details.isEmpty()) { + return getGitCommandCommittingWorkPatternWithoutComponentAndDetails(); + } else if (component.isEmpty()) { + return getGitCommandCommittingWorkPatternWithoutComponent(); + } else if (details.isEmpty()) { + return getGitCommandCommittingWorkPatternWithoutDetails(); + } else { + return getGitCommandCommittingWorkPattern(); + } + } + + /** + * Zwraca odpowiedni wzorzec bez pełnego polecenia Git, w zależności od tego, czy `component` i `details` są puste. + * @param component - nazwa komponentu. + * @param details - szczegóły. + * @return wzorzec bez pełnego polecenia Git. + */ + private static String getPatternWithoutGitCommand(String component, String details) { + if (component.isEmpty() && details.isEmpty()) { + return getCommittingWorkPatternWithoutComponentAndDetails(); + } else if (component.isEmpty()) { + return getCommittingWorkPatternWithoutComponent(); + } else if (details.isEmpty()) { + return getCommittingWorkPatternWithoutDetails(); + } else { + return getCommittingWorkPattern(); + } } } diff --git a/src/main/java/pl/commit/gen/service/CommitService.java b/src/main/java/pl/commit/gen/service/CommitService.java index dc4b529..8395912 100644 --- a/src/main/java/pl/commit/gen/service/CommitService.java +++ b/src/main/java/pl/commit/gen/service/CommitService.java @@ -2,6 +2,7 @@ import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; +import org.springframework.util.StringUtils; import pl.commit.gen.pattern.CommitModelPattern; import pl.commit.translate.TranslateCommiting; @@ -10,21 +11,42 @@ public class CommitService { private final TranslateCommiting translateCommiting; - public String generateCommit(String major, String type, String component, String changeDescription, String details) { - if (!isValidType(type)) { + public String generateTranslateCommit(String major, String type, String component, String changeDescription, String details, boolean wholeGitCommand) { + if (isValidType(type)) { throw new IllegalArgumentException("Invalid commit type: " + type); } + MajorNumber majorNumber = MajorNumberPreparer.of(major).getMajorNumber(); String changeDescriptionTranslated = getChangeDescriptionTranslated(changeDescription); String detailsTranslated = !details.isEmpty() ? getChangeDescriptionTranslated(details) : ""; + String pattern = CommitModelPattern.getPattern(wholeGitCommand, component, detailsTranslated); + return String.format( - CommitModelPattern.getCommittingWorkPattern(), - CommitModelPattern.getGitCommandPattern(), + pattern, majorNumber != null ? majorNumber.issueNumber() : "", type, - component, + component.isEmpty() ? changeDescriptionTranslated : component, changeDescriptionTranslated, - detailsTranslated.isEmpty() ? "" : detailsTranslated + detailsTranslated + ).trim(); + } + + public String generateFlowCommit(String major, String type, String component, String changeDescription, String details, boolean wholeGitCommand) { + if (isValidType(type)) { + throw new IllegalArgumentException("Invalid commit type: " + type); + } + + MajorNumber majorNumber = MajorNumberPreparer.of(major).getMajorNumber(); + String detailsFlow = details.isEmpty() ? StringUtils.trimAllWhitespace(details) : details; + String pattern = CommitModelPattern.getPattern(wholeGitCommand, component, detailsFlow); + + return String.format( + pattern, + majorNumber != null ? majorNumber.issueNumber() : "", + type, + component, + changeDescription, + detailsFlow ).trim(); } @@ -33,6 +55,6 @@ private String getChangeDescriptionTranslated(String changeDescription) { } private boolean isValidType(String type) { - return CommitType.isValidType(type); + return !CommitType.isValidType(type); } } diff --git a/src/main/java/pl/commit/gen/service/CommitType.java b/src/main/java/pl/commit/gen/service/CommitType.java index abb4e62..913c2a6 100644 --- a/src/main/java/pl/commit/gen/service/CommitType.java +++ b/src/main/java/pl/commit/gen/service/CommitType.java @@ -10,7 +10,8 @@ enum CommitType { STYLE("style"), REFACTOR("refactor"), TEST("test"), - CHORE("chore"); + CHORE("chore"), + AUDIT("audit"); private final String type; diff --git a/src/test/java/pl/commit/gen/service/CommitServiceTest.java b/src/test/java/pl/commit/gen/service/CommitServiceTest.java index 764cefd..2b29426 100644 --- a/src/test/java/pl/commit/gen/service/CommitServiceTest.java +++ b/src/test/java/pl/commit/gen/service/CommitServiceTest.java @@ -7,6 +7,7 @@ import org.mockito.MockitoAnnotations; import pl.commit.translate.TranslateCommiting; +import static org.assertj.core.api.Assertions.assertThat; import static org.junit.jupiter.api.Assertions.*; import static org.mockito.Mockito.when; @@ -24,7 +25,7 @@ void setUp() { } @Test - void testGenerateCommitValidType() { + void testGenerateTranslateCommitValidType() { // given String major = "link/1.0.0"; String type = "feat"; @@ -36,7 +37,7 @@ void testGenerateCommitValidType() { when(translateCommiting.translate(changeDescription, "EN")).thenReturn("Add new button"); when(translateCommiting.translate(details, "EN")).thenReturn("Added a new button to the main page."); - String commitMessage = commitService.generateCommit(major, type, component, changeDescription, details); + String commitMessage = commitService.generateTranslateCommit(major, type, component, changeDescription, details, commitTranslateRequest.wholeGitCommand()); // then assertNotNull(commitMessage); @@ -47,12 +48,12 @@ void testGenerateCommitValidType() { } @Test - void testGenerateCommitInvalidType() { + void testGenerateTranslateCommitInvalidType() { // given String type = "invalidType"; IllegalArgumentException exception = assertThrows(IllegalArgumentException.class, () -> { - commitService.generateCommit(null, type, "UI", "Description", "Details"); + commitService.generateTranslateCommit(null, type, "UI", "Description", "Details", commitTranslateRequest.wholeGitCommand()); }); // then @@ -60,7 +61,7 @@ void testGenerateCommitInvalidType() { } @Test - void testGenerateCommitEmptyDetails() { + void testGenerateTranslateCommitEmptyDetails() { // given String major = "link/1.0.0"; String type = "fix"; @@ -71,7 +72,7 @@ void testGenerateCommitEmptyDetails() { // when when(translateCommiting.translate(changeDescription, "EN")).thenReturn("Fix bug in payment module"); - String commitMessage = commitService.generateCommit(major, type, component, changeDescription, details); + String commitMessage = commitService.generateTranslateCommit(major, type, component, changeDescription, details, commitTranslateRequest.wholeGitCommand()); // then assertNotNull(commitMessage); @@ -79,7 +80,7 @@ void testGenerateCommitEmptyDetails() { } @Test - void testGenerateCommitWithTaskNumber() { + void testGenerateTranslateCommitWithTaskNumber() { // given String major = "link/TEET-1234"; String type = "feat"; @@ -92,10 +93,28 @@ void testGenerateCommitWithTaskNumber() { when(translateCommiting.translate(details, "EN")).thenReturn("Details of the task"); - String commitMessage = commitService.generateCommit(major, type, component, changeDescription, details); + String commitMessage = commitService.generateTranslateCommit(major, type, component, changeDescription, details, commitTranslateRequest.wholeGitCommand()); // then assertNotNull(commitMessage); assertTrue(commitMessage.contains("TEET-1234")); } + + @Test + void testGenerateFlowCommitWithTaskNumber() { + // given + String major = "link/TEET-1234"; + String type = "fix"; + String component = "Report"; + String changeDescription = "Add new feature"; + String details = ""; + boolean wholeGitCommand = true; + + String commitMessage = commitService.generateFlowCommit(major, type, component, changeDescription, details, wholeGitCommand); + + // then + assertNotNull(commitMessage); + assertTrue(commitMessage.contains("TEET-1234")); + assertThat(commitMessage).isEqualTo("git commit -m \"TEET-1234 fix(Report): Add new feature\""); + } } diff --git a/translate/src/main/resources/application.yml b/translate/src/main/resources/application.yml index ec87af6..057f7d0 100644 --- a/translate/src/main/resources/application.yml +++ b/translate/src/main/resources/application.yml @@ -1,4 +1,4 @@ deepl: api: - key: + key: 92f2c230-abe8-4dc6-b90b-bbc3f7db0210:fx url: https://api-free.deepl.com/v2/translate From f69c53e194d355720d7eca1b85d3a0b950e2f95e Mon Sep 17 00:00:00 2001 From: Kamil Sulejewski Date: Fri, 3 Jan 2025 12:25:24 +0100 Subject: [PATCH 2/5] CWS-1.3 test: Test modification --- .../commit/gen/service/CommitServiceTest.java | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/src/test/java/pl/commit/gen/service/CommitServiceTest.java b/src/test/java/pl/commit/gen/service/CommitServiceTest.java index 2b29426..2aaffe3 100644 --- a/src/test/java/pl/commit/gen/service/CommitServiceTest.java +++ b/src/test/java/pl/commit/gen/service/CommitServiceTest.java @@ -32,12 +32,13 @@ void testGenerateTranslateCommitValidType() { String component = "UI"; String changeDescription = "Add new button"; String details = "Added a new button to the main page."; + boolean wholeGitCommand = true; // when when(translateCommiting.translate(changeDescription, "EN")).thenReturn("Add new button"); when(translateCommiting.translate(details, "EN")).thenReturn("Added a new button to the main page."); - String commitMessage = commitService.generateTranslateCommit(major, type, component, changeDescription, details, commitTranslateRequest.wholeGitCommand()); + String commitMessage = commitService.generateTranslateCommit(major, type, component, changeDescription, details, wholeGitCommand); // then assertNotNull(commitMessage); @@ -53,7 +54,7 @@ void testGenerateTranslateCommitInvalidType() { String type = "invalidType"; IllegalArgumentException exception = assertThrows(IllegalArgumentException.class, () -> { - commitService.generateTranslateCommit(null, type, "UI", "Description", "Details", commitTranslateRequest.wholeGitCommand()); + commitService.generateTranslateCommit(null, type, "UI", "Description", "Details", false); }); // then @@ -68,11 +69,12 @@ void testGenerateTranslateCommitEmptyDetails() { String component = "Backend"; String changeDescription = "Fix bug in payment module"; String details = ""; + boolean wholeGitCommand = true; // when when(translateCommiting.translate(changeDescription, "EN")).thenReturn("Fix bug in payment module"); - String commitMessage = commitService.generateTranslateCommit(major, type, component, changeDescription, details, commitTranslateRequest.wholeGitCommand()); + String commitMessage = commitService.generateTranslateCommit(major, type, component, changeDescription, details, wholeGitCommand); // then assertNotNull(commitMessage); @@ -80,24 +82,23 @@ void testGenerateTranslateCommitEmptyDetails() { } @Test - void testGenerateTranslateCommitWithTaskNumber() { + void testGenerateTranslateCommitWithTaskNumberAndWholeGitCommandIsFalse() { // given String major = "link/TEET-1234"; String type = "feat"; String component = "UI"; String changeDescription = "Add new feature"; - String details = "Details of the task"; + boolean wholeGitCommand = false; // when when(translateCommiting.translate(changeDescription, "EN")).thenReturn("Add new feature"); - when(translateCommiting.translate(details, "EN")).thenReturn("Details of the task"); - - String commitMessage = commitService.generateTranslateCommit(major, type, component, changeDescription, details, commitTranslateRequest.wholeGitCommand()); + String commitMessage = commitService.generateTranslateCommit(major, type, component, changeDescription, "", wholeGitCommand); // then assertNotNull(commitMessage); assertTrue(commitMessage.contains("TEET-1234")); + assertThat(commitMessage).isEqualTo("TEET-1234 feat(UI): Add new feature"); } @Test From 099bd97fe5d585f681ffdd89a0ac310255e968c2 Mon Sep 17 00:00:00 2001 From: Kamil Sulejewski Date: Fri, 3 Jan 2025 12:32:05 +0100 Subject: [PATCH 3/5] CWS-1.3 test: Bump coverage for jacoco percent --- .../gen/pattern/CommitModelPatternTest.java | 67 +++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100644 src/test/java/pl/commit/gen/pattern/CommitModelPatternTest.java diff --git a/src/test/java/pl/commit/gen/pattern/CommitModelPatternTest.java b/src/test/java/pl/commit/gen/pattern/CommitModelPatternTest.java new file mode 100644 index 0000000..8c13112 --- /dev/null +++ b/src/test/java/pl/commit/gen/pattern/CommitModelPatternTest.java @@ -0,0 +1,67 @@ +package pl.commit.gen.pattern; + +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.*; + +class CommitModelPatternTest { + @Test + void testGetPatternWithGitCommandWithoutComponentAndDetails() { + String result = CommitModelPattern.getPattern(true, "", ""); + String expected = "git commit -m \"%s %s: %s\""; + assertEquals(expected, result); + } + + @Test + void testGetPatternWithGitCommandWithoutComponent() { + String result = CommitModelPattern.getPattern(true, "", "Some details"); + String expected = "git commit -m \"%s %s: %s\n\n%s\""; + assertEquals(expected, result); + } + + @Test + void testGetPatternWithGitCommandWithoutDetails() { + + String result = CommitModelPattern.getPattern(true, "Component", ""); + String expected = "git commit -m \"%s %s(%s): %s\""; // GIT_COMMAND_COMMITING_WORK_PATTERN_WITHOUT_DETAILS + assertEquals(expected, result); + } + + @Test + void testGetPatternWithGitCommand() { + String result = CommitModelPattern.getPattern(true, "Component", "Some details"); + String expected = "git commit -m \"%s %s(%s): %s\n\n%s\""; // GIT_COMMAND_COMMITING_WORK_PATTERN + assertEquals(expected, result); + } + + @Test + void testGetPatternWithoutGitCommandWithoutComponentAndDetails() { + // Gdy oba komponent i szczegóły są puste, oczekujemy wzorca bez komponentu i szczegółów (bez git) + String result = CommitModelPattern.getPattern(false, "", ""); + String expected = "%s %s: %s"; // COMMITING_WORK_PATTERN_WITHOUT_COMPONENT_AND_DETAILS + assertEquals(expected, result); + } + + @Test + void testGetPatternWithoutGitCommandWithoutComponent() { + String result = CommitModelPattern.getPattern(false, "", "Some details"); + String expected = "%s %s: %s\n\n%s"; // COMMITING_WORK_PATTERN_WITHOUT_COMPONENT + assertEquals(expected, result); + } + + @Test + public void testGetPatternWithoutGitCommandWithoutDetails() { + // Gdy szczegóły są puste, ale komponent nie jest, oczekujemy wzorca bez szczegółów (bez git) + String result = CommitModelPattern.getPattern(false, "Component", ""); + String expected = "%s %s(%s): %s"; // COMMITING_WORK_PATTERN_WITHOUT_DETAILS + assertEquals(expected, result); + } + + @Test + public void testGetPatternWithoutGitCommand() { + // Gdy komponent i szczegóły nie są puste, oczekujemy pełnego wzorca (bez git) + String result = CommitModelPattern.getPattern(false, "Component", "Some details"); + String expected = "%s %s(%s): %s\n\n%s"; // COMMITING_WORK_PATTERN + assertEquals(expected, result); + } +} From 5acd599aaedea808f704f2d8644ddd729623b969 Mon Sep 17 00:00:00 2001 From: Kamil Sulejewski Date: Fri, 3 Jan 2025 12:32:48 +0100 Subject: [PATCH 4/5] CWS-1.3 test: Bump coverage for jacoco percent --- .../gen/pattern/CommitModelPatternTest.java | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) diff --git a/src/test/java/pl/commit/gen/pattern/CommitModelPatternTest.java b/src/test/java/pl/commit/gen/pattern/CommitModelPatternTest.java index 8c13112..cd018b3 100644 --- a/src/test/java/pl/commit/gen/pattern/CommitModelPatternTest.java +++ b/src/test/java/pl/commit/gen/pattern/CommitModelPatternTest.java @@ -23,45 +23,42 @@ void testGetPatternWithGitCommandWithoutComponent() { void testGetPatternWithGitCommandWithoutDetails() { String result = CommitModelPattern.getPattern(true, "Component", ""); - String expected = "git commit -m \"%s %s(%s): %s\""; // GIT_COMMAND_COMMITING_WORK_PATTERN_WITHOUT_DETAILS + String expected = "git commit -m \"%s %s(%s): %s\""; assertEquals(expected, result); } @Test void testGetPatternWithGitCommand() { String result = CommitModelPattern.getPattern(true, "Component", "Some details"); - String expected = "git commit -m \"%s %s(%s): %s\n\n%s\""; // GIT_COMMAND_COMMITING_WORK_PATTERN + String expected = "git commit -m \"%s %s(%s): %s\n\n%s\""; assertEquals(expected, result); } @Test void testGetPatternWithoutGitCommandWithoutComponentAndDetails() { - // Gdy oba komponent i szczegóły są puste, oczekujemy wzorca bez komponentu i szczegółów (bez git) String result = CommitModelPattern.getPattern(false, "", ""); - String expected = "%s %s: %s"; // COMMITING_WORK_PATTERN_WITHOUT_COMPONENT_AND_DETAILS + String expected = "%s %s: %s"; assertEquals(expected, result); } @Test void testGetPatternWithoutGitCommandWithoutComponent() { String result = CommitModelPattern.getPattern(false, "", "Some details"); - String expected = "%s %s: %s\n\n%s"; // COMMITING_WORK_PATTERN_WITHOUT_COMPONENT + String expected = "%s %s: %s\n\n%s"; assertEquals(expected, result); } @Test - public void testGetPatternWithoutGitCommandWithoutDetails() { - // Gdy szczegóły są puste, ale komponent nie jest, oczekujemy wzorca bez szczegółów (bez git) + void testGetPatternWithoutGitCommandWithoutDetails() { String result = CommitModelPattern.getPattern(false, "Component", ""); - String expected = "%s %s(%s): %s"; // COMMITING_WORK_PATTERN_WITHOUT_DETAILS + String expected = "%s %s(%s): %s"; assertEquals(expected, result); } @Test - public void testGetPatternWithoutGitCommand() { - // Gdy komponent i szczegóły nie są puste, oczekujemy pełnego wzorca (bez git) + void testGetPatternWithoutGitCommand() { String result = CommitModelPattern.getPattern(false, "Component", "Some details"); - String expected = "%s %s(%s): %s\n\n%s"; // COMMITING_WORK_PATTERN + String expected = "%s %s(%s): %s\n\n%s"; assertEquals(expected, result); } } From 8e9477f496d004d6bee43f4c1da3034b63255c5b Mon Sep 17 00:00:00 2001 From: Kamil Sulejewski Date: Fri, 3 Jan 2025 12:54:01 +0100 Subject: [PATCH 5/5] CWS-1.3 test: Created controller test. --- .../gen/flow/CommitFlowControllerTest.java | 59 +++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100644 src/test/java/pl/commit/gen/flow/CommitFlowControllerTest.java diff --git a/src/test/java/pl/commit/gen/flow/CommitFlowControllerTest.java b/src/test/java/pl/commit/gen/flow/CommitFlowControllerTest.java new file mode 100644 index 0000000..b699d80 --- /dev/null +++ b/src/test/java/pl/commit/gen/flow/CommitFlowControllerTest.java @@ -0,0 +1,59 @@ +package pl.commit.gen.flow; + +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.junit.jupiter.MockitoExtension; +import org.springframework.http.MediaType; +import org.springframework.mock.web.MockHttpServletRequest; +import org.springframework.test.web.servlet.MockMvc; +import org.springframework.test.web.servlet.setup.MockMvcBuilders; +import org.springframework.web.context.request.RequestContextHolder; +import org.springframework.web.context.request.ServletRequestAttributes; +import pl.commit.gen.service.CommitService; + +import static org.mockito.Mockito.when; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content; + +@ExtendWith(MockitoExtension.class) +class CommitFlowControllerTest { + + @Mock + private CommitService commitService; + + @InjectMocks + private CommitFlowController commitFlowController; + + private MockMvc mockMvc; + + @Test + void testGenerateCommitSuccess() throws Exception { + mockMvc = MockMvcBuilders.standaloneSetup(commitFlowController).build(); + MockHttpServletRequest request = new MockHttpServletRequest(); + RequestContextHolder.setRequestAttributes(new ServletRequestAttributes(request)); + + // given + String requestBody = "{" + + "\"major\":\"1\"," + + "\"type\":\"bugfix\"," + + "\"component\":\"componentA\"," + + "\"changeDescription\":\"Fixed issue\"," + + "\"details\":\"Detailed description\"," + + "\"wholeGitCommand\":true" + + "}"; + + // when + when(commitService.generateFlowCommit("1", "bugfix", "componentA", "Fixed issue", "Detailed description", true)) + .thenReturn("git commit -m \"1 bugfix(componentA): Fixed issue\n\nDetailed description\""); + + //then + mockMvc.perform(post("/api/commit-flow/generate") + .contentType(MediaType.APPLICATION_JSON) + .content(requestBody)) + .andExpect(status().isOk()) // Oczekiwany status HTTP 200 + .andExpect(content().string("git commit -m \"1 bugfix(componentA): Fixed issue\n\nDetailed description\"")); // Oczekiwana odpowiedź + } +}