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<ElnTemplateFileQueryServiceImpl> constructor =
|
ElnTemplateFileQueryServiceImpl.class.getConstructor(ElnTemplateMapper.class);
|
|
Assert.assertNotNull(constructor.getAnnotation(Autowired.class));
|
}
|
|
@Test
|
public void returnsFirstFileForCurrentTenant() {
|
AtomicReference<String> tenant = new AtomicReference<>();
|
AtomicReference<String> 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<String> 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<String> resultPage(String... records) {
|
return new Page<String>(1, 1, false).setRecords(Arrays.asList(records));
|
}
|
}
|