package jnpf.elnService.impl; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import jnpf.elnEntity.ElnDocumentFileVo; import jnpf.elnMapper.ElnTemplateMapper; 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 java.util.Arrays; import java.util.concurrent.atomic.AtomicReference; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNull; public class ElnTemplateFileQueryServiceImplTest { @Test public void marksProductionConstructorForSpringInjection() throws Exception { Constructor constructor = ElnTemplateFileQueryServiceImpl.class.getConstructor(ElnTemplateMapper.class); Assert.assertNotNull(constructor.getAnnotation(Autowired.class)); } @Test public void returnsFirstFileForCurrentTenant() { AtomicReference tenant = new AtomicReference<>(); AtomicReference item = new AtomicReference<>(); ElnTemplateFileQueryServiceImpl.TemplateFileQuery mapper = (requestPage, tenantId, jianyanXiangmu) -> { assertEquals(1L, requestPage.getCurrent()); assertEquals(1L, requestPage.getSize()); Assert.assertFalse(requestPage.searchCount()); tenant.set(tenantId); item.set(jianyanXiangmu); return resultPage( "[{\"fileId\":\"file-1.docx\",\"name\":\"记录模板.docx\"," + "\"url\":\"/api/file/Image/annex/file-1.docx\",\"fileSize\":128," + "\"fileExtension\":\"docx\",\"fileVersionId\":null}]"); }; ElnDocumentFileVo result = new ElnTemplateFileQueryServiceImpl( mapper, failIfQueried(), () -> "tenant-1") .getFile("item-1", null); assertEquals("tenant-1", tenant.get()); assertEquals("item-1", item.get()); assertEquals("file-1.docx", result.getFileId()); assertEquals("记录模板.docx", result.getName()); assertEquals(Long.valueOf(128), result.getFileSize()); } @Test public void returnsFirstFileByTestDefinitionCode() { AtomicReference code = new AtomicReference<>(); ElnTemplateFileQueryServiceImpl.TemplateFileQuery codeQuery = (requestPage, tenantId, testDefinitionCode) -> { assertEquals("tenant-1", tenantId); code.set(testDefinitionCode); return resultPage("[{\"fileId\":\"code.docx\",\"name\":\"code.docx\"}]"); }; ElnDocumentFileVo result = new ElnTemplateFileQueryServiceImpl( failIfQueried(), codeQuery, () -> "tenant-1") .getFile(null, "HD_jyxm_0008"); assertEquals("HD_jyxm_0008", code.get()); assertEquals("code.docx", result.getFileId()); } @Test public void returnsNullWhenAttachmentArrayIsEmpty() { assertNull(new ElnTemplateFileQueryServiceImpl( (page, tenant, item) -> resultPage("[]"), failIfQueried(), () -> "tenant-1").getFile("item-1", null)); } @Test public void rejectsMissingCurrentTemplatePointer() { try { new ElnTemplateFileQueryServiceImpl( (page, tenant, item) -> resultPage(), failIfQueried(), () -> "tenant-1").getFile("item-1", null); Assert.fail("预期拒绝缺失的当前模板指针"); } catch (DataException expected) { Assert.assertTrue(expected.getMessage().contains("未配置当前模板")); } } @Test(expected = DataException.class) public void rejectsMalformedFileJson() { new ElnTemplateFileQueryServiceImpl( (page, tenant, item) -> resultPage("not-json"), failIfQueried(), () -> "tenant-1").getFile("item-1", null); } @Test(expected = DataException.class) public void rejectsJsonNull() { new ElnTemplateFileQueryServiceImpl( (page, tenant, item) -> resultPage("null"), failIfQueried(), () -> "tenant-1").getFile("item-1", null); } @Test(expected = DataException.class) public void rejectsNullFirstFile() { new ElnTemplateFileQueryServiceImpl( (page, tenant, item) -> resultPage("[null]"), failIfQueried(), () -> "tenant-1").getFile("item-1", null); } @Test public void rejectsMissingOrAmbiguousProjectReference() { ElnTemplateFileQueryServiceImpl service = new ElnTemplateFileQueryServiceImpl( failIfQueried(), failIfQueried(), () -> "tenant-1"); assertRejected(() -> service.getFile(null, null), "不能为空"); assertRejected(() -> service.getFile("item-1", "HD_jyxm_0008"), "只能传一个"); } private static ElnTemplateFileQueryServiceImpl.TemplateFileQuery failIfQueried() { return (page, tenant, reference) -> { throw new AssertionError("不应执行此模板文件查询"); }; } private static void assertRejected(Runnable action, String messagePart) { try { action.run(); Assert.fail("预期拒绝无效项目引用"); } catch (DataException expected) { Assert.assertTrue(expected.getMessage().contains(messagePart)); } } private static IPage resultPage(String... records) { return new Page(1, 1, false).setRecords(Arrays.asList(records)); } }