From 69c2c400e6e3393424d704742cd9de0e6da07e2f Mon Sep 17 00:00:00 2001
From: “mitao” <“2763622819@qq.com”>
Date: 星期一, 27 四月 2026 20:12:30 +0800
Subject: [PATCH] fix:ios授权登录
---
tcm-training-admin-backend/src/test/java/com/tcm/training/admin/app/auth/service/AppAuthServiceTest.java | 91 +++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 91 insertions(+), 0 deletions(-)
diff --git a/tcm-training-admin-backend/src/test/java/com/tcm/training/admin/app/auth/service/AppAuthServiceTest.java b/tcm-training-admin-backend/src/test/java/com/tcm/training/admin/app/auth/service/AppAuthServiceTest.java
index 984e318..6cd7be9 100644
--- a/tcm-training-admin-backend/src/test/java/com/tcm/training/admin/app/auth/service/AppAuthServiceTest.java
+++ b/tcm-training-admin-backend/src/test/java/com/tcm/training/admin/app/auth/service/AppAuthServiceTest.java
@@ -5,6 +5,7 @@
import com.tcm.training.admin.app.auth.dto.AppPasswordLoginRequest;
import com.tcm.training.admin.app.auth.dto.AppPasswordResetRequest;
import com.tcm.training.admin.app.auth.dto.AppPasswordResetVerifyRequest;
+import com.tcm.training.admin.app.auth.dto.AppAppleLoginRequest;
import com.tcm.training.admin.app.auth.dto.AppSmsCodeSendRequest;
import com.tcm.training.admin.app.auth.dto.AppWechatLoginRequest;
import com.tcm.training.admin.app.auth.vo.AppLoginResponse;
@@ -68,6 +69,9 @@
private AppWechatAuthClient appWechatAuthClient;
@Mock
+ private AppAppleAuthClient appAppleAuthClient;
+
+ @Mock
private StringRedisTemplate stringRedisTemplate;
@Mock
@@ -89,6 +93,7 @@
passwordEncoder,
appAuthSessionService,
appWechatAuthClient,
+ appAppleAuthClient,
stringRedisTemplate
);
}
@@ -295,6 +300,92 @@
}
/**
+ * 苹果已绑定用户登录时应更新苹果绑定信息并返回统一登录响应。
+ */
+ @Test
+ void appleLoginShouldReuseExistingUser() {
+ AppAppleLoginRequest request = new AppAppleLoginRequest();
+ request.setIdentityToken("identity-token");
+ request.setUserIdentifier("apple-user-1");
+
+ AppAppleUserProfile profile = new AppAppleUserProfile();
+ profile.setSubject("apple-subject-1");
+ profile.setUserIdentifier("apple-user-1");
+
+ AppUser user = buildEnabledUser("13800138009", "ENCODED");
+ user.setAppleIdentitySubject("apple-subject-1");
+ user.setAppleUserIdentifier("apple-user-legacy");
+ user.setNickname("已存在用户");
+
+ SaTokenInfo tokenInfo = new SaTokenInfo();
+ tokenInfo.setTokenValue("apple-token");
+ tokenInfo.setTokenTimeout(7200L);
+
+ when(appAppleAuthClient.resolveUserProfile(request)).thenReturn(profile);
+ when(userMapper.selectOne(any())).thenReturn(user);
+ when(appAuthSessionService.getTokenInfo()).thenReturn(tokenInfo);
+
+ AppLoginResponse response = appAuthService.appleLogin(request);
+
+ verify(userMapper).updateById(appUserCaptor.capture());
+ verify(userMapper, never()).insert(any());
+ assertEquals("apple-subject-1", appUserCaptor.getValue().getAppleIdentitySubject());
+ assertEquals("apple-user-1", appUserCaptor.getValue().getAppleUserIdentifier());
+ assertEquals("已存在用户", response.getUser().getNickname());
+ assertEquals("apple-token", response.getToken());
+ }
+
+ /**
+ * 苹果首次登录时应自动创建普通用户并等待后续绑定手机号。
+ */
+ @Test
+ void appleLoginShouldCreateUserWhenSubjectNotExists() {
+ AppAppleLoginRequest request = new AppAppleLoginRequest();
+ request.setIdentityToken("identity-token");
+ request.setUserIdentifier("apple-user-new");
+
+ AppAppleUserProfile profile = new AppAppleUserProfile();
+ profile.setSubject("apple-subject-new");
+ profile.setUserIdentifier("apple-user-new");
+
+ SaTokenInfo tokenInfo = new SaTokenInfo();
+ tokenInfo.setTokenValue("apple-new-token");
+ tokenInfo.setTokenTimeout(7200L);
+
+ when(appAppleAuthClient.resolveUserProfile(request)).thenReturn(profile);
+ when(userMapper.selectOne(any())).thenReturn(null);
+ when(appAuthSessionService.getTokenInfo()).thenReturn(tokenInfo);
+
+ AppLoginResponse response = appAuthService.appleLogin(request);
+
+ verify(userMapper).insert(appUserCaptor.capture());
+ verify(userMapper, never()).updateById(any());
+ assertNull(appUserCaptor.getValue().getPhone());
+ assertEquals("apple-subject-new", appUserCaptor.getValue().getAppleIdentitySubject());
+ assertEquals("apple-user-new", appUserCaptor.getValue().getAppleUserIdentifier());
+ assertEquals("苹果用户", appUserCaptor.getValue().getNickname());
+ assertEquals(Integer.valueOf(0), appUserCaptor.getValue().getType());
+ assertEquals("apple-new-token", response.getToken());
+ }
+
+ /**
+ * 苹果授权无效时应直接拒绝登录。
+ */
+ @Test
+ void appleLoginShouldFailWhenIdentityTokenInvalid() {
+ AppAppleLoginRequest request = new AppAppleLoginRequest();
+ request.setIdentityToken("bad-token");
+ request.setUserIdentifier("apple-user-bad");
+
+ when(appAppleAuthClient.resolveUserProfile(request)).thenThrow(new IllegalArgumentException("苹果登录授权失败"));
+
+ IllegalArgumentException exception = assertThrows(IllegalArgumentException.class,
+ () -> appAuthService.appleLogin(request));
+
+ assertEquals("苹果登录授权失败", exception.getMessage());
+ }
+
+ /**
* 统一构造启用中的 APP 用户测试桩。
*/
private AppUser buildEnabledUser(String phone, String password) {
--
Gitblit v1.7.1