Skip to content

Commit be6fc42

Browse files
committed
feat: enhance getSelfUserData to update lastSeen and manage login streak logic
1 parent d36ed4e commit be6fc42

File tree

1 file changed

+43
-1
lines changed

1 file changed

+43
-1
lines changed

server/src/user/user.service.spec.ts

Lines changed: 43 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -198,7 +198,7 @@ describe('UserService', () => {
198198
describe('getSelfUserData', () => {
199199
it('should return self user data', async () => {
200200
const user = { _id: 'test-id' } as UserDocument;
201-
const userData = { ...user } as UserDocument;
201+
const userData = { ...user, lastSeen: new Date() } as UserDocument;
202202

203203
jest.spyOn(service, 'findByID').mockResolvedValue(userData);
204204

@@ -217,6 +217,48 @@ describe('UserService', () => {
217217
new HttpException('user not found', HttpStatus.NOT_FOUND),
218218
);
219219
});
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+
});
220262
});
221263

222264
describe('usernameExists', () => {

0 commit comments

Comments
 (0)