package org.ovirt.engine.core.bll.job; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.when; import java.util.Collections; import java.util.List; import java.util.Map; import org.junit.Before; import org.junit.Test; import org.mockito.Mock; import org.mockito.MockitoAnnotations; import org.ovirt.engine.core.common.VdcObjectType; import org.ovirt.engine.core.common.action.VdcActionType; import org.ovirt.engine.core.common.job.Job; import org.ovirt.engine.core.common.job.Step; import org.ovirt.engine.core.compat.Guid; import org.ovirt.engine.core.dao.JobDao; import org.ovirt.engine.core.dao.JobSubjectEntityDao; import org.ovirt.engine.core.dao.StepDao; import org.ovirt.engine.core.dao.StepSubjectEntityDao; public class JobRepositoryTest { private static final Map<Guid, VdcObjectType> JOB_SUBJECT_ENTITIES_MAP = Collections.singletonMap(Guid.newGuid(), VdcObjectType.VM); @Mock private JobDao jobDao; @Mock private JobSubjectEntityDao jobSubjectEntityDao; @Mock private StepDao stepDao; @Mock private StepSubjectEntityDao stepSubjectEntityDao; private JobRepository jobRepository; private Job job; @Before public void setUp() throws Exception { MockitoAnnotations.initMocks(this); jobRepository = new JobRepositoryImpl(jobDao, jobSubjectEntityDao, stepDao, stepSubjectEntityDao); job = createJob(); mockDaos(job); } @Test public void getJobWithSteps() { Job jobWithSteps = jobRepository.getJobWithSteps(job.getId()); assertNotNull(jobWithSteps); assertNotNull(jobWithSteps.getSteps()); assertTrue(!jobWithSteps.getSteps().isEmpty()); assertEquals(JOB_SUBJECT_ENTITIES_MAP, jobWithSteps.getJobSubjectEntities()); } @Test public void loadJobSteps() { jobRepository.loadJobSteps(job); assertNotNull(job.getSteps()); assertTrue(!job.getSteps().isEmpty()); } @Test public void getJobById() { assertNotNull(jobRepository.getJob(job.getId())); assertEquals(JOB_SUBJECT_ENTITIES_MAP, job.getJobSubjectEntities()); } @Test public void getJobByEntityIdAndActionType() { job.setActionType(VdcActionType.UpdateVm); List<Job> searchedJob = jobRepository.getJobsByEntityAndAction(Guid.Empty, job.getActionType()); assertNotNull(searchedJob); assertTrue(searchedJob.contains(job)); } private void mockJobDao(Job job) { when(jobDao.get(any(Guid.class))).thenReturn(job); } private void mockStepDao(Guid jobId) { Step step = new Step(); step.setJobId(jobId); when(stepDao.getStepsByJobId(eq(jobId))).thenReturn(Collections.singletonList(step)); } private void mockJobSubjectEntityDao(Guid jobId) { when(jobSubjectEntityDao.getJobSubjectEntityByJobId(eq(jobId))) .thenReturn(JOB_SUBJECT_ENTITIES_MAP); when(jobSubjectEntityDao.getJobIdByEntityId(any(Guid.class))).thenReturn(Collections.singletonList(jobId)); } private void mockDaos(Job job) { mockJobDao(job); mockStepDao(job.getId()); mockJobSubjectEntityDao(job.getId()); } private Job createJob() { Job job = new Job(); job.setId(Guid.newGuid()); return job; } }