package org.onap.vid.job.command; import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.MockitoAnnotations; import org.onap.portalsdk.core.service.DataAccessService; import org.onap.vid.job.Job.JobStatus; import org.onap.vid.job.impl.JobDaoImpl; import org.onap.vid.utils.DaoUtils; import org.testng.annotations.BeforeClass; import org.testng.annotations.DataProvider; import org.testng.annotations.Test; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.UUID; import java.util.stream.Collectors; import static org.mockito.ArgumentMatchers.*; import static org.mockito.Mockito.when; import static org.testng.AssertJUnit.assertEquals; public class WatchChildrenJobsBLTest { @Mock private DataAccessService dataAccessService; @InjectMocks private WatchChildrenJobsBL watchChildrenJobsBL; @BeforeClass public void initMocks() { MockitoAnnotations.initMocks(this); } public static Object[][] dataProviderForChildrenStatusOnly() { return new Object[][]{ {Arrays.asList(JobStatus.STOPPED, JobStatus.COMPLETED_WITH_NO_ACTION, JobStatus.COMPLETED), JobStatus.COMPLETED_WITH_ERRORS}, {Arrays.asList(JobStatus.COMPLETED, JobStatus.FAILED, JobStatus.COMPLETED_WITH_NO_ACTION), JobStatus.COMPLETED_WITH_ERRORS}, {Arrays.asList(null, JobStatus.COMPLETED), JobStatus.COMPLETED_WITH_ERRORS}, {Arrays.asList(null, JobStatus.IN_PROGRESS), JobStatus.IN_PROGRESS}, {Arrays.asList(null, JobStatus.FAILED), JobStatus.FAILED}, {new ArrayList<>(), JobStatus.COMPLETED_WITH_NO_ACTION} }; } @DataProvider public static Object[][] childrenStatusDataProvider() { List result = new ArrayList<>(); result.addAll(Arrays.asList(dataProviderForChildrenStatusOnly())); result.addAll(Arrays.asList(inputsStatusAndExpectedOutputDataProvider())); return result.toArray(new Object[result.size()][]); } @DataProvider public static Object[][] inputsStatusAndExpectedOutputDataProvider() { return new Object[][]{ {Arrays.asList(JobStatus.COMPLETED, JobStatus.COMPLETED), JobStatus.COMPLETED}, {Arrays.asList(JobStatus.COMPLETED, JobStatus.COMPLETED_WITH_NO_ACTION), JobStatus.COMPLETED}, {Arrays.asList(JobStatus.FAILED, JobStatus.COMPLETED_WITH_NO_ACTION), JobStatus.FAILED}, {Arrays.asList(JobStatus.FAILED, JobStatus.COMPLETED), JobStatus.COMPLETED_WITH_ERRORS}, {Arrays.asList(JobStatus.RESOURCE_IN_PROGRESS, JobStatus.FAILED), JobStatus.IN_PROGRESS}, {Arrays.asList(JobStatus.PAUSE, JobStatus.FAILED), JobStatus.IN_PROGRESS}, {Arrays.asList(JobStatus.PENDING, JobStatus.FAILED), JobStatus.IN_PROGRESS}, {Arrays.asList(JobStatus.IN_PROGRESS, JobStatus.COMPLETED), JobStatus.IN_PROGRESS}, {Arrays.asList(JobStatus.IN_PROGRESS, JobStatus.IN_PROGRESS), JobStatus.IN_PROGRESS}, {Arrays.asList(JobStatus.COMPLETED, JobStatus.COMPLETED_WITH_ERRORS), JobStatus.COMPLETED_WITH_ERRORS}, {Arrays.asList(JobStatus.COMPLETED_WITH_ERRORS, JobStatus.FAILED), JobStatus.COMPLETED_WITH_ERRORS}, {Arrays.asList(JobStatus.COMPLETED_WITH_ERRORS, JobStatus.COMPLETED_WITH_ERRORS), JobStatus.COMPLETED_WITH_ERRORS}, {Arrays.asList(JobStatus.COMPLETED_WITH_ERRORS, JobStatus.COMPLETED_WITH_NO_ACTION), JobStatus.COMPLETED_WITH_ERRORS}, {Arrays.asList(JobStatus.COMPLETED_WITH_NO_ACTION, JobStatus.COMPLETED_WITH_NO_ACTION), JobStatus.COMPLETED_WITH_NO_ACTION}, }; } @Test(dataProvider = "childrenStatusDataProvider") public void whenRetrieveListOfChildrenWithStatues_thenAccumulatedChildrenStatusAsExpected(List childJobs, JobStatus expectedChildrenJobsStatus) { //init sql result mock List mockChildren = childJobs.stream().map(st -> { JobDaoImpl job = new JobDaoImpl(); job.setUuid(UUID.randomUUID()); job.setStatus(st); return job; }).collect(Collectors.toList()); when(dataAccessService.getList(eq(JobDaoImpl.class), anyString(), any(), eq(DaoUtils.getPropsMap()))) .thenReturn(mockChildren); List uuids = mockChildren.stream().map(job -> job.getUuid().toString()).collect(Collectors.toList()); assertEquals(expectedChildrenJobsStatus, watchChildrenJobsBL.retrieveChildrenJobsStatus(uuids)); } @Test(dataProvider = "inputsStatusAndExpectedOutputDataProvider") public void whenCumulate2JobStatus_thenResultAsExpected(List jobs, JobStatus expectedChildrenJobsStatus) { assertEquals(expectedChildrenJobsStatus, watchChildrenJobsBL.cumulateJobStatus(jobs.get(0), jobs.get(1))); } }