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:
parent
e548bf8a26
commit
f4ff85164e
@ -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
|
||||
|
Loading…
x
Reference in New Issue
Block a user