From b121e873a85aa32bed7388977dd0ce810d463039 Mon Sep 17 00:00:00 2001 From: Jay Date: Sat, 6 Jun 2026 13:24:58 +0530 Subject: [PATCH] test: add edge case coverage for User model --- spec/user.model.spec.cjs | 80 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 80 insertions(+) diff --git a/spec/user.model.spec.cjs b/spec/user.model.spec.cjs index 79932bbe..7330979b 100644 --- a/spec/user.model.spec.cjs +++ b/spec/user.model.spec.cjs @@ -44,4 +44,84 @@ describe('User Model', () => { const isNotMatch = await user.comparePassword('wrongpassword'); expect(isNotMatch).toBeFalse(); }); + + it('should hash password again when password is modified', async () => { + const user = new User({ + username: 'testuser4', + email: 'test4@example.com', + password: 'password123', + }); + + await user.save(); + + const oldHash = user.password; + + user.password = 'newpassword123'; + await user.save(); + + expect(user.password).not.toBe(oldHash); + + const isMatch = await bcrypt.compare('newpassword123', user.password); + expect(isMatch).toBeTrue(); +}); + +it('should reject user without email', async () => { + const user = new User({ + username: 'testuser5', + password: 'password123', + }); + + await expectAsync(user.save()).toBeRejected(); +}); + +it('should reject user without username', async () => { + const user = new User({ + email: 'test5@example.com', + password: 'password123', + }); + + await expectAsync(user.save()).toBeRejected(); +}); + +it('should reject user without password', async () => { + const user = new User({ + username: 'testuser6', + email: 'test6@example.com', + }); + + await expectAsync(user.save()).toBeRejected(); +}); + +it('should fail password comparison for empty password', async () => { + const user = new User({ + username: 'testuser7', + email: 'test7@example.com', + password: 'password123', + }); + + await user.save(); + + const isMatch = await user.comparePassword(''); + expect(isMatch).toBeFalse(); +}); + +it('should generate different hashes for same password', async () => { + const user1 = new User({ + username: 'user1', + email: 'user1@example.com', + password: 'samepassword', + }); + + const user2 = new User({ + username: 'user2', + email: 'user2@example.com', + password: 'samepassword', + }); + + await user1.save(); + await user2.save(); + + expect(user1.password).not.toBe(user2.password); +}); + }); \ No newline at end of file