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
package com.battery.business.service;
 
import static org.junit.jupiter.api.Assertions.*;
import java.nio.file.*;
import java.util.UUID;
import com.ruoyi.common.exception.ServiceException;
import org.h2.jdbcx.JdbcDataSource;
import org.junit.jupiter.api.Test;
import org.springframework.jdbc.core.JdbcTemplate;
 
class TodoServiceTest {
    @Test
    void onlyOwnerCanReadCompleteAndRemoveEvenWhenNamesMatch() throws Exception {
        var database = new JdbcDataSource();
        database.setURL("jdbc:h2:mem:todo_" + UUID.randomUUID() + ";MODE=MySQL;DB_CLOSE_DELAY=-1");
        var jdbc = new JdbcTemplate(database);
        jdbc.execute("CREATE TABLE sys_user(user_id BIGINT, user_name VARCHAR(100), nick_name VARCHAR(100), status CHAR(1), del_flag CHAR(1))");
        jdbc.update("INSERT INTO sys_user VALUES(1,'creator','同名','0','0'),(2,'owner','同名','0','0'),(3,'disabled','停用','1','0')");
        var ddl = Files.readString(Path.of("src/main/resources/db/migration-final/V20__todo_records.sql"));
        jdbc.execute(ddl.substring(0, ddl.indexOf("ENGINE=InnoDB")));
        var service = new TodoService(database);
        long id = service.create(" 工作事项 ", 2, 1, "创建人");
        assertTrue(service.list(1).isEmpty());
        assertEquals("工作事项", service.list(2).get(0).content());
        assertEquals(id, service.list(2).get(0).id());
        assertEquals(2, service.owners().size());
        assertThrows(ServiceException.class, () -> service.create("事项", 3, 1, "创建人"));
        assertThrows(ServiceException.class, () -> service.completeTodo(id, 1, "管理员或创建人不可越权"));
        assertThrows(ServiceException.class, () -> service.remove(id, 1));
        assertThrows(ServiceException.class, () -> service.completeTodo(id, 2, " "));
        service.completeTodo(id, 2, "已完成");
        var reopened = new TodoService(database).list(2).get(0);
        assertEquals("已处理", reopened.status());
        assertEquals("已完成", reopened.handleRemark());
        assertThrows(ServiceException.class, () -> service.completeTodo(id, 2, "再次处理"));
        service.remove(id, 2);
        assertTrue(service.list(2).isEmpty());
    }
}