package jnpf.elnService.impl; import jnpf.elnEntity.runtime.ElnRecordEntity; import jnpf.elnEntity.runtime.ElnRecordRevisionEntity; import jnpf.elnEntity.runtime.ElnRecordVos; import jnpf.elnMapper.ElnRecordMapper; import jnpf.elnMapper.ElnRecordRevisionMapper; import jnpf.exception.DataException; import org.junit.Assert; import org.junit.Test; import org.springframework.beans.factory.annotation.Autowired; import java.lang.reflect.Constructor; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verifyNoMoreInteractions; import static org.mockito.Mockito.when; public class ElnRecordQueryServiceImplTest { @Test public void marksProductionConstructorForSpringInjection() throws Exception { Constructor constructor = ElnRecordQueryServiceImpl.class .getConstructor(ElnRecordMapper.class, ElnRecordRevisionMapper.class); Assert.assertNotNull(constructor.getAnnotation(Autowired.class)); } @Test public void returnsCurrentRevisionWithoutWritingAnything() { ElnRecordMapper recordMapper = mock(ElnRecordMapper.class); ElnRecordRevisionMapper revisionMapper = mock(ElnRecordRevisionMapper.class); ElnRecordEntity record = record("record-1", "item-1", "revision-2", "tenant-1"); ElnRecordRevisionEntity revision = revision("revision-2", "record-1", "tenant-1"); when(recordMapper.selectLiveByTestWorkItem("tenant-1", "item-1")).thenReturn(record); when(revisionMapper.selectById("revision-2")).thenReturn(revision); ElnRecordVos.Created result = new ElnRecordQueryServiceImpl( recordMapper, revisionMapper, () -> "tenant-1").getByTestWorkItem("item-1"); assertEquals("record-1", result.getRecordId()); assertEquals("revision-2", result.getRevisionId()); assertEquals("record-1.docx", result.getDocument().getName()); assertEquals("file-2.docx", result.getDocument().getFileId()); assertEquals("docx", result.getDocument().getFileExtension()); assertTrue(result.isExisting()); verify(recordMapper).selectLiveByTestWorkItem("tenant-1", "item-1"); verify(revisionMapper).selectById("revision-2"); verifyNoMoreInteractions(recordMapper, revisionMapper); } @Test(expected = DataException.class) public void rejectsMissingRecordWithoutCreatingOne() { ElnRecordMapper recordMapper = mock(ElnRecordMapper.class); ElnRecordRevisionMapper revisionMapper = mock(ElnRecordRevisionMapper.class); when(recordMapper.selectLiveByTestWorkItem("tenant-1", "item-1")).thenReturn(null); try { new ElnRecordQueryServiceImpl(recordMapper, revisionMapper, () -> "tenant-1") .getByTestWorkItem("item-1"); } finally { verify(recordMapper).selectLiveByTestWorkItem("tenant-1", "item-1"); verifyNoMoreInteractions(recordMapper, revisionMapper); } } @Test(expected = DataException.class) public void rejectsRevisionOutsideCurrentTenant() { ElnRecordMapper recordMapper = mock(ElnRecordMapper.class); ElnRecordRevisionMapper revisionMapper = mock(ElnRecordRevisionMapper.class); when(recordMapper.selectLiveByTestWorkItem("tenant-1", "item-1")) .thenReturn(record("record-1", "item-1", "revision-2", "tenant-1")); when(revisionMapper.selectById("revision-2")) .thenReturn(revision("revision-2", "record-1", "tenant-2")); new ElnRecordQueryServiceImpl(recordMapper, revisionMapper, () -> "tenant-1") .getByTestWorkItem("item-1"); } private static ElnRecordEntity record( String id, String testWorkItemId, String revisionId, String tenantId) { ElnRecordEntity record = new ElnRecordEntity(); record.setId(id); record.setJianyanXiangId(testWorkItemId); record.setDangqianXiudingId(revisionId); record.setFTenantId(tenantId); record.setFDeleteMark(0); return record; } private static ElnRecordRevisionEntity revision( String id, String recordId, String tenantId) { ElnRecordRevisionEntity revision = new ElnRecordRevisionEntity(); revision.setId(id); revision.setDianziJiluId(recordId); revision.setJiluWendang("file-2.docx"); revision.setFTenantId(tenantId); revision.setFDeleteMark(0); return revision; } }