@@ -198,7 +198,7 @@ describe('UserService', () => {
198
198
describe ( 'getSelfUserData' , ( ) => {
199
199
it ( 'should return self user data' , async ( ) => {
200
200
const user = { _id : 'test-id' } as UserDocument ;
201
- const userData = { ...user } as UserDocument ;
201
+ const userData = { ...user , lastSeen : new Date ( ) } as UserDocument ;
202
202
203
203
jest . spyOn ( service , 'findByID' ) . mockResolvedValue ( userData ) ;
204
204
@@ -217,6 +217,48 @@ describe('UserService', () => {
217
217
new HttpException ( 'user not found' , HttpStatus . NOT_FOUND ) ,
218
218
) ;
219
219
} ) ;
220
+
221
+ it ( 'should update lastSeen and increment loginStreak if lastSeen is before today' , async ( ) => {
222
+ const user = { _id : 'test-id' } as UserDocument ;
223
+ const yesterday = new Date ( ) ;
224
+ yesterday . setDate ( yesterday . getDate ( ) - 1 ) ;
225
+
226
+ const userData = {
227
+ ...user ,
228
+ lastSeen : yesterday ,
229
+ loginStreak : 1 ,
230
+ save : jest . fn ( ) . mockResolvedValue ( true ) ,
231
+ } as unknown as UserDocument ;
232
+
233
+ jest . spyOn ( service , 'findByID' ) . mockResolvedValue ( userData ) ;
234
+
235
+ const result = await service . getSelfUserData ( user ) ;
236
+
237
+ expect ( result . lastSeen ) . toBeInstanceOf ( Date ) ;
238
+ expect ( result . loginStreak ) . toBe ( 2 ) ;
239
+ expect ( userData . save ) . toHaveBeenCalled ( ) ;
240
+ } ) ;
241
+
242
+ it ( 'should not update lastSeen or increment loginStreak if lastSeen is today' , async ( ) => {
243
+ const user = { _id : 'test-id' } as UserDocument ;
244
+ const today = new Date ( ) ;
245
+ today . setHours ( 0 , 0 , 0 , 0 ) ;
246
+
247
+ const userData = {
248
+ ...user ,
249
+ lastSeen : today ,
250
+ loginStreak : 1 ,
251
+ save : jest . fn ( ) . mockResolvedValue ( true ) ,
252
+ } as unknown as UserDocument ;
253
+
254
+ jest . spyOn ( service , 'findByID' ) . mockResolvedValue ( userData ) ;
255
+
256
+ const result = await service . getSelfUserData ( user ) ;
257
+
258
+ expect ( result . lastSeen ) . toEqual ( today ) ;
259
+ expect ( result . loginStreak ) . toBe ( 1 ) ;
260
+ expect ( userData . save ) . not . toHaveBeenCalled ( ) ;
261
+ } ) ;
220
262
} ) ;
221
263
222
264
describe ( 'usernameExists' , ( ) => {
0 commit comments