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<BiChartConfigDO> first = controller.getPage(10L, " 销售 ", 1, 1).getData();
|
assertEquals(2L, first.getTotal());
|
assertEquals(List.of(2L), ids(first));
|
PageResult<BiChartConfigDO> second = controller.getPage(10L, "销售", 2, 1).getData();
|
assertEquals(2L, second.getTotal());
|
assertEquals(List.of(1L), ids(second));
|
}
|
|
@Test
|
void searchesPartialNameAcrossDashboardsWhenDashboardIsAbsent() {
|
PageResult<BiChartConfigDO> 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<BiChartConfigDO> page = service.getPage(10L, name, 1, 10);
|
assertEquals(3L, page.getTotal());
|
assertEquals(List.of(2L, 1L, 3L), ids(page));
|
}
|
}
|
|
private List<Long> ids(PageResult<BiChartConfigDO> page) {
|
return page.getList().stream().map(BiChartConfigDO::getId).toList();
|
}
|
}
|