pangu-user-platform/pangu-system/src/test/java/com/pangu/integration/ModuleIntegrationTest.java

475 lines
16 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package com.pangu.integration;
import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertNotEquals;
import static org.junit.jupiter.api.Assertions.assertNotNull;
import static org.junit.jupiter.api.Assertions.assertNull;
import static org.junit.jupiter.api.Assertions.assertTrue;
import java.util.Arrays;
import java.util.List;
import org.junit.jupiter.api.MethodOrderer;
import org.junit.jupiter.api.Order;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.TestMethodOrder;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.transaction.annotation.Transactional;
import com.pangu.application.domain.dto.ApplicationDTO;
import com.pangu.application.domain.vo.ApplicationVO;
import com.pangu.application.service.IApplicationService;
import com.pangu.base.service.IRegionService;
import com.pangu.common.core.page.TableDataInfo;
import com.pangu.member.domain.dto.MemberDTO;
import com.pangu.member.domain.entity.Member;
import com.pangu.member.domain.vo.MemberVO;
import com.pangu.member.service.IMemberService;
import com.pangu.school.domain.dto.SchoolQueryDTO;
import com.pangu.school.domain.vo.SchoolTreeVO;
import com.pangu.school.domain.vo.SchoolVO;
import com.pangu.school.service.ISchoolService;
import com.pangu.student.domain.dto.StudentDTO;
import com.pangu.student.domain.vo.StudentVO;
import com.pangu.student.service.IStudentService;
/**
* 模块集成测试类
* 测试跨模块功能和业务流程
*
* @author 湖北新华业务中台研发团队
*/
@SpringBootTest(classes = com.pangu.TestApplication.class)
@Transactional
@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
public class ModuleIntegrationTest {
@Autowired
private ISchoolService schoolService;
@Autowired
private IMemberService memberService;
@Autowired
private IStudentService studentService;
@Autowired
private IApplicationService applicationService;
@Autowired
private IRegionService regionService;
// ========== 学校-学生集成测试 ==========
/**
* 测试学校树查询并筛选学生
*/
@Test
@Order(1)
public void testSchoolTreeAndStudentFilter() {
// 1. 获取学校树
List<SchoolTreeVO> tree = schoolService.selectSchoolTree(111L);
assertNotNull(tree);
assertTrue(tree.size() > 0);
// 2. 根据学校ID筛选学生
SchoolTreeVO school = tree.get(0);
StudentDTO query = new StudentDTO();
query.setSchoolId(school.getId());
query.setPageNum(1);
query.setPageSize(10);
TableDataInfo result = studentService.selectStudentList(query);
assertNotNull(result);
}
/**
* 测试学校年级班级筛选学生
*/
@Test
@Order(2)
public void testSchoolGradeClassFilter() {
// 按年级筛选
StudentDTO gradeQuery = new StudentDTO();
gradeQuery.setSchoolGradeId(1L);
gradeQuery.setPageNum(1);
gradeQuery.setPageSize(10);
TableDataInfo gradeResult = studentService.selectStudentList(gradeQuery);
assertNotNull(gradeResult);
// 按班级筛选
StudentDTO classQuery = new StudentDTO();
classQuery.setSchoolClassId(1L);
classQuery.setPageNum(1);
classQuery.setPageSize(10);
TableDataInfo classResult = studentService.selectStudentList(classQuery);
assertNotNull(classResult);
}
// ========== 会员-学生集成测试 ==========
/**
* 测试会员绑定学生完整流程
*/
@Test
@Order(3)
public void testMemberStudentBindingFlow() {
// 1. 创建家长会员
MemberDTO memberDTO = new MemberDTO();
memberDTO.setPhone("13811111111");
memberDTO.setNickname("集成测试家长");
memberDTO.setIdentityType("1");
int memberResult = memberService.insertMember(memberDTO);
assertEquals(1, memberResult);
// 2. 获取会员ID
Member member = memberService.getMemberByPhone("13811111111");
assertNotNull(member);
Long memberId = member.getMemberId();
// 3. 创建学生
StudentDTO studentDTO = new StudentDTO();
studentDTO.setStudentName("集成测试学生");
studentDTO.setStudentNo("INT_TEST_001");
studentDTO.setGender("1");
studentDTO.setRegionId(111L);
studentDTO.setSchoolId(1L);
studentDTO.setSchoolGradeId(1L);
studentDTO.setSchoolClassId(1L);
int studentResult = studentService.insertStudent(studentDTO);
assertEquals(1, studentResult);
// 4. 查询学生获取ID
StudentDTO query = new StudentDTO();
query.setStudentNo("INT_TEST_001");
query.setPageNum(1);
query.setPageSize(10);
TableDataInfo queryResult = studentService.selectStudentList(query);
@SuppressWarnings("unchecked")
List<StudentVO> students = (List<StudentVO>) queryResult.getRows();
Long studentId = students.get(0).getStudentId();
// 5. 绑定学生到会员
int bindResult = memberService.bindStudent(memberId, studentId);
assertEquals(1, bindResult);
// 6. 验证绑定关系
MemberVO memberVO = memberService.getMemberById(memberId);
assertNotNull(memberVO);
assertNotNull(memberVO.getStudents());
assertTrue(memberVO.getStudents().size() > 0);
// 7. 验证学生的会员绑定
List<StudentVO> boundStudents = studentService.selectStudentVOsByMemberId(memberId);
assertNotNull(boundStudents);
assertTrue(boundStudents.size() > 0);
}
/**
* 测试教师只能绑定本校学生
*/
@Test
@Order(4)
public void testTeacherBindStudentRestriction() {
// 1. 创建教师会员学校ID=1
MemberDTO teacherDTO = new MemberDTO();
teacherDTO.setPhone("13822222222");
teacherDTO.setNickname("集成测试教师");
teacherDTO.setIdentityType("2");
teacherDTO.setRegionId(111L);
teacherDTO.setSchoolId(1L);
teacherDTO.setSchoolGradeId(1L);
teacherDTO.setSchoolClassId(1L);
memberService.insertMember(teacherDTO);
Member teacher = memberService.getMemberByPhone("13822222222");
assertNotNull(teacher);
// 2. 创建本校学生
StudentDTO studentDTO = new StudentDTO();
studentDTO.setStudentName("本校学生");
studentDTO.setStudentNo("SAME_SCHOOL_001");
studentDTO.setGender("1");
studentDTO.setRegionId(111L);
studentDTO.setSchoolId(1L); // 同一学校
studentDTO.setSchoolGradeId(1L);
studentDTO.setSchoolClassId(1L);
studentService.insertStudent(studentDTO);
// 3. 获取学生ID
StudentDTO query = new StudentDTO();
query.setStudentNo("SAME_SCHOOL_001");
query.setPageNum(1);
query.setPageSize(10);
TableDataInfo result = studentService.selectStudentList(query);
@SuppressWarnings("unchecked")
List<StudentVO> students = (List<StudentVO>) result.getRows();
Long studentId = students.get(0).getStudentId();
// 4. 验证学生在教师学校
boolean inSchool = studentService.isStudentInSchool(studentId, teacher.getSchoolId());
assertTrue(inSchool);
// 5. 绑定应该成功
int bindResult = memberService.bindStudent(teacher.getMemberId(), studentId);
assertEquals(1, bindResult);
}
/**
* 测试解绑学生后可以删除会员
*/
@Test
@Order(5)
public void testUnbindThenDeleteMember() {
// 1. 创建会员
MemberDTO memberDTO = new MemberDTO();
memberDTO.setPhone("13833333333");
memberDTO.setNickname("待删除会员");
memberDTO.setIdentityType("1");
memberService.insertMember(memberDTO);
Member member = memberService.getMemberByPhone("13833333333");
Long memberId = member.getMemberId();
// 2. 创建并绑定学生
StudentDTO studentDTO = new StudentDTO();
studentDTO.setStudentName("待解绑学生");
studentDTO.setStudentNo("UNBIND_DELETE_001");
studentDTO.setGender("1");
studentDTO.setRegionId(111L);
studentDTO.setSchoolId(1L);
studentDTO.setSchoolGradeId(1L);
studentDTO.setSchoolClassId(1L);
studentDTO.setMemberId(memberId);
studentService.insertStudent(studentDTO);
// 3. 验证有绑定学生,不能删除
assertFalse(memberService.checkCanDelete(memberId));
// 4. 获取学生ID并解绑
StudentDTO query = new StudentDTO();
query.setStudentNo("UNBIND_DELETE_001");
query.setPageNum(1);
query.setPageSize(10);
TableDataInfo result = studentService.selectStudentList(query);
@SuppressWarnings("unchecked")
List<StudentVO> students = (List<StudentVO>) result.getRows();
Long studentId = students.get(0).getStudentId();
memberService.unbindStudent(memberId, studentId);
// 5. 验证解绑后可以删除
assertTrue(memberService.checkCanDelete(memberId));
// 6. 删除会员
int deleteResult = memberService.deleteMember(memberId);
assertEquals(1, deleteResult);
}
// ========== 区域-学校-学生链路测试 ==========
/**
* 测试区域路径查询功能
*/
@Test
@Order(6)
public void testRegionPathQuery() {
// 测试区域路径查询
Long regionId = regionService.getRegionIdByPath("湖北省-武汉市-武昌区");
// 如果测试数据存在该区域应该返回ID
// 否则返回null
// 这里只验证方法不报错
assertDoesNotThrow(() -> regionService.getRegionIdByPath("湖北省-武汉市-武昌区"));
}
/**
* 测试学校名称查询功能
*/
@Test
@Order(7)
public void testSchoolNameQuery() {
// 测试按名称和区域查询学校
Long schoolId = schoolService.getSchoolIdByName("武汉市第一中学", 111L);
// 验证方法不报错
assertDoesNotThrow(() -> schoolService.getSchoolIdByName("武汉市第一中学", 111L));
}
// ========== 应用管理集成测试 ==========
/**
* 测试应用完整生命周期
*/
@Test
@Order(8)
public void testApplicationLifecycle() {
// 1. 创建应用
ApplicationDTO createDTO = new ApplicationDTO();
createDTO.setAppName("集成测试应用");
createDTO.setContactPerson("测试人员");
createDTO.setContactPhone("13800138000");
createDTO.setApiIds(Arrays.asList(1L, 2L, 3L));
ApplicationVO created = applicationService.insertApplication(createDTO);
assertNotNull(created);
assertNotNull(created.getAppCode());
assertNotNull(created.getAppSecret());
Long appId = created.getAppId();
// 2. 查询应用
ApplicationVO queried = applicationService.getApplicationById(appId);
assertNotNull(queried);
assertEquals("集成测试应用", queried.getAppName());
assertEquals(3, queried.getApiList().size());
// 3. 修改应用
ApplicationDTO updateDTO = new ApplicationDTO();
updateDTO.setAppId(appId);
updateDTO.setAppName("集成测试应用(已修改)");
updateDTO.setContactPerson("新测试人员");
updateDTO.setContactPhone("13900139000");
updateDTO.setApiIds(Arrays.asList(4L, 5L, 6L));
int updateResult = applicationService.updateApplication(updateDTO);
assertEquals(1, updateResult);
// 4. 验证修改
ApplicationVO updated = applicationService.getApplicationById(appId);
assertEquals("集成测试应用(已修改)", updated.getAppName());
assertEquals(3, updated.getApiList().size());
// 5. 重置密钥
String oldSecret = updated.getAppSecret();
String newSecret = applicationService.resetSecret(appId);
assertNotEquals(oldSecret, newSecret);
assertEquals(32, newSecret.length());
// 6. 删除应用
int deleteResult = applicationService.deleteApplication(appId);
assertEquals(1, deleteResult);
// 7. 验证已删除
ApplicationVO deleted = applicationService.getApplicationById(appId);
assertNull(deleted);
}
// ========== 批量导入相关集成测试 ==========
/**
* 测试会员自动创建功能
*/
@Test
@Order(9)
public void testGetOrCreateMemberByPhone() {
String phone = "13899999999";
// 1. 第一次调用应该创建会员
Long memberId1 = memberService.getOrCreateMemberByPhone(phone);
assertNotNull(memberId1);
// 2. 第二次调用应该返回同一个会员
Long memberId2 = memberService.getOrCreateMemberByPhone(phone);
assertEquals(memberId1, memberId2);
// 3. 验证会员数据
Member member = memberService.getMemberByPhone(phone);
assertNotNull(member);
assertEquals(phone, member.getPhone());
assertNotNull(member.getMemberCode());
assertNotNull(member.getNickname());
}
/**
* 测试学校年级班级查询链路
*/
@Test
@Order(10)
public void testSchoolGradeClassQueryChain() {
// 1. 按区域查询学校
SchoolQueryDTO schoolQuery = new SchoolQueryDTO();
schoolQuery.setRegionId(111L);
List<SchoolVO> schools = schoolService.selectSchoolList(schoolQuery);
assertNotNull(schools);
if (!schools.isEmpty()) {
Long schoolId = schools.get(0).getSchoolId();
// 2. 查询学校树获取年级
List<SchoolTreeVO> tree = schoolService.selectSchoolTree(111L);
SchoolTreeVO schoolTree = tree.stream()
.filter(s -> s.getId().equals(schoolId))
.findFirst()
.orElse(null);
if (schoolTree != null && schoolTree.getChildren() != null && !schoolTree.getChildren().isEmpty()) {
SchoolTreeVO grade = schoolTree.getChildren().get(0);
Long schoolGradeId = grade.getSchoolGradeId();
// 3. 验证可以获取年级下的班级
if (grade.getChildren() != null && !grade.getChildren().isEmpty()) {
SchoolTreeVO clazz = grade.getChildren().get(0);
Long schoolClassId = clazz.getSchoolClassId();
assertNotNull(schoolClassId);
}
}
}
}
// ========== 数据权限集成测试 ==========
/**
* 测试查询参数中的数据权限字段
*/
@Test
@Order(11)
public void testDataScopeParams() {
// 测试DTO的params字段
StudentDTO dto = new StudentDTO();
assertNotNull(dto.getParams());
assertTrue(dto.getParams() instanceof java.util.Map);
MemberDTO memberDTO = new MemberDTO();
assertNotNull(memberDTO.getParams());
SchoolQueryDTO schoolDTO = new SchoolQueryDTO();
assertNotNull(schoolDTO.getParams());
}
// ========== 统计查询集成测试 ==========
/**
* 测试学校相关统计
*/
@Test
@Order(12)
public void testSchoolStatistics() {
// 测试学校学生数量统计
int studentCount = studentService.countBySchoolId(1L);
assertTrue(studentCount >= 0);
// 测试年级学生数量统计
int gradeCount = studentService.countBySchoolGradeId(1L);
assertTrue(gradeCount >= 0);
// 测试班级学生数量统计
int classCount = studentService.countBySchoolClassId(1L);
assertTrue(classCount >= 0);
}
/**
* 测试会员统计
*/
@Test
@Order(13)
public void testMemberStatistics() {
// 测试会员绑定学生数量
int studentCount = studentService.countByMemberId(1L);
assertTrue(studentCount >= 0);
}
}