From b4bb264d87478ac9006bd10f83584469a770ebd1 Mon Sep 17 00:00:00 2001
From: 13404089107 <puwei@sinata.cn>
Date: 星期四, 07 五月 2026 18:20:17 +0800
Subject: [PATCH] Merge branch 'master' of http://120.76.84.145:10101/gitblit/r/java/tcm-training

---
 tcm-training-admin-backend/src/test/java/com/tcm/training/admin/member/service/UserAppServiceTest.java |   45 +++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 45 insertions(+), 0 deletions(-)

diff --git a/tcm-training-admin-backend/src/test/java/com/tcm/training/admin/member/service/UserAppServiceTest.java b/tcm-training-admin-backend/src/test/java/com/tcm/training/admin/member/service/UserAppServiceTest.java
index 3134748..21d910b 100644
--- a/tcm-training-admin-backend/src/test/java/com/tcm/training/admin/member/service/UserAppServiceTest.java
+++ b/tcm-training-admin-backend/src/test/java/com/tcm/training/admin/member/service/UserAppServiceTest.java
@@ -1,14 +1,23 @@
 package com.tcm.training.admin.member.service;
 
+import com.baomidou.mybatisplus.core.MybatisConfiguration;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.metadata.TableInfoHelper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.tcm.training.admin.common.PageResponse;
 import com.tcm.training.admin.live.mapper.ClinicMapper;
+import com.tcm.training.admin.member.entity.AppUser;
 import com.tcm.training.admin.member.mapper.UserMapper;
+import com.tcm.training.admin.member.row.UserDetailRow;
 import com.tcm.training.admin.member.row.UserListRow;
+import com.tcm.training.admin.member.vo.UserDetailVO;
 import com.tcm.training.admin.member.vo.UserListItemVO;
+import org.apache.ibatis.builder.MapperBuilderAssistant;
+import org.junit.jupiter.api.BeforeAll;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.extension.ExtendWith;
+import org.mockito.ArgumentCaptor;
 import org.mockito.InjectMocks;
 import org.mockito.Mock;
 import org.mockito.junit.jupiter.MockitoExtension;
@@ -19,13 +28,22 @@
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertThrows;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.ArgumentMatchers.eq;
 import static org.mockito.ArgumentMatchers.isNull;
+import static org.mockito.Mockito.never;
+import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 
 @ExtendWith(MockitoExtension.class)
 class UserAppServiceTest {
+
+    @BeforeAll
+    static void initLambdaCache() {
+        MapperBuilderAssistant assistant = new MapperBuilderAssistant(new MybatisConfiguration(), "");
+        TableInfoHelper.initTableInfo(assistant, AppUser.class);
+    }
 
     @Mock
     private UserMapper userMapper;
@@ -88,4 +106,31 @@
 
         assertEquals("会员状态筛选不合法", error.getMessage());
     }
+
+    @Test
+    void unbindWechatShouldClearWechatFieldsWithExplicitNullUpdate() {
+        AppUser user = new AppUser();
+        user.setId(12L);
+        user.setDeleted(0);
+
+        UserDetailRow detailRow = new UserDetailRow();
+        detailRow.setId(12L);
+        detailRow.setNickname("张医生");
+
+        when(userMapper.selectOne(any())).thenReturn(user);
+        when(userMapper.selectUserDetail(12L)).thenReturn(detailRow);
+
+        UserDetailVO result = userAppService.unbindWechat(12L);
+
+        ArgumentCaptor<LambdaUpdateWrapper<AppUser>> wrapperCaptor = ArgumentCaptor.forClass(LambdaUpdateWrapper.class);
+        verify(userMapper).update(isNull(), wrapperCaptor.capture());
+        verify(userMapper, never()).updateById(any(AppUser.class));
+        String sqlSet = wrapperCaptor.getValue().getSqlSet();
+        assertTrue(sqlSet.contains("wechat_openid"));
+        assertTrue(sqlSet.contains("wechat_nickname"));
+        assertTrue(sqlSet.contains("wechat_avatar"));
+        assertTrue(sqlSet.contains("wechat_bound_at"));
+        assertTrue(wrapperCaptor.getValue().getParamNameValuePairs().values().stream().allMatch(value -> value == null));
+        assertEquals(Long.valueOf(12L), result.getId());
+    }
 }

--
Gitblit v1.7.1