package cn.iocoder.yudao.module.bi.service.config; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.module.bi.controller.admin.config.BiChartConfigController; import cn.iocoder.yudao.module.bi.dal.dataobject.BiChartConfigDO; import cn.iocoder.yudao.module.bi.dal.mysql.BiChartConfigMapper; import com.baomidou.mybatisplus.annotation.DbType; import com.baomidou.mybatisplus.core.MybatisConfiguration; import com.baomidou.mybatisplus.core.MybatisSqlSessionFactoryBuilder; import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor; import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor; import org.apache.ibatis.datasource.unpooled.UnpooledDataSource; import org.apache.ibatis.mapping.Environment; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.transaction.jdbc.JdbcTransactionFactory; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.springframework.test.util.ReflectionTestUtils; import java.sql.Statement; import java.util.List; import java.util.UUID; import static org.junit.jupiter.api.Assertions.assertEquals; class BiChartConfigServiceImplTest { private SqlSession session; private BiChartConfigServiceImpl service; @BeforeEach void setUp() throws Exception { UnpooledDataSource dataSource = new UnpooledDataSource("org.h2.Driver", "jdbc:h2:mem:chart_" + UUID.randomUUID() + ";MODE=MySQL", "sa", ""); MybatisConfiguration configuration = new MybatisConfiguration(); configuration.setMapUnderscoreToCamelCase(true); configuration.setEnvironment(new Environment("test", new JdbcTransactionFactory(), dataSource)); MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor(); interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.H2)); configuration.addInterceptor(interceptor); configuration.addMapper(BiChartConfigMapper.class); session = new MybatisSqlSessionFactoryBuilder().build(configuration).openSession(true); try (Statement statement = session.getConnection().createStatement()) { statement.execute(""" CREATE TABLE bi_chart_config ( id BIGINT PRIMARY KEY, dashboard_id BIGINT, name VARCHAR(255), chart_type VARCHAR(50), data_source_id BIGINT, query_sql VARCHAR(2000), position VARCHAR(500), chart_options VARCHAR(2000), refresh_interval INT, sort INT, status INT, creator VARCHAR(64), create_time TIMESTAMP, updater VARCHAR(64), update_time TIMESTAMP, deleted INT DEFAULT 0 ) """); statement.execute(""" INSERT INTO bi_chart_config (id,dashboard_id,name,sort,deleted) VALUES (1,10,'月度销售趋势',2,0), (2,10,'销售金额统计',1,0), (3,10,'采购统计',3,0), (4,20,'销售排名',1,0), (5,10,'已删除销售统计',0,1) """); } service = new BiChartConfigServiceImpl(); ReflectionTestUtils.setField(service, "mapper", session.getMapper(BiChartConfigMapper.class)); } @AfterEach void tearDown() { if (session != null) { session.close(); } } @Test void controllerSearchesPartialNameTogetherWithDashboardAndPaginates() { BiChartConfigController controller = new BiChartConfigController(); ReflectionTestUtils.setField(controller, "chartConfigService", service); PageResult first = controller.getPage(10L, " 销售 ", 1, 1).getData(); assertEquals(2L, first.getTotal()); assertEquals(List.of(2L), ids(first)); PageResult second = controller.getPage(10L, "销售", 2, 1).getData(); assertEquals(2L, second.getTotal()); assertEquals(List.of(1L), ids(second)); } @Test void searchesPartialNameAcrossDashboardsWhenDashboardIsAbsent() { PageResult page = service.getPage(null, "销售", 1, 10); assertEquals(3L, page.getTotal()); assertEquals(List.of(1L, 2L, 4L), ids(page).stream().sorted().toList()); assertEquals(0L, service.getPage(null, "不存在的图表", 1, 10).getTotal()); } @Test void omittedOrClearedNameDoesNotFilterTheDashboard() { for (String name : new String[]{null, "", " "}) { PageResult page = service.getPage(10L, name, 1, 10); assertEquals(3L, page.getTotal()); assertEquals(List.of(2L, 1L, 3L), ids(page)); } } private List ids(PageResult page) { return page.getList().stream().map(BiChartConfigDO::getId).toList(); } }