package com.tcm.training.admin.member.service; import com.baomidou.mybatisplus.core.metadata.IPage; 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.mapper.UserMapper; import com.tcm.training.admin.member.row.UserListRow; import com.tcm.training.admin.member.vo.UserListItemVO; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; import java.time.LocalDateTime; import java.util.Collections; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertThrows; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.ArgumentMatchers.isNull; import static org.mockito.Mockito.when; @ExtendWith(MockitoExtension.class) class UserAppServiceTest { @Mock private UserMapper userMapper; @Mock private ClinicMapper clinicMapper; @Mock private BCryptPasswordEncoder passwordEncoder; @InjectMocks private UserAppService userAppService; @Test void pageShouldMapMemberExpireAtForMemberUserQuery() { LocalDateTime memberExpireAt = LocalDateTime.of(2026, 6, 8, 3, 15); UserListRow row = new UserListRow(); row.setId(11L); row.setNickname("王美丽"); row.setPhone("14712346905"); row.setAvatar("https://cdn.test/avatar.png"); row.setIsMember(1); row.setMemberExpireAt(memberExpireAt); IPage pageResult = new Page(1, 10, 1); pageResult.setRecords(Collections.singletonList(row)); when(userMapper.selectUserPage( any(), eq("王美丽"), eq("14712346905"), isNull(), isNull(), isNull(), eq("ACTIVE"), isNull(), isNull(), isNull(), isNull() )).thenReturn(pageResult); PageResponse result = userAppService.page( 1, 10, " 王美丽 ", "14712346905", null, null, null, "active", null, null, null, null ); assertEquals(1, result.getList().size()); assertEquals(memberExpireAt, result.getList().get(0).getMemberExpireAt()); assertEquals(Boolean.TRUE, result.getList().get(0).getIsMember()); } @Test void pageShouldRejectInvalidMemberStatus() { IllegalArgumentException error = assertThrows( IllegalArgumentException.class, () -> userAppService.page( 1, 10, null, null, null, null, null, "INVALID", null, null, null, null ) ); assertEquals("会员状态筛选不合法", error.getMessage()); } }