1
0
mirror of https://github.com/mc1arke/sonarqube-community-branch-plugin.git synced 2025-02-19 19:10:33 +02:00

Clean-up unit tests for CommunityBranchPlugin class

The tests for CommunityBranchPlugin were using argument captors against
repeated calls to the varargs `addExtensions` method, but were only
verifying some of the calls, and were not taking into account the types
passed into the methods. Version 5 of Mockito has a slight change in how
it handles varargs capturing, so will not correctly match the varargs
invocations where the same matcher has been used to try and match a
subset of arguments, or where the method is only using one argument for
the varargs section. By switching to verifying all the values directly
on each method call the tests now provide meaningful coverage as well as
allowing for a clean upgrade to Mockito 5.
This commit is contained in:
Michael Clarke 2023-03-22 17:28:12 +00:00 committed by Michael Clarke
parent e548bf8a26
commit f4ff85164e

View File

@ -1,5 +1,5 @@
/*
* Copyright (C) 2020-2022 Michael Clarke
* Copyright (C) 2020-2023 Michael Clarke
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
@ -18,31 +18,59 @@
*/
package com.github.mc1arke.sonarqube.plugin;
import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import java.util.Arrays;
import java.util.List;
import org.junit.jupiter.api.Test;
import org.mockito.ArgumentCaptor;
import org.mockito.Mockito;
import org.sonar.api.Plugin;
import org.sonar.api.SonarQubeSide;
import org.sonar.core.extension.CoreExtension;
import com.github.mc1arke.sonarqube.plugin.almclient.DefaultLinkHeaderReader;
import com.github.mc1arke.sonarqube.plugin.almclient.azuredevops.DefaultAzureDevopsClientFactory;
import com.github.mc1arke.sonarqube.plugin.almclient.bitbucket.DefaultBitbucketClientFactory;
import com.github.mc1arke.sonarqube.plugin.almclient.bitbucket.HttpClientBuilderFactory;
import com.github.mc1arke.sonarqube.plugin.almclient.github.DefaultGithubClientFactory;
import com.github.mc1arke.sonarqube.plugin.almclient.github.v3.DefaultUrlConnectionProvider;
import com.github.mc1arke.sonarqube.plugin.almclient.github.v3.RestApplicationAuthenticationProvider;
import com.github.mc1arke.sonarqube.plugin.almclient.github.v4.DefaultGraphqlProvider;
import com.github.mc1arke.sonarqube.plugin.almclient.gitlab.DefaultGitlabClientFactory;
import com.github.mc1arke.sonarqube.plugin.ce.CommunityReportAnalysisComponentProvider;
import com.github.mc1arke.sonarqube.plugin.scanner.BranchConfigurationFactory;
import com.github.mc1arke.sonarqube.plugin.scanner.CommunityBranchConfigurationLoader;
import com.github.mc1arke.sonarqube.plugin.scanner.CommunityBranchParamsValidator;
import com.github.mc1arke.sonarqube.plugin.scanner.CommunityProjectBranchesLoader;
import com.github.mc1arke.sonarqube.plugin.scanner.ScannerPullRequestPropertySensor;
import com.github.mc1arke.sonarqube.plugin.scanner.autoconfiguration.AzureDevopsAutoConfigurer;
import com.github.mc1arke.sonarqube.plugin.scanner.autoconfiguration.BitbucketPipelinesAutoConfigurer;
import com.github.mc1arke.sonarqube.plugin.scanner.autoconfiguration.CirrusCiAutoConfigurer;
import com.github.mc1arke.sonarqube.plugin.scanner.autoconfiguration.CodeMagicAutoConfigurer;
import com.github.mc1arke.sonarqube.plugin.scanner.autoconfiguration.GithubActionsAutoConfigurer;
import com.github.mc1arke.sonarqube.plugin.scanner.autoconfiguration.GitlabCiAutoConfigurer;
import com.github.mc1arke.sonarqube.plugin.scanner.autoconfiguration.JenkinsAutoConfigurer;
import com.github.mc1arke.sonarqube.plugin.server.CommunityBranchFeatureExtension;
import com.github.mc1arke.sonarqube.plugin.server.CommunityBranchSupportDelegate;
import com.github.mc1arke.sonarqube.plugin.server.MonoRepoFeature;
import com.github.mc1arke.sonarqube.plugin.server.pullrequest.validator.AzureDevopsValidator;
import com.github.mc1arke.sonarqube.plugin.server.pullrequest.validator.BitbucketValidator;
import com.github.mc1arke.sonarqube.plugin.server.pullrequest.validator.GithubValidator;
import com.github.mc1arke.sonarqube.plugin.server.pullrequest.validator.GitlabValidator;
import com.github.mc1arke.sonarqube.plugin.server.pullrequest.ws.binding.action.DeleteBindingAction;
import com.github.mc1arke.sonarqube.plugin.server.pullrequest.ws.binding.action.SetAzureBindingAction;
import com.github.mc1arke.sonarqube.plugin.server.pullrequest.ws.binding.action.SetBitbucketBindingAction;
import com.github.mc1arke.sonarqube.plugin.server.pullrequest.ws.binding.action.SetBitbucketCloudBindingAction;
import com.github.mc1arke.sonarqube.plugin.server.pullrequest.ws.binding.action.SetGithubBindingAction;
import com.github.mc1arke.sonarqube.plugin.server.pullrequest.ws.binding.action.SetGitlabBindingAction;
import com.github.mc1arke.sonarqube.plugin.server.pullrequest.ws.binding.action.ValidateBindingAction;
import com.github.mc1arke.sonarqube.plugin.server.pullrequest.ws.pullrequest.PullRequestWs;
import com.github.mc1arke.sonarqube.plugin.server.pullrequest.ws.pullrequest.action.DeleteAction;
import com.github.mc1arke.sonarqube.plugin.server.pullrequest.ws.pullrequest.action.ListAction;
import org.junit.jupiter.api.Test;
import org.mockito.Mockito;
import org.sonar.api.Plugin;
import org.sonar.api.SonarQubeSide;
import org.sonar.api.config.PropertyDefinition;
import org.sonar.core.extension.CoreExtension;
import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
/**
* @author Michael Clarke
@ -58,13 +86,13 @@ class CommunityBranchPluginTest {
testCase.define(context);
final ArgumentCaptor<Object> argumentCaptor = ArgumentCaptor.forClass(Object.class);
verify(context)
.addExtensions(argumentCaptor.capture(), argumentCaptor.capture(), argumentCaptor.capture());
assertThat(argumentCaptor.getAllValues().subList(0, 4)).isEqualTo(Arrays.asList(CommunityProjectBranchesLoader.class,
CommunityBranchConfigurationLoader.class, CommunityBranchParamsValidator.class, ScannerPullRequestPropertySensor.class));
verify(context).addExtensions(CommunityProjectBranchesLoader.class,
CommunityBranchConfigurationLoader.class, CommunityBranchParamsValidator.class,
ScannerPullRequestPropertySensor.class, BranchConfigurationFactory.class,
AzureDevopsAutoConfigurer.class, BitbucketPipelinesAutoConfigurer.class,
CirrusCiAutoConfigurer.class, CodeMagicAutoConfigurer.class,
GithubActionsAutoConfigurer.class, GitlabCiAutoConfigurer.class,
JenkinsAutoConfigurer.class);
}
@Test
@ -88,11 +116,8 @@ class CommunityBranchPluginTest {
testCase.load(context);
final ArgumentCaptor<Class<?>> argumentCaptor = ArgumentCaptor.forClass(Class.class);
verify(context, times(2)).addExtensions(argumentCaptor.capture(), argumentCaptor.capture());
assertThat(argumentCaptor.getAllValues().subList(0, 1)).isEqualTo(List.of(CommunityReportAnalysisComponentProvider.class));
verify(context).addExtensions(CommunityReportAnalysisComponentProvider.class);
verify(context).addExtensions(any(PropertyDefinition.class), eq(MonoRepoFeature.class));
}
@ -105,12 +130,36 @@ class CommunityBranchPluginTest {
testCase.load(context);
final ArgumentCaptor<Object> argumentCaptor = ArgumentCaptor.forClass(Object.class);
verify(context, times(2)).addExtensions(argumentCaptor.capture(), argumentCaptor.capture());
assertThat(argumentCaptor.getAllValues()).hasSize(29);
verify(context).addExtensions(eq(CommunityBranchFeatureExtension.class),
eq(CommunityBranchSupportDelegate.class),
eq(DeleteBindingAction.class),
eq(SetGithubBindingAction.class),
eq(SetAzureBindingAction.class),
eq(SetBitbucketBindingAction.class),
eq(SetBitbucketCloudBindingAction.class),
eq(SetGitlabBindingAction.class),
eq(ValidateBindingAction.class),
eq(DeleteAction.class),
eq(ListAction.class),
eq(PullRequestWs.class),
eq(GithubValidator.class),
eq(DefaultGraphqlProvider.class),
eq(DefaultGithubClientFactory.class),
eq(DefaultLinkHeaderReader.class),
eq(DefaultUrlConnectionProvider.class),
eq(RestApplicationAuthenticationProvider.class),
eq(HttpClientBuilderFactory.class),
eq(DefaultBitbucketClientFactory.class),
eq(BitbucketValidator.class),
eq(GitlabValidator.class),
eq(DefaultGitlabClientFactory.class),
eq(DefaultAzureDevopsClientFactory.class),
eq(AzureDevopsValidator.class),
any(PropertyDefinition.class),
any(PropertyDefinition.class));
assertThat(argumentCaptor.getAllValues().subList(0, 2)).isEqualTo(List.of(CommunityBranchFeatureExtension.class, CommunityBranchSupportDelegate.class));
verify(context).addExtensions(any(PropertyDefinition.class), eq(MonoRepoFeature.class));
}
@Test