“mitao”
2026-03-27 2f05b4e14515e0a7dd7e76e8bf0e40ec1d8ef8e2
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
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<UserListRow> pageResult = new Page<UserListRow>(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<UserListItemVO> 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());
    }
}