云
昨天 afd575e0ed30ce9b9d6404b2ad1679303d9a004f
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
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();
    }
}