@@ -2,12 +2,19 @@ import { Test, TestingModule } from '@nestjs/testing';
22import { UsersController } from './users.controller.js' ;
33import { UsersService } from './users.service.js' ;
44import { JwtAuthGuard } from '../auth/guards/jwt-auth.guard.js' ;
5+ import { RolesGuard } from '../auth/guards/roles.guard.js' ;
56import { ThrottlerGuard } from '@nestjs/throttler' ;
7+ import { UserStatus } from './enums/user-status.enum.js' ;
8+ import { AuthRole } from '../common/enums/auth-role.enum.js' ;
69
710describe ( 'UsersController' , ( ) => {
811 let controller : UsersController ;
912
1013 const mockUsersService = {
14+ findById : jest . fn ( ) ,
15+ updateUser : jest . fn ( ) ,
16+ deactivateUser : jest . fn ( ) ,
17+ findAll : jest . fn ( ) ,
1118 createMentorProfile : jest . fn ( ) ,
1219 createMenteeProfile : jest . fn ( ) ,
1320 updateMentorProfile : jest . fn ( ) ,
@@ -34,6 +41,8 @@ describe('UsersController', () => {
3441 } )
3542 . overrideGuard ( JwtAuthGuard )
3643 . useValue ( { canActivate : ( ) => true } )
44+ . overrideGuard ( RolesGuard )
45+ . useValue ( { canActivate : ( ) => true } )
3746 . overrideGuard ( ThrottlerGuard )
3847 . useValue ( { canActivate : ( ) => true } )
3948 . compile ( ) ;
@@ -45,6 +54,87 @@ describe('UsersController', () => {
4554 jest . clearAllMocks ( ) ;
4655 } ) ;
4756
57+ const mockUserEntity = {
58+ id : 'user-1' ,
59+ walletAddress : 'test-wallet' ,
60+ username : 'skillsync-user' ,
61+ displayName : 'Skillsync User' ,
62+ email : 'user@example.com' ,
63+ status : UserStatus . ACTIVE ,
64+ roles : [ { name : AuthRole . MENTOR } ] ,
65+ tokenVersion : 0 ,
66+ createdAt : new Date ( '2024-01-01' ) ,
67+ updatedAt : new Date ( '2024-01-02' ) ,
68+ } ;
69+
70+ describe ( 'getMe' , ( ) => {
71+ it ( 'should return the requesting user' , async ( ) => {
72+ mockUsersService . findById . mockResolvedValue ( mockUserEntity ) ;
73+
74+ const result = await controller . getMe ( mockRequest ( 'user-1' ) as any ) ;
75+
76+ expect ( mockUsersService . findById ) . toHaveBeenCalledWith ( 'user-1' ) ;
77+ expect ( result ) . toMatchObject ( {
78+ id : 'user-1' ,
79+ walletAddress : 'test-wallet' ,
80+ email : 'user@example.com' ,
81+ roles : [ AuthRole . MENTOR ] ,
82+ } ) ;
83+ } ) ;
84+ } ) ;
85+
86+ describe ( 'updateMe' , ( ) => {
87+ it ( 'should update and return the requesting user' , async ( ) => {
88+ const dto = { displayName : 'New Name' } ;
89+ mockUsersService . updateUser . mockResolvedValue ( {
90+ ...mockUserEntity ,
91+ displayName : 'New Name' ,
92+ } ) ;
93+
94+ const result = await controller . updateMe (
95+ dto ,
96+ mockRequest ( 'user-1' ) as any ,
97+ ) ;
98+
99+ expect ( mockUsersService . updateUser ) . toHaveBeenCalledWith ( 'user-1' , dto ) ;
100+ expect ( result . displayName ) . toBe ( 'New Name' ) ;
101+ } ) ;
102+ } ) ;
103+
104+ describe ( 'deleteMe' , ( ) => {
105+ it ( 'should deactivate the requesting user' , async ( ) => {
106+ mockUsersService . deactivateUser . mockResolvedValue ( {
107+ ...mockUserEntity ,
108+ status : UserStatus . DELETED ,
109+ } ) ;
110+
111+ const result = await controller . deleteMe ( mockRequest ( 'user-1' ) as any ) ;
112+
113+ expect ( mockUsersService . deactivateUser ) . toHaveBeenCalledWith ( 'user-1' ) ;
114+ expect ( result . status ) . toBe ( UserStatus . DELETED ) ;
115+ } ) ;
116+ } ) ;
117+
118+ describe ( 'listUsers' , ( ) => {
119+ it ( 'should return a paginated, mapped list of users' , async ( ) => {
120+ mockUsersService . findAll . mockResolvedValue ( {
121+ data : [ mockUserEntity ] ,
122+ total : 1 ,
123+ page : 1 ,
124+ limit : 20 ,
125+ } ) ;
126+
127+ const result = await controller . listUsers ( { page : 1 , limit : 20 } ) ;
128+
129+ expect ( mockUsersService . findAll ) . toHaveBeenCalledWith ( {
130+ page : 1 ,
131+ limit : 20 ,
132+ } ) ;
133+ expect ( result . total ) . toBe ( 1 ) ;
134+ expect ( result . data [ 0 ] ) . toMatchObject ( { id : 'user-1' } ) ;
135+ } ) ;
136+ } ) ;
137+
48138 describe ( 'createProfile' , ( ) => {
49139 it ( 'should create a mentor profile' , async ( ) => {
50140 const dto = {
0 commit comments