package jnpf.limsService.impl; import com.baomidou.mybatisplus.annotation.InterceptorIgnore; import jnpf.base.UserInfo; import jnpf.limsEntity.LimsJianyanResultItem; import jnpf.limsMapper.LimsJianyanXiangMapper; import org.apache.ibatis.annotations.Select; import org.apache.ibatis.annotations.Update; import org.junit.Test; import java.lang.reflect.Method; import java.util.Arrays; import java.util.List; import static org.junit.Assert.assertArrayEquals; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; public class LimsJianceTaskServiceImplTest { @Test public void normalizesSingleTenantIdForDedicatedSql() { UserInfo userInfo = new UserInfo(); userInfo.setTenantId(" tenant-1 "); assertEquals("tenant-1", LimsJianceTaskServiceImpl.tenantId(userInfo)); userInfo.setTenantId(" "); assertEquals("0", LimsJianceTaskServiceImpl.tenantId(userInfo)); assertEquals("0", LimsJianceTaskServiceImpl.tenantId(null)); } @Test public void keepsLegacySkipBehaviorForEmptyResultWithoutElnRecord() { LimsJianyanResultItem item = new LimsJianyanResultItem(); item.setId("item-1"); assertNull(LimsJianceTaskServiceImpl.submissionResultValues(item, null)); } @Test public void liveTaskQueryBypassesNullOnlyPlatformDeleteFilter() throws Exception { Method method = LimsJianyanXiangMapper.class.getMethod( "selectLiveTasks", String.class, List.class); InterceptorIgnore ignore = method.getAnnotation(InterceptorIgnore.class); assertNotNull(ignore); assertArrayEquals(new String[]{"Ilg@true"}, ignore.others()); Select select = method.getAnnotation(Select.class); assertNotNull(select); String sql = String.join(" ", select.value()); assertTrue(sql.contains("f_tenant_id = #{tenantId}")); assertTrue(sql.contains("f_delete_mark IS NULL OR f_delete_mark = 0")); assertTrue(sql.contains("jianyan_jieguo AS jianyanJieguo")); assertTrue(sql.contains("jianyan_jielun AS jianyanJielun")); } @Test public void submitResultUpdateBypassesNullOnlyPlatformDeleteFilter() { Method method = Arrays.stream(LimsJianyanXiangMapper.class.getMethods()) .filter(candidate -> "submitResult".equals(candidate.getName())) .findFirst() .orElse(null); assertNotNull(method); InterceptorIgnore ignore = method.getAnnotation(InterceptorIgnore.class); assertNotNull(ignore); assertArrayEquals(new String[]{"Ilg@true"}, ignore.others()); Update update = method.getAnnotation(Update.class); assertNotNull(update); String sql = String.join(" ", update.value()); assertTrue(sql.contains("f_tenant_id = #{tenantId}")); assertTrue(sql.contains("f_delete_mark IS NULL OR f_delete_mark = 0")); assertTrue(sql.contains("jianyan_zhuangtai IN ('pending_test','cancelled','audit_rejected')")); assertTrue(sql.contains("waijian_lururen = #{userId}")); assertTrue(sql.contains("jiancha_ren = #{userId}")); assertTrue(sql.contains("jianyan_jieguo = #{result}")); assertTrue(sql.contains("jianyan_jielun = #{conclusion}")); } @Test public void auditUpdatesBypassNullOnlyPlatformDeleteFilter() { assertAuditUpdate("markAudited", "jianyan_zhuangtai = 'audited'", "renwu_shenheren = #{auditorId}", "renwu_shenheren_shijian = #{reviewedAt}"); assertAuditUpdate("markAuditRejected", "jianyan_zhuangtai = 'audit_rejected'", "renwu_tuihuiren = #{auditorId}", "tuihui_yuanyin = #{note}"); } private static void assertAuditUpdate(String methodName, String... expectedSql) { Method method = Arrays.stream(LimsJianyanXiangMapper.class.getMethods()) .filter(candidate -> methodName.equals(candidate.getName())) .findFirst() .orElse(null); assertNotNull(method); InterceptorIgnore ignore = method.getAnnotation(InterceptorIgnore.class); assertNotNull(ignore); assertArrayEquals(new String[]{"Ilg@true"}, ignore.others()); Update update = method.getAnnotation(Update.class); assertNotNull(update); String sql = String.join(" ", update.value()); assertTrue(sql.contains("f_tenant_id = #{tenantId}")); assertTrue(sql.contains("f_delete_mark IS NULL OR f_delete_mark = 0")); assertTrue(sql.contains("jianyan_zhuangtai = 'pending_audit'")); for (String expected : expectedSql) { assertTrue(sql.contains(expected)); } } }