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());
|
}
|
}
|