199 lines
6.4 KiB
Java
199 lines
6.4 KiB
Java
package test.dao.impl;
|
|
|
|
import dao.impl.LeaveRequestDAOImpl;
|
|
import dao.impl.StudentDAOImpl;
|
|
import model.ApprovalStatus;
|
|
import model.LeaveRequest;
|
|
import model.Student;
|
|
import org.junit.After;
|
|
import org.junit.Before;
|
|
import org.junit.Test;
|
|
import util.DatabaseUtil;
|
|
|
|
import java.sql.Connection;
|
|
import java.sql.PreparedStatement;
|
|
import java.sql.SQLException;
|
|
import java.util.Date;
|
|
import java.util.List;
|
|
|
|
import static org.junit.Assert.*;
|
|
|
|
/**
|
|
* LeaveRequestDAOImpl的单元测试类
|
|
* 测试请假申请数据访问层的各项功能
|
|
*/
|
|
public class LeaveRequestDAOImplTest {
|
|
|
|
private LeaveRequestDAOImpl leaveRequestDAO;
|
|
private StudentDAOImpl studentDAO;
|
|
private Student testStudent;
|
|
|
|
@Before
|
|
public void setUp() throws SQLException {
|
|
leaveRequestDAO = new LeaveRequestDAOImpl();
|
|
studentDAO = new StudentDAOImpl();
|
|
|
|
// 清理测试数据
|
|
cleanTestData();
|
|
|
|
// 创建测试用学生
|
|
testStudent = createAndInsertTestStudent();
|
|
}
|
|
|
|
@After
|
|
public void tearDown() throws SQLException {
|
|
cleanTestData();
|
|
}
|
|
|
|
/**
|
|
* 清理测试数据
|
|
*/
|
|
private void cleanTestData() throws SQLException {
|
|
try (Connection conn = DatabaseUtil.getConnection()) {
|
|
// 删除请假记录
|
|
try (PreparedStatement stmt = conn.prepareStatement("DELETE FROM leave_requests WHERE student_id IN (SELECT id FROM students WHERE student_id = ?)")) {
|
|
stmt.setString(1, "2024001");
|
|
stmt.executeUpdate();
|
|
}
|
|
|
|
// 删除测试学生
|
|
try (PreparedStatement stmt = conn.prepareStatement("DELETE FROM students WHERE student_id = ?")) {
|
|
stmt.setString(1, "2024001");
|
|
stmt.executeUpdate();
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 创建并插入测试用的Student对象
|
|
*/
|
|
private Student createAndInsertTestStudent() {
|
|
Student student = new Student();
|
|
student.setStudentId("2024001");
|
|
student.setName("张三");
|
|
student.setClassName("计算机科学与技术1班");
|
|
student.setContact("13800138000");
|
|
student.setCollege("信息科学与工程学院");
|
|
student.setMajor("计算机科学与技术");
|
|
student.setPassword("password123");
|
|
|
|
studentDAO.insert(student);
|
|
return student;
|
|
}
|
|
|
|
/**
|
|
* 创建测试用的LeaveRequest对象
|
|
*/
|
|
private LeaveRequest createTestLeaveRequest() {
|
|
LeaveRequest request = new LeaveRequest();
|
|
request.setStudent(testStudent);
|
|
request.setStartTime(new Date());
|
|
request.setEndTime(new Date(System.currentTimeMillis() + 86400000)); // 一天后
|
|
request.setStatus(ApprovalStatus.PENDING);
|
|
request.setDuration(24.0);
|
|
request.setLocation("北京市海淀区");
|
|
request.setReasonType("事假");
|
|
request.setReasonDetail("参加亲属婚礼");
|
|
request.setLeavingCity(false);
|
|
request.setRequestTime(new Date());
|
|
return request;
|
|
}
|
|
|
|
@Test
|
|
public void testInsert() {
|
|
// 准备测试数据
|
|
LeaveRequest request = createTestLeaveRequest();
|
|
|
|
// 执行插入操作
|
|
int result = leaveRequestDAO.insert(request);
|
|
|
|
// 验证结果
|
|
assertEquals(1, result);
|
|
assertTrue(request.getId() > 0);
|
|
|
|
// 验证数据是否正确插入
|
|
List<LeaveRequest> requests = leaveRequestDAO.findByStudentId(testStudent.getId());
|
|
assertFalse(requests.isEmpty());
|
|
|
|
LeaveRequest foundRequest = requests.get(0);
|
|
assertEquals(request.getStudent().getId(), foundRequest.getStudent().getId());
|
|
assertEquals(request.getStatus(), foundRequest.getStatus());
|
|
assertEquals(request.getLocation(), foundRequest.getLocation());
|
|
assertEquals(request.getReasonType(), foundRequest.getReasonType());
|
|
assertEquals(request.getReasonDetail(), foundRequest.getReasonDetail());
|
|
assertEquals(request.isLeavingCity(), foundRequest.isLeavingCity());
|
|
}
|
|
|
|
@Test
|
|
public void testFindByStudentId() {
|
|
// 准备测试数据
|
|
LeaveRequest request1 = createTestLeaveRequest();
|
|
LeaveRequest request2 = createTestLeaveRequest();
|
|
|
|
leaveRequestDAO.insert(request1);
|
|
leaveRequestDAO.insert(request2);
|
|
|
|
// 执行查询操作
|
|
List<LeaveRequest> requests = leaveRequestDAO.findByStudentId(testStudent.getId());
|
|
|
|
// 验证结果
|
|
assertEquals(2, requests.size());
|
|
for (LeaveRequest request : requests) {
|
|
assertEquals(testStudent.getId(), request.getStudent().getId());
|
|
assertEquals(testStudent.getName(), request.getStudent().getName());
|
|
}
|
|
}
|
|
|
|
@Test
|
|
public void testFindByStudentIdNotFound() {
|
|
// 查询不存在的学生ID
|
|
List<LeaveRequest> requests = leaveRequestDAO.findByStudentId(-1);
|
|
|
|
// 验证结果
|
|
assertTrue(requests.isEmpty());
|
|
}
|
|
|
|
@Test
|
|
public void testInsertWithNullStudent() {
|
|
// 准备测试数据
|
|
LeaveRequest request = createTestLeaveRequest();
|
|
request.setStudent(null);
|
|
|
|
// 执行插入操作
|
|
int result = leaveRequestDAO.insert(request);
|
|
|
|
// 验证结果
|
|
assertEquals(0, result);
|
|
}
|
|
|
|
@Test
|
|
public void testUpdateStatus() {
|
|
// 准备测试数据
|
|
LeaveRequest request = createTestLeaveRequest();
|
|
leaveRequestDAO.insert(request);
|
|
|
|
// 执行更新操作
|
|
String comment = "同意请假申请";
|
|
int result = leaveRequestDAO.updateStatus(request.getId(), ApprovalStatus.APPROVED, comment);
|
|
|
|
// 验证结果
|
|
assertEquals(1, result);
|
|
|
|
// 验证状态是否正确更新
|
|
List<LeaveRequest> requests = leaveRequestDAO.findByStudentId(testStudent.getId());
|
|
assertFalse(requests.isEmpty());
|
|
LeaveRequest updatedRequest = requests.get(0);
|
|
assertEquals(ApprovalStatus.APPROVED, updatedRequest.getStatus());
|
|
assertEquals(comment, updatedRequest.getApproverComment());
|
|
}
|
|
|
|
@Test
|
|
public void testUpdateStatusNotFound() {
|
|
// 测试更新不存在的记录
|
|
int result = leaveRequestDAO.updateStatus(-1, ApprovalStatus.APPROVED, "测试评论");
|
|
|
|
// 验证结果
|
|
assertEquals(0, result);
|
|
}
|
|
}
|