package jnpf.elnMapper; import com.baomidou.mybatisplus.core.metadata.IPage; import org.apache.ibatis.annotations.Select; import org.junit.Test; import java.lang.reflect.Method; import java.util.List; import java.util.Locale; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; public class ElnTemplateMapperTest { @Test public void querySelectsCurrentAvailableTemplateWithinTenant() throws Exception { Method method = ElnTemplateMapper.class.getMethod( "selectLatestTemplateFiles", IPage.class, String.class, String.class); Select select = method.getAnnotation(Select.class); assertTrue("查询方法必须声明 @Select", select != null); String sql = String.join(" ", select.value()).toLowerCase(Locale.ROOT) .replaceAll("\\s+", " "); assertTrue(sql.contains("from eln_template_current_version c")); assertTrue(sql.contains("join eln_template m")); assertTrue(sql.contains("m.f_tenant_id = c.f_tenant_id")); assertTrue(sql.contains("m.f_id = c.dangqian_muban_id")); assertTrue(sql.contains("c.f_tenant_id = #{tenantid}")); assertTrue(sql.contains("m.jianyan_xiangmu = #{jianyanxiangmu}")); assertTrue(sql.contains("m.biz_status = 'published'")); assertTrue(sql.contains("m.biz_enabled = 'enabled'")); assertTrue(sql.contains("m.shengxiao_riqi <= current_timestamp")); assertTrue(sql.contains("coalesce(m.f_delete_mark, 0) = 0")); assertFalse(sql.contains("order by")); assertTrue("分页应交给 MyBatis-Plus 根据数据库方言生成", !sql.contains("limit")); } @Test public void codeQuerySelectsCurrentAvailableTemplateWithinTenant() throws Exception { Method method = ElnTemplateMapper.class.getMethod( "selectLatestTemplateFilesByTestDefinitionCode", IPage.class, String.class, String.class); Select select = method.getAnnotation(Select.class); assertTrue("查询方法必须声明 @Select", select != null); String sql = String.join(" ", select.value()).toLowerCase(Locale.ROOT) .replaceAll("\\s+", " "); assertTrue(sql.contains("from eln_template_current_version c")); assertTrue(sql.contains("join eln_template m")); assertTrue(sql.contains("c.f_tenant_id = #{tenantid}")); assertTrue(sql.contains( "m.jianyan_xiangmu_bianma = #{testdefinitioncode}")); assertTrue(sql.contains("m.biz_status = 'published'")); assertTrue(sql.contains("m.biz_enabled = 'enabled'")); assertTrue(sql.contains("coalesce(c.f_delete_mark, 0) = 0")); assertTrue(sql.contains("coalesce(m.f_delete_mark, 0) = 0")); assertFalse(sql.contains("order by")); assertFalse(sql.contains("limit")); } @Test public void recordCreationQueryMatchesCurrentTemplateByProjectCode() throws Exception { Method method = ElnTemplateMapper.class.getMethod( "selectCurrentPublishedByTestDefinition", String.class, String.class); Select select = method.getAnnotation(Select.class); String sql = String.join(" ", select.value()).toLowerCase(Locale.ROOT) .replaceAll("\\s+", " "); assertTrue(sql.contains( "m.jianyan_xiangmu_bianma = #{testdefinitioncode}")); assertFalse(sql.contains("m.jianyan_xiangmu = #{testdefinitionid}")); } @Test public void queryResolvesTemplateCategoriesWithinTenant() throws Exception { Method method = ElnTemplateMapper.class.getMethod( "selectTemplateCategories", String.class, List.class); Select select = method.getAnnotation(Select.class); assertTrue("查询方法必须声明 @Select", select != null); String sql = String.join(" ", select.value()).toLowerCase(Locale.ROOT) .replaceAll("\\s+", " "); assertTrue(sql.contains("from eln_template_category")); assertTrue(sql.contains("f_tenant_id = #{tenantid}")); assertTrue(sql.contains("coalesce(f_delete_mark, 0) = 0")); assertTrue(sql.contains("f_id in")); } @Test public void latestTemplateCodeQueryGroupsBeforeDialectPagination() throws Exception { Method method = ElnTemplateMapper.class.getMethod( "selectLatestTemplateCodes", IPage.class, String.class, String.class, String.class, String.class, String.class, String.class); Select select = method.getAnnotation(Select.class); assertTrue("查询方法必须声明 @Select", select != null); String sql = String.join(" ", select.value()).toLowerCase(Locale.ROOT) .replaceAll("\\s+", " "); assertTrue(sql.contains("from eln_template m")); assertTrue(sql.contains("m.f_tenant_id = #{tenantid}")); assertTrue(sql.contains("coalesce(m.f_delete_mark, 0) = 0")); assertTrue(sql.contains("")); assertTrue(sql.contains("m.muban_fenlei = #{mubanfenlei}")); assertTrue(sql.contains("m.jianyan_xiangmu_mingcheng like #{keywordpattern}")); assertTrue(sql.contains("group by m.muban_bianhao")); assertTrue(sql.contains( "case when max(coalesce(m.chuangjian_shijian, m.f_creator_time)) " + "is null then 1 else 0 end asc")); assertTrue(sql.contains( "max(coalesce(m.chuangjian_shijian, m.f_creator_time)) desc")); assertFalse(sql.contains("f_last_modify_time")); assertTrue(sql.contains("max(m.f_id) desc")); assertFalse(sql.contains("limit")); } @Test public void directoryQueryKeepsTemplatesWithoutCurrentVersionAndGroupsBeforePagination() throws Exception { Method method = ElnTemplateMapper.class.getMethod( "selectTemplateDirectory", IPage.class, String.class, String.class, String.class, String.class, String.class, String.class); Select select = method.getAnnotation(Select.class); assertTrue("查询方法必须声明 @Select", select != null); String sql = String.join(" ", select.value()).toLowerCase(Locale.ROOT) .replaceAll("\\s+", " "); assertTrue(sql.contains("from eln_template m")); assertTrue(sql.contains("left join eln_template_current_version c")); assertTrue(sql.contains("left join eln_template e")); assertTrue(sql.contains("c.f_tenant_id = m.f_tenant_id")); assertTrue(sql.contains("c.muban_bianhao = m.muban_bianhao")); assertTrue(sql.contains("coalesce(c.f_delete_mark, 0) = 0")); assertTrue(sql.contains("e.f_id = c.dangqian_muban_id")); assertTrue(sql.contains("e.muban_bianhao = m.muban_bianhao")); assertTrue(sql.contains("coalesce(e.f_delete_mark, 0) = 0")); assertTrue(sql.contains("e.f_id as shengxiaomubanid")); assertTrue(sql.contains("e.muban_banben as shengxiaomubanbanben")); assertTrue(sql.contains("")); assertTrue(sql.contains("e.biz_status = #{bizstatus}")); assertTrue(sql.contains("")); assertTrue(sql.contains("e.biz_enabled = #{bizenabled}")); assertTrue(sql.contains("group by m.muban_bianhao")); assertFalse(sql.contains("limit")); } }