|
|
@@ -24,7 +24,9 @@ import com.tngtech.java.junit.dataprovider.DataProvider; |
|
|
|
import com.tngtech.java.junit.dataprovider.DataProviderRunner; |
|
|
|
import com.tngtech.java.junit.dataprovider.UseDataProvider; |
|
|
|
import java.util.Date; |
|
|
|
import java.util.HashMap; |
|
|
|
import java.util.List; |
|
|
|
import java.util.Map; |
|
|
|
import java.util.Random; |
|
|
|
import javax.annotation.Nullable; |
|
|
|
import org.apache.commons.lang.RandomStringUtils; |
|
|
@@ -58,9 +60,12 @@ import org.sonar.scanner.protocol.output.ScannerReport; |
|
|
|
|
|
|
|
import static com.google.common.collect.ImmutableList.of; |
|
|
|
import static java.util.Arrays.asList; |
|
|
|
import static java.util.stream.Collectors.toList; |
|
|
|
import static org.assertj.core.api.Assertions.assertThat; |
|
|
|
import static org.assertj.core.api.ThrowableAssert.catchThrowable; |
|
|
|
import static org.assertj.core.data.MapEntry.entry; |
|
|
|
import static org.mockito.ArgumentMatchers.any; |
|
|
|
import static org.mockito.Mockito.doAnswer; |
|
|
|
import static org.mockito.Mockito.doThrow; |
|
|
|
import static org.mockito.Mockito.inOrder; |
|
|
|
import static org.mockito.Mockito.mock; |
|
|
@@ -89,7 +94,7 @@ public class PostProjectAnalysisTasksExecutorTest { |
|
|
|
private String organizationKey = organizationUuid + "_key"; |
|
|
|
private String organizationName = organizationUuid + "_name"; |
|
|
|
private System2 system2 = mock(System2.class); |
|
|
|
private ArgumentCaptor<PostProjectAnalysisTask.ProjectAnalysis> projectAnalysisArgumentCaptor = ArgumentCaptor.forClass(PostProjectAnalysisTask.ProjectAnalysis.class); |
|
|
|
private ArgumentCaptor<PostProjectAnalysisTask.Context> taskContextCaptor = ArgumentCaptor.forClass(PostProjectAnalysisTask.Context.class); |
|
|
|
private CeTask.Component component = new CeTask.Component("component uuid", "component key", "component name"); |
|
|
|
private CeTask ceTask = new CeTask.Builder() |
|
|
|
.setOrganizationUuid(organizationUuid) |
|
|
@@ -138,15 +143,16 @@ public class PostProjectAnalysisTasksExecutorTest { |
|
|
|
new PostProjectAnalysisTasksExecutor( |
|
|
|
ceTask, analysisMetadataHolder, qualityGateHolder, qualityGateStatusHolder, reportReader, |
|
|
|
system2, new PostProjectAnalysisTask[] {postProjectAnalysisTask1, postProjectAnalysisTask2}) |
|
|
|
.finished(allStepsExecuted); |
|
|
|
.finished(allStepsExecuted); |
|
|
|
|
|
|
|
inOrder.verify(postProjectAnalysisTask1).finished(projectAnalysisArgumentCaptor.capture()); |
|
|
|
inOrder.verify(postProjectAnalysisTask1).finished(taskContextCaptor.capture()); |
|
|
|
inOrder.verify(postProjectAnalysisTask1).getDescription(); |
|
|
|
inOrder.verify(postProjectAnalysisTask2).finished(projectAnalysisArgumentCaptor.capture()); |
|
|
|
inOrder.verify(postProjectAnalysisTask2).finished(taskContextCaptor.capture()); |
|
|
|
inOrder.verify(postProjectAnalysisTask2).getDescription(); |
|
|
|
inOrder.verifyNoMoreInteractions(); |
|
|
|
|
|
|
|
List<PostProjectAnalysisTask.ProjectAnalysis> allValues = projectAnalysisArgumentCaptor.getAllValues(); |
|
|
|
ArgumentCaptor<PostProjectAnalysisTask.Context> taskContextCaptor = this.taskContextCaptor; |
|
|
|
List<PostProjectAnalysisTask.ProjectAnalysis> allValues = getAllProjectAnalyses(taskContextCaptor); |
|
|
|
assertThat(allValues).hasSize(2); |
|
|
|
assertThat(allValues.get(0)).isSameAs(allValues.get(1)); |
|
|
|
|
|
|
@@ -166,9 +172,9 @@ public class PostProjectAnalysisTasksExecutorTest { |
|
|
|
new OrganizationDto().setKey(organizationKey).setName(organizationName).setUuid(organizationUuid).setDefaultQualityGateUuid("foo"))); |
|
|
|
underTest.finished(allStepsExecuted); |
|
|
|
|
|
|
|
verify(postProjectAnalysisTask).finished(projectAnalysisArgumentCaptor.capture()); |
|
|
|
verify(postProjectAnalysisTask).finished(taskContextCaptor.capture()); |
|
|
|
|
|
|
|
assertThat(projectAnalysisArgumentCaptor.getValue().getOrganization()).isEmpty(); |
|
|
|
assertThat(taskContextCaptor.getValue().getProjectAnalysis().getOrganization()).isEmpty(); |
|
|
|
} |
|
|
|
|
|
|
|
@Test |
|
|
@@ -180,9 +186,9 @@ public class PostProjectAnalysisTasksExecutorTest { |
|
|
|
new OrganizationDto().setKey(organizationKey).setName(organizationName).setUuid(organizationUuid).setDefaultQualityGateUuid("foo"))); |
|
|
|
underTest.finished(allStepsExecuted); |
|
|
|
|
|
|
|
verify(postProjectAnalysisTask).finished(projectAnalysisArgumentCaptor.capture()); |
|
|
|
verify(postProjectAnalysisTask).finished(taskContextCaptor.capture()); |
|
|
|
|
|
|
|
org.sonar.api.ce.posttask.Organization organization = projectAnalysisArgumentCaptor.getValue().getOrganization().get(); |
|
|
|
org.sonar.api.ce.posttask.Organization organization = taskContextCaptor.getValue().getProjectAnalysis().getOrganization().get(); |
|
|
|
assertThat(organization.getKey()).isEqualTo(organizationKey); |
|
|
|
assertThat(organization.getName()).isEqualTo(organizationName); |
|
|
|
} |
|
|
@@ -192,9 +198,9 @@ public class PostProjectAnalysisTasksExecutorTest { |
|
|
|
public void CeTask_status_depends_on_finished_method_argument_is_true_or_false(boolean allStepsExecuted) { |
|
|
|
underTest.finished(allStepsExecuted); |
|
|
|
|
|
|
|
verify(postProjectAnalysisTask).finished(projectAnalysisArgumentCaptor.capture()); |
|
|
|
verify(postProjectAnalysisTask).finished(taskContextCaptor.capture()); |
|
|
|
|
|
|
|
assertThat(projectAnalysisArgumentCaptor.getValue().getCeTask().getStatus()) |
|
|
|
assertThat(taskContextCaptor.getValue().getProjectAnalysis().getCeTask().getStatus()) |
|
|
|
.isEqualTo( |
|
|
|
allStepsExecuted ? org.sonar.api.ce.posttask.CeTask.Status.SUCCESS : org.sonar.api.ce.posttask.CeTask.Status.FAILED); |
|
|
|
} |
|
|
@@ -203,9 +209,9 @@ public class PostProjectAnalysisTasksExecutorTest { |
|
|
|
public void ceTask_uuid_is_UUID_of_CeTask() { |
|
|
|
underTest.finished(true); |
|
|
|
|
|
|
|
verify(postProjectAnalysisTask).finished(projectAnalysisArgumentCaptor.capture()); |
|
|
|
verify(postProjectAnalysisTask).finished(taskContextCaptor.capture()); |
|
|
|
|
|
|
|
assertThat(projectAnalysisArgumentCaptor.getValue().getCeTask().getId()) |
|
|
|
assertThat(taskContextCaptor.getValue().getProjectAnalysis().getCeTask().getId()) |
|
|
|
.isEqualTo(ceTask.getUuid()); |
|
|
|
} |
|
|
|
|
|
|
@@ -213,9 +219,9 @@ public class PostProjectAnalysisTasksExecutorTest { |
|
|
|
public void project_uuid_key_and_name_come_from_CeTask() { |
|
|
|
underTest.finished(true); |
|
|
|
|
|
|
|
verify(postProjectAnalysisTask).finished(projectAnalysisArgumentCaptor.capture()); |
|
|
|
verify(postProjectAnalysisTask).finished(taskContextCaptor.capture()); |
|
|
|
|
|
|
|
Project project = projectAnalysisArgumentCaptor.getValue().getProject(); |
|
|
|
Project project = taskContextCaptor.getValue().getProjectAnalysis().getProject(); |
|
|
|
assertThat(project.getUuid()).isEqualTo(ceTask.getComponent().get().getUuid()); |
|
|
|
assertThat(project.getKey()).isEqualTo(ceTask.getComponent().get().getKey().get()); |
|
|
|
assertThat(project.getName()).isEqualTo(ceTask.getComponent().get().getName().get()); |
|
|
@@ -228,9 +234,9 @@ public class PostProjectAnalysisTasksExecutorTest { |
|
|
|
|
|
|
|
underTest.finished(true); |
|
|
|
|
|
|
|
verify(postProjectAnalysisTask).finished(projectAnalysisArgumentCaptor.capture()); |
|
|
|
verify(postProjectAnalysisTask).finished(taskContextCaptor.capture()); |
|
|
|
|
|
|
|
assertThat(projectAnalysisArgumentCaptor.getValue().getDate()) |
|
|
|
assertThat(taskContextCaptor.getValue().getProjectAnalysis().getDate()) |
|
|
|
.isEqualTo(new Date(analysisMetadataHolder.getAnalysisDate())); |
|
|
|
} |
|
|
|
|
|
|
@@ -241,9 +247,9 @@ public class PostProjectAnalysisTasksExecutorTest { |
|
|
|
|
|
|
|
underTest.finished(false); |
|
|
|
|
|
|
|
verify(postProjectAnalysisTask).finished(projectAnalysisArgumentCaptor.capture()); |
|
|
|
verify(postProjectAnalysisTask).finished(taskContextCaptor.capture()); |
|
|
|
|
|
|
|
assertThat(projectAnalysisArgumentCaptor.getValue().getDate()).isEqualTo(new Date(now)); |
|
|
|
assertThat(taskContextCaptor.getValue().getProjectAnalysis().getDate()).isEqualTo(new Date(now)); |
|
|
|
} |
|
|
|
|
|
|
|
@Test |
|
|
@@ -253,11 +259,11 @@ public class PostProjectAnalysisTasksExecutorTest { |
|
|
|
|
|
|
|
underTest.finished(true); |
|
|
|
|
|
|
|
verify(postProjectAnalysisTask).finished(projectAnalysisArgumentCaptor.capture()); |
|
|
|
verify(postProjectAnalysisTask).finished(taskContextCaptor.capture()); |
|
|
|
|
|
|
|
assertThat(projectAnalysisArgumentCaptor.getValue().getAnalysis().get().getDate()) |
|
|
|
assertThat(taskContextCaptor.getValue().getProjectAnalysis().getAnalysis().get().getDate()) |
|
|
|
.isEqualTo(new Date(analysisMetadataHolder.getAnalysisDate())); |
|
|
|
assertThat(projectAnalysisArgumentCaptor.getValue().getAnalysis().get().getAnalysisUuid()) |
|
|
|
assertThat(taskContextCaptor.getValue().getProjectAnalysis().getAnalysis().get().getAnalysisUuid()) |
|
|
|
.isEqualTo(analysisMetadataHolder.getUuid()); |
|
|
|
} |
|
|
|
|
|
|
@@ -265,9 +271,9 @@ public class PostProjectAnalysisTasksExecutorTest { |
|
|
|
public void analysis_is_empty_when_not_set_in_AnalysisMetadataHolder() { |
|
|
|
underTest.finished(false); |
|
|
|
|
|
|
|
verify(postProjectAnalysisTask).finished(projectAnalysisArgumentCaptor.capture()); |
|
|
|
verify(postProjectAnalysisTask).finished(taskContextCaptor.capture()); |
|
|
|
|
|
|
|
assertThat(projectAnalysisArgumentCaptor.getValue().getAnalysis()).isEmpty(); |
|
|
|
assertThat(taskContextCaptor.getValue().getProjectAnalysis().getAnalysis()).isEmpty(); |
|
|
|
} |
|
|
|
|
|
|
|
@Test |
|
|
@@ -276,9 +282,9 @@ public class PostProjectAnalysisTasksExecutorTest { |
|
|
|
|
|
|
|
underTest.finished(true); |
|
|
|
|
|
|
|
verify(postProjectAnalysisTask).finished(projectAnalysisArgumentCaptor.capture()); |
|
|
|
verify(postProjectAnalysisTask).finished(taskContextCaptor.capture()); |
|
|
|
|
|
|
|
assertThat(projectAnalysisArgumentCaptor.getValue().getBranch()).isEmpty(); |
|
|
|
assertThat(taskContextCaptor.getValue().getProjectAnalysis().getBranch()).isEmpty(); |
|
|
|
} |
|
|
|
|
|
|
|
@Test |
|
|
@@ -332,9 +338,9 @@ public class PostProjectAnalysisTasksExecutorTest { |
|
|
|
|
|
|
|
underTest.finished(true); |
|
|
|
|
|
|
|
verify(postProjectAnalysisTask).finished(projectAnalysisArgumentCaptor.capture()); |
|
|
|
verify(postProjectAnalysisTask).finished(taskContextCaptor.capture()); |
|
|
|
|
|
|
|
org.sonar.api.ce.posttask.Branch branch = projectAnalysisArgumentCaptor.getValue().getBranch().get(); |
|
|
|
org.sonar.api.ce.posttask.Branch branch = taskContextCaptor.getValue().getProjectAnalysis().getBranch().get(); |
|
|
|
assertThat(branch.isMain()).isFalse(); |
|
|
|
assertThat(branch.getName()).hasValue("feature/foo"); |
|
|
|
assertThat(branch.getType()).isEqualTo(BranchImpl.Type.SHORT); |
|
|
@@ -344,18 +350,18 @@ public class PostProjectAnalysisTasksExecutorTest { |
|
|
|
public void qualityGate_is_null_when_finished_method_argument_is_false() { |
|
|
|
underTest.finished(false); |
|
|
|
|
|
|
|
verify(postProjectAnalysisTask).finished(projectAnalysisArgumentCaptor.capture()); |
|
|
|
verify(postProjectAnalysisTask).finished(taskContextCaptor.capture()); |
|
|
|
|
|
|
|
assertThat(projectAnalysisArgumentCaptor.getValue().getQualityGate()).isNull(); |
|
|
|
assertThat(taskContextCaptor.getValue().getProjectAnalysis().getQualityGate()).isNull(); |
|
|
|
} |
|
|
|
|
|
|
|
@Test |
|
|
|
public void qualityGate_is_populated_when_finished_method_argument_is_true() { |
|
|
|
underTest.finished(true); |
|
|
|
|
|
|
|
verify(postProjectAnalysisTask).finished(projectAnalysisArgumentCaptor.capture()); |
|
|
|
verify(postProjectAnalysisTask).finished(taskContextCaptor.capture()); |
|
|
|
|
|
|
|
org.sonar.api.ce.posttask.QualityGate qualityGate = projectAnalysisArgumentCaptor.getValue().getQualityGate(); |
|
|
|
org.sonar.api.ce.posttask.QualityGate qualityGate = taskContextCaptor.getValue().getProjectAnalysis().getQualityGate(); |
|
|
|
assertThat(qualityGate.getStatus()).isEqualTo(org.sonar.api.ce.posttask.QualityGate.Status.OK); |
|
|
|
assertThat(qualityGate.getId()).isEqualTo(String.valueOf(QUALITY_GATE_ID)); |
|
|
|
assertThat(qualityGate.getName()).isEqualTo(QUALITY_GATE_NAME); |
|
|
@@ -367,12 +373,93 @@ public class PostProjectAnalysisTasksExecutorTest { |
|
|
|
reportReader.putContextProperties(asList(ScannerReport.ContextProperty.newBuilder().setKey("foo").setValue("bar").build())); |
|
|
|
underTest.finished(true); |
|
|
|
|
|
|
|
verify(postProjectAnalysisTask).finished(projectAnalysisArgumentCaptor.capture()); |
|
|
|
verify(postProjectAnalysisTask).finished(taskContextCaptor.capture()); |
|
|
|
|
|
|
|
org.sonar.api.ce.posttask.ScannerContext scannerContext = projectAnalysisArgumentCaptor.getValue().getScannerContext(); |
|
|
|
org.sonar.api.ce.posttask.ScannerContext scannerContext = taskContextCaptor.getValue().getProjectAnalysis().getScannerContext(); |
|
|
|
assertThat(scannerContext.getProperties()).containsExactly(entry("foo", "bar")); |
|
|
|
} |
|
|
|
|
|
|
|
@Test |
|
|
|
@UseDataProvider("booleanValues") |
|
|
|
public void logStatistics_add_fails_when_NPE_if_key_or_value_is_null(boolean allStepsExecuted) { |
|
|
|
underTest.finished(allStepsExecuted); |
|
|
|
|
|
|
|
verify(postProjectAnalysisTask).finished(taskContextCaptor.capture()); |
|
|
|
PostProjectAnalysisTask.LogStatistics logStatistics = taskContextCaptor.getValue().getLogStatistics(); |
|
|
|
|
|
|
|
assertThat(catchThrowable(() -> logStatistics.add(null, "foo"))) |
|
|
|
.isInstanceOf(NullPointerException.class) |
|
|
|
.hasMessage("Statistic has null key"); |
|
|
|
assertThat(catchThrowable(() -> logStatistics.add(null, null))) |
|
|
|
.isInstanceOf(NullPointerException.class) |
|
|
|
.hasMessage("Statistic has null key"); |
|
|
|
assertThat(catchThrowable(() -> logStatistics.add("bar", null))) |
|
|
|
.isInstanceOf(NullPointerException.class) |
|
|
|
.hasMessage("Statistic with key [bar] has null value"); |
|
|
|
} |
|
|
|
|
|
|
|
@Test |
|
|
|
@UseDataProvider("booleanValues") |
|
|
|
public void logStatistics_add_fails_with_IAE_if_key_is_time_or_status_ignoring_case(boolean allStepsExecuted) { |
|
|
|
underTest.finished(allStepsExecuted); |
|
|
|
|
|
|
|
verify(postProjectAnalysisTask).finished(taskContextCaptor.capture()); |
|
|
|
PostProjectAnalysisTask.LogStatistics logStatistics = taskContextCaptor.getValue().getLogStatistics(); |
|
|
|
|
|
|
|
for (String reservedKey : asList("time", "TIME", "TImE", "status", "STATUS", "STaTuS")) { |
|
|
|
assertThat(catchThrowable(() -> logStatistics.add(reservedKey, "foo"))) |
|
|
|
.isInstanceOf(IllegalArgumentException.class) |
|
|
|
.hasMessage("Statistic with key [" + reservedKey + "] is not accepted"); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
@Test |
|
|
|
@UseDataProvider("booleanValues") |
|
|
|
public void logStatistics_add_fails_with_IAE_if_same_key_with_exact_case_added_twice(boolean allStepsExecuted) { |
|
|
|
underTest.finished(allStepsExecuted); |
|
|
|
|
|
|
|
verify(postProjectAnalysisTask).finished(taskContextCaptor.capture()); |
|
|
|
PostProjectAnalysisTask.LogStatistics logStatistics = taskContextCaptor.getValue().getLogStatistics(); |
|
|
|
|
|
|
|
String key = RandomStringUtils.randomAlphabetic(10); |
|
|
|
logStatistics.add(key, new Object()); |
|
|
|
assertThat(catchThrowable(() -> logStatistics.add(key, "bar"))) |
|
|
|
.isInstanceOf(IllegalArgumentException.class) |
|
|
|
.hasMessage("Statistic with key [" + key + "] is already present"); |
|
|
|
} |
|
|
|
|
|
|
|
@Test |
|
|
|
@UseDataProvider("booleanValues") |
|
|
|
public void logStatistics_adds_statistics_to_end_of_task_log(boolean allStepsExecuted) { |
|
|
|
Map<String, Object> stats = new HashMap<>(); |
|
|
|
for (int i = 0; i <= new Random().nextInt(10); i++) { |
|
|
|
stats.put("statKey_" + i, "statVal_" + i); |
|
|
|
} |
|
|
|
PostProjectAnalysisTask logStatisticsTask = mock(PostProjectAnalysisTask.class); |
|
|
|
when(logStatisticsTask.getDescription()).thenReturn("PT1"); |
|
|
|
doAnswer(i -> { |
|
|
|
PostProjectAnalysisTask.Context context = i.getArgument(0); |
|
|
|
stats.forEach((k, v) -> context.getLogStatistics().add(k, v)); |
|
|
|
return null; |
|
|
|
}).when(logStatisticsTask) |
|
|
|
.finished(any(PostProjectAnalysisTask.Context.class)); |
|
|
|
|
|
|
|
new PostProjectAnalysisTasksExecutor( |
|
|
|
ceTask, analysisMetadataHolder, qualityGateHolder, qualityGateStatusHolder, reportReader, |
|
|
|
system2, new PostProjectAnalysisTask[] {logStatisticsTask}) |
|
|
|
.finished(allStepsExecuted); |
|
|
|
|
|
|
|
verify(logStatisticsTask).finished(taskContextCaptor.capture()); |
|
|
|
|
|
|
|
assertThat(logTester.logs()).hasSize(1); |
|
|
|
List<String> logs = logTester.logs(LoggerLevel.INFO); |
|
|
|
assertThat(logs).hasSize(1); |
|
|
|
StringBuilder expectedLog = new StringBuilder("^PT1 "); |
|
|
|
stats.forEach((k,v) -> expectedLog.append("\\| " + k + "=" + v +" ")); |
|
|
|
expectedLog.append("\\| status=SUCCESS \\| time=\\d+ms$"); |
|
|
|
assertThat(logs.get(0)).matches(expectedLog.toString()); |
|
|
|
} |
|
|
|
|
|
|
|
@Test |
|
|
|
@UseDataProvider("booleanValues") |
|
|
|
public void finished_does_not_fail_if_listener_throws_exception_and_execute_subsequent_listeners(boolean allStepsExecuted) { |
|
|
@@ -383,18 +470,18 @@ public class PostProjectAnalysisTasksExecutorTest { |
|
|
|
|
|
|
|
doThrow(new RuntimeException("Faking a listener throws an exception")) |
|
|
|
.when(postProjectAnalysisTask2) |
|
|
|
.finished(any(PostProjectAnalysisTask.ProjectAnalysis.class)); |
|
|
|
.finished(any(PostProjectAnalysisTask.Context.class)); |
|
|
|
|
|
|
|
new PostProjectAnalysisTasksExecutor( |
|
|
|
ceTask, analysisMetadataHolder, qualityGateHolder, qualityGateStatusHolder, reportReader, |
|
|
|
system2, new PostProjectAnalysisTask[] {postProjectAnalysisTask1, postProjectAnalysisTask2, postProjectAnalysisTask3}) |
|
|
|
.finished(allStepsExecuted); |
|
|
|
.finished(allStepsExecuted); |
|
|
|
|
|
|
|
inOrder.verify(postProjectAnalysisTask1).finished(projectAnalysisArgumentCaptor.capture()); |
|
|
|
inOrder.verify(postProjectAnalysisTask1).finished(taskContextCaptor.capture()); |
|
|
|
inOrder.verify(postProjectAnalysisTask1).getDescription(); |
|
|
|
inOrder.verify(postProjectAnalysisTask2).finished(projectAnalysisArgumentCaptor.capture()); |
|
|
|
inOrder.verify(postProjectAnalysisTask2).finished(taskContextCaptor.capture()); |
|
|
|
inOrder.verify(postProjectAnalysisTask2).getDescription(); |
|
|
|
inOrder.verify(postProjectAnalysisTask3).finished(projectAnalysisArgumentCaptor.capture()); |
|
|
|
inOrder.verify(postProjectAnalysisTask3).finished(taskContextCaptor.capture()); |
|
|
|
inOrder.verify(postProjectAnalysisTask3).getDescription(); |
|
|
|
inOrder.verifyNoMoreInteractions(); |
|
|
|
|
|
|
@@ -423,7 +510,15 @@ public class PostProjectAnalysisTasksExecutorTest { |
|
|
|
private static PostProjectAnalysisTask newPostProjectAnalysisTask(String description) { |
|
|
|
PostProjectAnalysisTask res = mock(PostProjectAnalysisTask.class); |
|
|
|
when(res.getDescription()).thenReturn(description); |
|
|
|
doAnswer(i -> null).when(res).finished(any(PostProjectAnalysisTask.Context.class)); |
|
|
|
return res; |
|
|
|
} |
|
|
|
|
|
|
|
private static List<PostProjectAnalysisTask.ProjectAnalysis> getAllProjectAnalyses(ArgumentCaptor<PostProjectAnalysisTask.Context> taskContextCaptor) { |
|
|
|
return taskContextCaptor.getAllValues() |
|
|
|
.stream() |
|
|
|
.map(PostProjectAnalysisTask.Context::getProjectAnalysis) |
|
|
|
.collect(toList()); |
|
|
|
} |
|
|
|
|
|
|
|
} |