package com.rongyichuang.auth; import com.rongyichuang.auth.api.AuthGraphqlApi; import com.rongyichuang.auth.dto.WxLoginRequest; import com.rongyichuang.auth.dto.WxLoginResponse; import com.rongyichuang.auth.entity.WxLoginRecord; import com.rongyichuang.auth.repository.WxLoginRecordRepository; import com.rongyichuang.user.entity.User; import com.rongyichuang.user.repository.UserRepository; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.transaction.annotation.Transactional; import java.util.Optional; @SpringBootTest @Transactional public class WxLoginTest { @Autowired private AuthGraphqlApi authGraphqlApi; @Autowired private UserRepository userRepository; @Autowired private WxLoginRecordRepository wxLoginRecordRepository; @Test public void testWxLoginNewUser() { try { System.out.println("=== 测试微信登录(新用户) ==="); WxLoginRequest request = new WxLoginRequest(); request.setWxOpenid("test_openid_001"); request.setWxUnionid("test_unionid_001"); request.setLoginIp("192.168.1.100"); request.setDeviceInfo("iPhone 13"); request.setSessionKey("test_session_key"); request.setPhoneAuthorized(false); System.out.println("微信登录请求: openid=" + request.getWxOpenid() + ", unionid=" + request.getWxUnionid()); WxLoginResponse response = authGraphqlApi.wxLogin(request); System.out.println("微信登录成功!"); System.out.println("Token: " + response.getToken()); System.out.println("用户ID: " + response.getUserInfo().getUserId()); System.out.println("用户名: " + response.getUserInfo().getName()); System.out.println("用户类型: " + response.getUserInfo().getUserType()); System.out.println("是否新用户: " + response.getIsNewUser()); System.out.println("登录记录ID: " + response.getLoginRecordId()); // 验证用户是否创建 Optional userOpt = userRepository.findByWxOpenid(request.getWxOpenid()); if (userOpt.isPresent()) { System.out.println("用户创建成功,ID: " + userOpt.get().getId()); } // 验证登录记录是否创建 Optional recordOpt = wxLoginRecordRepository.findById(response.getLoginRecordId()); if (recordOpt.isPresent()) { WxLoginRecord record = recordOpt.get(); System.out.println("登录记录创建成功,openid: " + record.getWxOpenid() + ", 登录时间: " + record.getLoginTime()); } } catch (Exception e) { System.err.println("微信登录失败: " + e.getMessage()); e.printStackTrace(); } } @Test public void testWxLoginExistingUser() { try { System.out.println("=== 测试微信登录(已存在用户) ==="); // 先创建一个用户 User existingUser = new User(); existingUser.setWxOpenid("existing_openid_001"); existingUser.setWxUnionid("existing_unionid_001"); existingUser.setName("已存在的微信用户"); existingUser = userRepository.save(existingUser); System.out.println("预先创建用户,ID: " + existingUser.getId()); WxLoginRequest request = new WxLoginRequest(); request.setWxOpenid("existing_openid_001"); request.setWxUnionid("existing_unionid_001"); request.setLoginIp("192.168.1.101"); request.setDeviceInfo("Android Phone"); request.setSessionKey("test_session_key_2"); request.setPhoneAuthorized(true); request.setPhone("13800000001"); System.out.println("微信登录请求: openid=" + request.getWxOpenid()); WxLoginResponse response = authGraphqlApi.wxLogin(request); System.out.println("微信登录成功!"); System.out.println("用户ID: " + response.getUserInfo().getUserId()); System.out.println("用户名: " + response.getUserInfo().getName()); System.out.println("是否新用户: " + response.getIsNewUser()); System.out.println("登录记录ID: " + response.getLoginRecordId()); // 验证登录记录 Optional recordOpt = wxLoginRecordRepository.findById(response.getLoginRecordId()); if (recordOpt.isPresent()) { WxLoginRecord record = recordOpt.get(); System.out.println("登录记录: 手机号授权=" + record.getPhoneAuthorized() + ", 授权时间=" + record.getPhoneAuthTime()); } } catch (Exception e) { System.err.println("微信登录失败: " + e.getMessage()); e.printStackTrace(); } } }