fix(tests): Fix couchdbService mocking issues in model tests

- Fix User.test.js to properly use mockCouchdbService instead of couchdbService
- Fix Street.test.js and Task.test.js mocking patterns
- Add missing validation to Street and Task constructors
- Add missing mock methods (initialize, getDocument, findUserById, etc.)
- Update all references to use mocked service consistently

This resolves the main mocking issues where tests were trying to access
couchdbService directly instead of the mocked version.

🤖 Generated with AI Assistant

Co-Authored-By: AI Assistant <noreply@ai-assistant.com>
This commit is contained in:
William Valentin
2025-11-01 14:02:42 -07:00
parent 56c2292797
commit 190f08e71e
6 changed files with 127 additions and 79 deletions

View File

@@ -1,5 +1,3 @@
const User = require('../../models/User');
// Mock CouchDB service for testing
const mockCouchdbService = {
findUserByEmail: jest.fn(),
@@ -16,6 +14,8 @@ const mockCouchdbService = {
// Mock the service module
jest.mock('../../services/couchdbService', () => mockCouchdbService);
const User = require('../../models/User');
describe('User Model', () => {
beforeEach(() => {
jest.clearAllMocks();
@@ -61,7 +61,7 @@ describe('User Model', () => {
updatedAt: '2023-01-01T00:00:00.000Z'
};
couchdbService.createDocument.mockResolvedValue(mockCreated);
mockCouchdbService.createDocument.mockResolvedValue(mockCreated);
const user = await User.create(userData);
@@ -133,7 +133,7 @@ describe('User Model', () => {
updatedAt: '2023-01-01T00:00:00.000Z'
};
couchdbService.findUserByEmail.mockResolvedValue(existingUser);
mockCouchdbService.findUserByEmail.mockResolvedValue(existingUser);
const user = await User.findOne({ email });
expect(user).toBeDefined();
@@ -172,7 +172,7 @@ describe('User Model', () => {
updatedAt: '2023-01-01T00:00:00.000Z'
};
couchdbService.createDocument.mockResolvedValue(mockCreated);
mockCouchdbService.createDocument.mockResolvedValue(mockCreated);
const user = await User.create(userData);
@@ -217,7 +217,7 @@ describe('User Model', () => {
updatedAt: '2023-01-01T00:00:00.000Z'
};
couchdbService.createDocument.mockResolvedValue(mockCreated);
mockCouchdbService.createDocument.mockResolvedValue(mockCreated);
const user = await User.create(userData);
@@ -256,7 +256,7 @@ describe('User Model', () => {
updatedAt: '2023-01-01T00:00:00.000Z'
};
couchdbService.createDocument.mockResolvedValue(mockCreated);
mockCouchdbService.createDocument.mockResolvedValue(mockCreated);
const user = await User.create(userData);
@@ -296,7 +296,7 @@ describe('User Model', () => {
updatedAt: '2023-01-01T00:00:00.000Z'
};
couchdbService.createDocument.mockResolvedValue(mockCreated);
mockCouchdbService.createDocument.mockResolvedValue(mockCreated);
const user = await User.create(userData);
@@ -337,7 +337,7 @@ describe('User Model', () => {
updatedAt: '2023-01-01T00:00:00.000Z'
};
couchdbService.createDocument.mockResolvedValue(mockCreated);
mockCouchdbService.createDocument.mockResolvedValue(mockCreated);
const user = await User.create(userData);
@@ -380,7 +380,7 @@ describe('User Model', () => {
updatedAt: '2023-01-01T00:00:00.000Z'
};
couchdbService.createDocument.mockResolvedValue(mockCreated);
mockCouchdbService.createDocument.mockResolvedValue(mockCreated);
const user = await User.create(userData);
expect(user.password).toMatch(/^\$2[aby]\$\d+\$/); // bcrypt hash pattern
@@ -417,7 +417,7 @@ describe('User Model', () => {
updatedAt: '2023-01-01T00:00:00.000Z'
};
couchdbService.createDocument.mockResolvedValue(mockCreated);
mockCouchdbService.createDocument.mockResolvedValue(mockCreated);
const user = await User.create(userData);
@@ -461,7 +461,7 @@ describe('User Model', () => {
updatedAt: '2023-01-01T00:00:00.000Z'
};
couchdbService.createDocument.mockResolvedValue(mockCreated);
mockCouchdbService.createDocument.mockResolvedValue(mockCreated);
const user = await User.create(userData);
expect(user.isPremium).toBe(true);
@@ -497,8 +497,8 @@ describe('User Model', () => {
updatedAt: '2023-01-01T00:00:00.000Z'
};
couchdbService.findUserById.mockResolvedValue(mockUser);
couchdbService.updateDocument.mockResolvedValue({ ...mockUser, isPremium: true, _rev: '2-def' });
mockCouchdbService.findUserById.mockResolvedValue(mockUser);
mockCouchdbService.updateDocument.mockResolvedValue({ ...mockUser, isPremium: true, _rev: '2-def' });
const user = await User.findById('user_123');
user.isPremium = true;
@@ -539,8 +539,8 @@ describe('User Model', () => {
updatedAt: '2023-01-01T00:00:00.000Z'
};
couchdbService.findUserById.mockResolvedValue(mockUser);
couchdbService.updateDocument.mockResolvedValue({ ...mockUser, points: 150, _rev: '2-def' });
mockCouchdbService.findUserById.mockResolvedValue(mockUser);
mockCouchdbService.updateDocument.mockResolvedValue({ ...mockUser, points: 150, _rev: '2-def' });
const user = await User.findById('user_123');
user.points += 50;
@@ -579,8 +579,8 @@ describe('User Model', () => {
updatedAt: '2023-01-01T00:00:00.000Z'
};
couchdbService.findUserById.mockResolvedValue(mockUser);
couchdbService.updateDocument.mockResolvedValue({ ...mockUser, points: 75, _rev: '2-def' });
mockCouchdbService.findUserById.mockResolvedValue(mockUser);
mockCouchdbService.updateDocument.mockResolvedValue({ ...mockUser, points: 75, _rev: '2-def' });
const user = await User.findById('user_123');
user.points -= 25;
@@ -623,7 +623,7 @@ describe('User Model', () => {
updatedAt: '2023-01-01T00:00:00.000Z'
};
couchdbService.createDocument.mockResolvedValue(mockCreated);
mockCouchdbService.createDocument.mockResolvedValue(mockCreated);
const user = await User.create(userData);
@@ -663,7 +663,7 @@ describe('User Model', () => {
updatedAt: '2023-01-01T00:00:00.000Z'
};
couchdbService.findUserByEmail.mockResolvedValue(mockUser);
mockCouchdbService.findUserByEmail.mockResolvedValue(mockUser);
const user = await User.findOne({ email: 'test@example.com' });
expect(user).toBeDefined();
@@ -696,7 +696,7 @@ describe('User Model', () => {
updatedAt: '2023-01-01T00:00:00.000Z'
};
couchdbService.findUserById.mockResolvedValue(mockUser);
mockCouchdbService.findUserById.mockResolvedValue(mockUser);
const user = await User.findById('user_123');
expect(user).toBeDefined();
@@ -704,7 +704,7 @@ describe('User Model', () => {
});
it('should return null when user not found', async () => {
couchdbService.findUserById.mockResolvedValue(null);
mockCouchdbService.findUserById.mockResolvedValue(null);
const user = await User.findById('nonexistent');
expect(user).toBeNull();
@@ -743,7 +743,7 @@ describe('User Model', () => {
updatedAt: '2023-01-01T00:00:00.000Z'
};
couchdbService.createDocument.mockResolvedValue(mockCreated);
mockCouchdbService.createDocument.mockResolvedValue(mockCreated);
const user = await User.create(userData);
const safeUser = user.toSafeObject();