Skip to content

Commit

Permalink
[mc1arke#137][GitLab] Simplify GitLab tests with junit-jupiter-params
Browse files Browse the repository at this point in the history
GitlabMergeRequestDecoratorTest migrated to JUnit Jupiter API
  • Loading branch information
szpak committed Jul 1, 2022
1 parent 82828a5 commit 087b5d9
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 39 deletions.
1 change: 1 addition & 0 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,7 @@ dependencies {
implementation('com.squareup.okhttp3:logging-interceptor:4.10.0')
testImplementation(platform('org.junit:junit-bom:5.8.2'))
testImplementation('org.junit.jupiter:junit-jupiter')
testImplementation('org.junit.jupiter:junit-jupiter-params')
testImplementation('junit:junit:4.13.2')
testRuntimeOnly('org.junit.vintage:junit-vintage-engine')
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,8 +36,11 @@
import com.github.mc1arke.sonarqube.plugin.ce.pullrequest.report.AnalysisIssueSummary;
import com.github.mc1arke.sonarqube.plugin.ce.pullrequest.report.AnalysisSummary;
import com.github.mc1arke.sonarqube.plugin.ce.pullrequest.report.ReportGenerator;
import org.junit.Before;
import org.junit.Test;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.Arguments;
import org.junit.jupiter.params.provider.MethodSource;
import org.mockito.ArgumentCaptor;
import org.sonar.api.ce.posttask.QualityGate;
import org.sonar.api.issue.Issue;
Expand All @@ -56,6 +59,7 @@
import java.util.Collections;
import java.util.Optional;
import java.util.stream.Collectors;
import java.util.stream.Stream;

import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.assertThatThrownBy;
Expand All @@ -69,7 +73,7 @@
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;

public class GitlabMergeRequestDecoratorTest {
class GitlabMergeRequestDecoratorTest {

private static final long MERGE_REQUEST_IID = 123;
private static final long PROJECT_ID = 101;
Expand Down Expand Up @@ -101,8 +105,8 @@ public class GitlabMergeRequestDecoratorTest {

private final GitlabMergeRequestDecorator underTest = new GitlabMergeRequestDecorator(scmInfoRepository, gitlabClientFactory, reportGenerator, markdownFormatterFactory);

@Before
public void setUp() throws IOException {
@BeforeEach
void setUp() throws IOException {
when(analysisSummary.format(any())).thenReturn("Summary Comment");
when(reportGenerator.createAnalysisSummary(any())).thenReturn(analysisSummary);
AnalysisIssueSummary analysisIssueSummary = mock(AnalysisIssueSummary.class);
Expand Down Expand Up @@ -646,11 +650,15 @@ public void shouldSubmitSuccessfulPipelineStatusAndResolvedSummaryCommentOnSucce
PipelineStatus.State.SUCCESS, "https://sonarqube.dummy/dashboard?id=" + PROJECT_KEY + "&pullRequest=" + MERGE_REQUEST_IID, null, null));
}

@Test
public void shouldSubmitFailedPipelineStatusAndUnresolvedSummaryCommentOnFailedAnalysis() throws IOException {
@SuppressWarnings({"OptionalUsedAsFieldOrParameterType", "unused"})
@MethodSource
@ParameterizedTest //https://github.com/mc1arke/sonarqube-community-branch-plugin/issues/137
void shouldSubmitRequestedPipelineStatusBasedOnPropertiesAndUnresolvedSummaryCommentOnFailedAnalysis(
Optional<String> dontFailPipelinePropertyValue, PipelineStatus.State expectedSentPipelineStatus, String description) throws IOException {
when(analysisDetails.getQualityGateStatus()).thenReturn(QualityGate.Status.ERROR);
when(analysisDetails.getCommitSha()).thenReturn("other sha");
when(analysisDetails.getScannerProperty("com.github.mc1arke.sonarqube.plugin.branch.pullrequest.gitlab.pipelineId")).thenReturn(Optional.of("11"));
when(analysisDetails.getScannerProperty("com.github.mc1arke.sonarqube.plugin.branch.pullrequest.gitlab.dontFailPipeline")).thenReturn(dontFailPipelinePropertyValue);

when(analysisSummary.format(any())).thenReturn("Different Summary comment");
when(analysisSummary.getDashboardUrl()).thenReturn("https://sonarqube2.dummy/dashboard?id=projectKey&pullRequest=123");
Expand All @@ -674,40 +682,16 @@ public void shouldSubmitFailedPipelineStatusAndUnresolvedSummaryCommentOnFailedA
assertThat(pipelineStatusArgumentCaptor.getValue())
.usingRecursiveComparison()
.isEqualTo(new PipelineStatus("SonarQube", "SonarQube Status",
PipelineStatus.State.FAILED, "https://sonarqube2.dummy/dashboard?id=" + PROJECT_KEY + "&pullRequest=" + MERGE_REQUEST_IID, BigDecimal.TEN, 11L));
expectedSentPipelineStatus, "https://sonarqube2.dummy/dashboard?id=" + PROJECT_KEY + "&pullRequest=" + MERGE_REQUEST_IID, BigDecimal.TEN, 11L));
}

//TODO: Masive duplication - use junit-jupiter-params
@Test //https://github.com/mc1arke/sonarqube-community-branch-plugin/issues/137
public void shouldSubmitPassedPipelineStatusIfPipelineFailingIsDisabledAndUnresolvedSummaryCommentOnFailedAnalysis() throws IOException {
when(analysisDetails.getQualityGateStatus()).thenReturn(QualityGate.Status.ERROR);
when(analysisDetails.getCommitSha()).thenReturn("other sha");
when(analysisDetails.getScannerProperty("com.github.mc1arke.sonarqube.plugin.branch.pullrequest.gitlab.pipelineId")).thenReturn(Optional.of("11"));
when(analysisDetails.getScannerProperty("com.github.mc1arke.sonarqube.plugin.branch.pullrequest.gitlab.dontFailPipeline")).thenReturn(Optional.of("true"));

when(analysisSummary.format(any())).thenReturn("Different Summary comment");
when(analysisSummary.getDashboardUrl()).thenReturn("https://sonarqube2.dummy/dashboard?id=projectKey&pullRequest=123");
when(analysisSummary.getNewCoverage()).thenReturn(BigDecimal.TEN);

Discussion discussion = mock(Discussion.class);
when(discussion.getId()).thenReturn("dicussion id 2");
when(gitlabClient.addMergeRequestDiscussion(anyLong(), anyLong(), any())).thenReturn(discussion);

underTest.decorateQualityGateStatus(analysisDetails, almSettingDto, projectAlmSettingDto);

ArgumentCaptor<MergeRequestNote> mergeRequestNoteArgumentCaptor = ArgumentCaptor.forClass(MergeRequestNote.class);
verify(gitlabClient).addMergeRequestDiscussion(eq(PROJECT_ID), eq(MERGE_REQUEST_IID), mergeRequestNoteArgumentCaptor.capture());
verify(gitlabClient, never()).resolveMergeRequestDiscussion(PROJECT_ID, MERGE_REQUEST_IID, discussion.getId());
ArgumentCaptor<PipelineStatus> pipelineStatusArgumentCaptor = ArgumentCaptor.forClass(PipelineStatus.class);
verify(gitlabClient).setMergeRequestPipelineStatus(eq(PROJECT_ID), eq("other sha"), pipelineStatusArgumentCaptor.capture());

assertThat(mergeRequestNoteArgumentCaptor.getValue())
.usingRecursiveComparison()
.isEqualTo(new MergeRequestNote("Different Summary comment"));
assertThat(pipelineStatusArgumentCaptor.getValue())
.usingRecursiveComparison()
.isEqualTo(new PipelineStatus("SonarQube", "SonarQube Status",
PipelineStatus.State.SUCCESS, "https://sonarqube2.dummy/dashboard?id=" + PROJECT_KEY + "&pullRequest=" + MERGE_REQUEST_IID, BigDecimal.TEN, 11L));
@SuppressWarnings("unused") //used by @ParameterizedTest
private static Stream<Arguments> shouldSubmitRequestedPipelineStatusBasedOnPropertiesAndUnresolvedSummaryCommentOnFailedAnalysis() {
return Stream.of(
Arguments.of(Optional.empty(), PipelineStatus.State.FAILED, "dontFailPipeline not defined"),
Arguments.of(Optional.of("true"), PipelineStatus.State.SUCCESS, "dontFailPipeline == true"),
Arguments.of(Optional.of("false"), PipelineStatus.State.FAILED, "dontFailPipeline == false")
);
}

@Test
Expand Down

0 comments on commit 087b5d9

Please sign in to comment.