package com.rongyichuang.user;
|
|
import com.rongyichuang.user.entity.User;
|
import com.rongyichuang.user.service.UserService;
|
import com.rongyichuang.user.repository.UserRepository;
|
import com.rongyichuang.employee.entity.Employee;
|
import com.rongyichuang.employee.repository.EmployeeRepository;
|
import com.rongyichuang.judge.entity.Judge;
|
import com.rongyichuang.judge.repository.JudgeRepository;
|
import org.junit.jupiter.api.Test;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.boot.test.context.SpringBootTest;
|
import org.springframework.test.context.ActiveProfiles;
|
import org.springframework.transaction.annotation.Transactional;
|
|
import static org.junit.jupiter.api.Assertions.*;
|
|
/**
|
* 测试saveUserPhone方法的功能
|
*/
|
@SpringBootTest
|
@ActiveProfiles("test")
|
@Transactional
|
public class SaveUserPhoneTest {
|
|
@Autowired
|
private UserService userService;
|
|
@Autowired
|
private UserRepository userRepository;
|
|
@Autowired
|
private EmployeeRepository employeeRepository;
|
|
@Autowired
|
private JudgeRepository judgeRepository;
|
|
@Test
|
public void testSaveUserPhoneNewPhone() {
|
System.out.println("=== 测试场景1:保存新手机号 ===");
|
|
// 创建一个有openid的用户
|
User user = new User();
|
user.setName("测试用户");
|
user.setWxOpenid("test_openid_123");
|
user = userRepository.save(user);
|
|
// 保存手机号(使用时间戳确保唯一性)
|
String phone = "139" + String.valueOf(System.currentTimeMillis()).substring(5);
|
User result = userService.saveUserPhone(user.getId(), phone);
|
|
// 验证结果
|
assertEquals(phone, result.getPhone());
|
System.out.println("✅ 成功保存新手机号: " + phone);
|
}
|
|
@Test
|
public void testSaveUserPhoneSameUser() {
|
System.out.println("=== 测试场景2:保存相同用户的手机号 ===");
|
|
// 创建一个已有手机号的用户
|
String phone = "139" + String.valueOf(System.currentTimeMillis()).substring(5);
|
User user = new User();
|
user.setName("测试用户");
|
user.setPhone(phone);
|
user.setWxOpenid("test_openid_456");
|
user = userRepository.save(user);
|
|
// 再次保存相同手机号
|
User result = userService.saveUserPhone(user.getId(), phone);
|
|
// 验证结果
|
assertEquals(phone, result.getPhone());
|
System.out.println("✅ 相同用户手机号无需更新");
|
}
|
|
@Test
|
public void testSaveUserPhoneWithDataMigration() {
|
System.out.println("=== 测试场景3:数据迁移场景 ===");
|
|
// 创建一个没有openid但有手机号的用户(老用户)
|
String phone = "139" + String.valueOf(System.currentTimeMillis()).substring(5);
|
User oldUser = new User();
|
oldUser.setName("老用户");
|
oldUser.setPhone(phone);
|
// 注意:没有设置wxOpenid
|
oldUser = userRepository.save(oldUser);
|
|
// 为老用户创建员工信息
|
Employee employee = new Employee();
|
employee.setName("老用户员工");
|
employee.setPhone(phone);
|
employee.setUserId(oldUser.getId());
|
employee.setRoleId("EMPLOYEE");
|
employee = employeeRepository.save(employee);
|
|
// 创建一个有openid的新用户(微信用户)
|
User newUser = new User();
|
newUser.setName("新用户");
|
newUser.setWxOpenid("test_openid_789");
|
newUser = userRepository.save(newUser);
|
|
// 新用户尝试保存老用户的手机号
|
User result = userService.saveUserPhone(newUser.getId(), phone);
|
|
// 验证结果
|
assertEquals(phone, result.getPhone());
|
|
// 验证老用户的手机号被清空
|
User updatedOldUser = userRepository.findById(oldUser.getId()).orElse(null);
|
assertNotNull(updatedOldUser);
|
assertNull(updatedOldUser.getPhone());
|
|
// 验证员工信息被迁移到新用户
|
Employee updatedEmployee = employeeRepository.findById(employee.getId()).orElse(null);
|
assertNotNull(updatedEmployee);
|
assertEquals(newUser.getId(), updatedEmployee.getUserId());
|
|
System.out.println("✅ 数据迁移成功完成");
|
System.out.println(" - 老用户手机号已清空");
|
System.out.println(" - 员工信息已迁移到新用户");
|
}
|
|
@Test
|
public void testSaveUserPhoneConflictResolution() {
|
System.out.println("=== 测试场景4:冲突处理 ===");
|
|
// 创建一个有openid和手机号的用户A
|
String phone = "139" + String.valueOf(System.currentTimeMillis()).substring(5);
|
User userA = new User();
|
userA.setName("用户A");
|
userA.setPhone(phone);
|
userA.setWxOpenid("test_openid_A");
|
userA = userRepository.save(userA);
|
|
// 创建一个有openid的用户B
|
User userB = new User();
|
userB.setName("用户B");
|
userB.setWxOpenid("test_openid_B");
|
userB = userRepository.save(userB);
|
|
// 用户B尝试保存用户A的手机号(应该抛出异常)
|
final Long userBId = userB.getId();
|
assertThrows(RuntimeException.class, () -> {
|
userService.saveUserPhone(userBId, phone);
|
});
|
|
System.out.println("✅ 正确处理了冲突情况");
|
}
|
|
@Test
|
public void testSaveUserPhoneComplexDataMigration() {
|
System.out.println("=== 测试场景5:复杂数据迁移 ===");
|
|
// 创建一个没有openid但有手机号的用户(老用户)
|
String phone = "139" + String.valueOf(System.currentTimeMillis()).substring(5);
|
User oldUser = new User();
|
oldUser.setName("老用户");
|
oldUser.setPhone(phone);
|
oldUser = userRepository.save(oldUser);
|
|
// 为老用户创建员工和裁判信息
|
Employee employee = new Employee();
|
employee.setName("老用户员工");
|
employee.setPhone(phone);
|
employee.setUserId(oldUser.getId());
|
employee.setRoleId("EMPLOYEE");
|
employee = employeeRepository.save(employee);
|
|
Judge judge = new Judge();
|
judge.setName("老用户裁判");
|
judge.setPhone(phone);
|
judge.setUserId(oldUser.getId());
|
judge = judgeRepository.save(judge);
|
|
// 创建一个有openid的新用户(微信用户)
|
User newUser = new User();
|
newUser.setName("新用户");
|
newUser.setWxOpenid("test_openid_complex");
|
newUser = userRepository.save(newUser);
|
|
// 新用户尝试保存老用户的手机号
|
User result = userService.saveUserPhone(newUser.getId(), phone);
|
|
// 验证结果
|
assertEquals(phone, result.getPhone());
|
|
// 验证老用户的手机号被清空
|
User updatedOldUser = userRepository.findById(oldUser.getId()).orElse(null);
|
assertNotNull(updatedOldUser);
|
assertNull(updatedOldUser.getPhone());
|
|
// 验证员工信息被迁移到新用户
|
Employee updatedEmployee = employeeRepository.findById(employee.getId()).orElse(null);
|
assertNotNull(updatedEmployee);
|
assertEquals(newUser.getId(), updatedEmployee.getUserId());
|
|
// 验证评委信息被迁移到新用户
|
Judge updatedJudge = judgeRepository.findById(judge.getId()).orElse(null);
|
assertNotNull(updatedJudge);
|
assertEquals(newUser.getId(), updatedJudge.getUserId());
|
|
System.out.println("✅ 复杂数据迁移成功完成");
|
System.out.println(" - 老用户手机号已清空");
|
System.out.println(" - 员工信息已迁移到新用户");
|
System.out.println(" - 评委信息已迁移到新用户");
|
}
|
}
|