From 4c2dd7fdd86ddfad69611a5e825ff4a0cfab3c06 Mon Sep 17 00:00:00 2001
From: “mitao” <“2763622819@qq.com”>
Date: 星期四, 30 四月 2026 22:03:06 +0800
Subject: [PATCH] fix:登录注册修改

---
 tcm-training-admin-backend/src/test/java/com/tcm/training/admin/app/auth/service/AppAuthServiceTest.java |   65 ++++++++++++++++++++++++++++++++
 1 files changed, 65 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 b3b383d..41dd1a6 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
@@ -11,6 +11,7 @@
 import com.tcm.training.admin.app.auth.vo.AppLoginResponse;
 import com.tcm.training.admin.app.auth.vo.AppPasswordResetVerifyResponse;
 import com.tcm.training.admin.app.auth.vo.AppSmsCodeSendResponse;
+import com.tcm.training.admin.app.auth.exception.InviteCodeRequiredException;
 import com.tcm.training.admin.app.share.service.AppShareService;
 import com.tcm.training.admin.member.entity.AppUser;
 import com.tcm.training.admin.member.mapper.UserMapper;
@@ -276,6 +277,7 @@
         AppWechatLoginRequest request = new AppWechatLoginRequest();
         request.setAccessToken("access-token");
         request.setOpenid("openid-new");
+        request.setInviteCode("ABC123");
 
         AppWechatUserProfile profile = new AppWechatUserProfile();
         profile.setOpenid("openid-new");
@@ -289,6 +291,7 @@
 
         when(appWechatAuthClient.resolveUserProfile(request)).thenReturn(profile);
         when(userMapper.selectOne(any())).thenReturn(null);
+        when(appShareService.resolveInviteBindingTarget("ABC123")).thenReturn(buildInviteTarget());
         when(appAuthSessionService.getTokenInfo()).thenReturn(tokenInfo);
 
         AppLoginResponse response = appAuthService.wechatLogin(request);
@@ -301,7 +304,31 @@
         assertEquals("https://cdn.example/new-avatar.png", appUserCaptor.getValue().getAvatar());
         assertEquals(Integer.valueOf(1), appUserCaptor.getValue().getGender());
         assertEquals(Integer.valueOf(0), appUserCaptor.getValue().getType());
+        assertEquals(Long.valueOf(10L), appUserCaptor.getValue().getClinicId());
+        assertEquals(Long.valueOf(20L), appUserCaptor.getValue().getSuperiorClinicUserId());
         assertEquals("new-token", response.getToken());
+    }
+
+    /**
+     * 微信首次登录未携带邀请码时应提示联系管理员获取。
+     */
+    @Test
+    void wechatLoginShouldRequireInviteCodeWhenOpenidNotExists() {
+        AppWechatLoginRequest request = new AppWechatLoginRequest();
+        request.setAccessToken("access-token");
+        request.setOpenid("openid-new");
+
+        AppWechatUserProfile profile = new AppWechatUserProfile();
+        profile.setOpenid("openid-new");
+
+        when(appWechatAuthClient.resolveUserProfile(request)).thenReturn(profile);
+        when(userMapper.selectOne(any())).thenReturn(null);
+
+        InviteCodeRequiredException exception = assertThrows(InviteCodeRequiredException.class,
+                () -> appAuthService.wechatLogin(request));
+
+        assertEquals("暂无邀请码,请联系管理员获取", exception.getMessage());
+        verify(userMapper, never()).insert(any());
     }
 
     /**
@@ -348,6 +375,7 @@
         AppAppleLoginRequest request = new AppAppleLoginRequest();
         request.setIdentityToken("identity-token");
         request.setUserIdentifier("apple-user-new");
+        request.setInviteCode("ABC123");
 
         AppAppleUserProfile profile = new AppAppleUserProfile();
         profile.setSubject("apple-subject-new");
@@ -359,6 +387,7 @@
 
         when(appAppleAuthClient.resolveUserProfile(request)).thenReturn(profile);
         when(userMapper.selectOne(any())).thenReturn(null);
+        when(appShareService.resolveInviteBindingTarget("ABC123")).thenReturn(buildInviteTarget());
         when(appAuthSessionService.getTokenInfo()).thenReturn(tokenInfo);
 
         AppLoginResponse response = appAuthService.appleLogin(request);
@@ -370,7 +399,32 @@
         assertEquals("apple-user-new", appUserCaptor.getValue().getAppleUserIdentifier());
         assertEquals("苹果用户", appUserCaptor.getValue().getNickname());
         assertEquals(Integer.valueOf(0), appUserCaptor.getValue().getType());
+        assertEquals(Long.valueOf(10L), appUserCaptor.getValue().getClinicId());
+        assertEquals(Long.valueOf(20L), appUserCaptor.getValue().getSuperiorClinicUserId());
         assertEquals("apple-new-token", response.getToken());
+    }
+
+    /**
+     * 苹果首次登录未携带邀请码时应提示联系管理员获取。
+     */
+    @Test
+    void appleLoginShouldRequireInviteCodeWhenSubjectNotExists() {
+        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");
+
+        when(appAppleAuthClient.resolveUserProfile(request)).thenReturn(profile);
+        when(userMapper.selectOne(any())).thenReturn(null);
+
+        InviteCodeRequiredException exception = assertThrows(InviteCodeRequiredException.class,
+                () -> appAuthService.appleLogin(request));
+
+        assertEquals("暂无邀请码,请联系管理员获取", exception.getMessage());
+        verify(userMapper, never()).insert(any());
     }
 
     /**
@@ -391,6 +445,17 @@
     }
 
     /**
+     * 构造邀请绑定目标。
+     */
+    private AppShareService.InviteBindingTarget buildInviteTarget() {
+        AppShareService.InviteBindingTarget target = new AppShareService.InviteBindingTarget();
+        target.setInviteCode("ABC123");
+        target.setClinicId(10L);
+        target.setSuperiorClinicUserId(20L);
+        return target;
+    }
+
+    /**
      * 统一构造启用中的 APP 用户测试桩。
      */
     private AppUser buildEnabledUser(String phone, String password) {

--
Gitblit v1.7.1