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:
@@ -1,22 +1,26 @@
|
|||||||
// Mock CouchDB service for testing
|
// Mock CouchDB service for testing
|
||||||
jest.mock('../../services/couchdbService', () => ({
|
const mockCouchdbService = {
|
||||||
createDocument: jest.fn(),
|
createDocument: jest.fn(),
|
||||||
findDocumentById: jest.fn(),
|
findDocumentById: jest.fn(),
|
||||||
updateDocument: jest.fn(),
|
updateDocument: jest.fn(),
|
||||||
findByType: jest.fn(),
|
findByType: jest.fn(),
|
||||||
}));
|
initialize: jest.fn(),
|
||||||
|
getDocument: jest.fn(),
|
||||||
|
};
|
||||||
|
|
||||||
|
// Mock the service module
|
||||||
|
jest.mock('../../services/couchdbService', () => mockCouchdbService);
|
||||||
|
|
||||||
const Badge = require('../../models/Badge');
|
const Badge = require('../../models/Badge');
|
||||||
const couchdbService = require('../../services/couchdbService');
|
|
||||||
|
|
||||||
describe('Badge Model', () => {
|
describe('Badge Model', () => {
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
jest.clearAllMocks();
|
jest.clearAllMocks();
|
||||||
// Reset all mocks to ensure clean state
|
// Reset all mocks to ensure clean state
|
||||||
couchdbService.createDocument.mockReset();
|
mockCouchdbService.createDocument.mockReset();
|
||||||
couchdbService.findDocumentById.mockReset();
|
mockCouchdbService.findDocumentById.mockReset();
|
||||||
couchdbService.updateDocument.mockReset();
|
mockCouchdbService.updateDocument.mockReset();
|
||||||
couchdbService.findByType.mockReset();
|
mockCouchdbService.findByType.mockReset();
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('Schema Validation', () => {
|
describe('Schema Validation', () => {
|
||||||
@@ -44,7 +48,7 @@ describe('Badge Model', () => {
|
|||||||
updatedAt: '2023-01-01T00:00:00.000Z'
|
updatedAt: '2023-01-01T00:00:00.000Z'
|
||||||
};
|
};
|
||||||
|
|
||||||
couchdbService.createDocument.mockResolvedValue(mockCreated);
|
mockCouchdbService.createDocument.mockResolvedValue(mockCreated);
|
||||||
|
|
||||||
const badge = await Badge.create(badgeData);
|
const badge = await Badge.create(badgeData);
|
||||||
|
|
||||||
@@ -137,7 +141,7 @@ describe('Badge Model', () => {
|
|||||||
updatedAt: '2023-01-01T00:00:00.000Z'
|
updatedAt: '2023-01-01T00:00:00.000Z'
|
||||||
};
|
};
|
||||||
|
|
||||||
couchdbService.createDocument.mockResolvedValue(mockCreated);
|
mockCouchdbService.createDocument.mockResolvedValue(mockCreated);
|
||||||
|
|
||||||
const badge = await Badge.create(badgeData);
|
const badge = await Badge.create(badgeData);
|
||||||
|
|
||||||
@@ -191,7 +195,7 @@ describe('Badge Model', () => {
|
|||||||
updatedAt: '2023-01-01T00:00:00.000Z'
|
updatedAt: '2023-01-01T00:00:00.000Z'
|
||||||
};
|
};
|
||||||
|
|
||||||
couchdbService.createDocument.mockResolvedValue(mockCreated);
|
mockCouchdbService.createDocument.mockResolvedValue(mockCreated);
|
||||||
|
|
||||||
const badge = await Badge.create(badgeData);
|
const badge = await Badge.create(badgeData);
|
||||||
|
|
||||||
@@ -225,7 +229,7 @@ describe('Badge Model', () => {
|
|||||||
updatedAt: '2023-01-01T00:00:00.000Z'
|
updatedAt: '2023-01-01T00:00:00.000Z'
|
||||||
};
|
};
|
||||||
|
|
||||||
couchdbService.createDocument.mockResolvedValue(mockCreated);
|
mockCouchdbService.createDocument.mockResolvedValue(mockCreated);
|
||||||
|
|
||||||
const badge = await Badge.create(badgeData);
|
const badge = await Badge.create(badgeData);
|
||||||
|
|
||||||
@@ -255,7 +259,7 @@ describe('Badge Model', () => {
|
|||||||
updatedAt: '2023-01-01T00:00:00.000Z'
|
updatedAt: '2023-01-01T00:00:00.000Z'
|
||||||
};
|
};
|
||||||
|
|
||||||
couchdbService.createDocument.mockResolvedValue(mockCreated);
|
mockCouchdbService.createDocument.mockResolvedValue(mockCreated);
|
||||||
|
|
||||||
const badge = await Badge.create(badgeData);
|
const badge = await Badge.create(badgeData);
|
||||||
|
|
||||||
@@ -287,7 +291,7 @@ describe('Badge Model', () => {
|
|||||||
updatedAt: '2023-01-01T00:00:00.000Z'
|
updatedAt: '2023-01-01T00:00:00.000Z'
|
||||||
};
|
};
|
||||||
|
|
||||||
couchdbService.createDocument.mockResolvedValue(mockCreated);
|
mockCouchdbService.createDocument.mockResolvedValue(mockCreated);
|
||||||
|
|
||||||
const badge = await Badge.create(badgeData);
|
const badge = await Badge.create(badgeData);
|
||||||
|
|
||||||
@@ -317,7 +321,7 @@ describe('Badge Model', () => {
|
|||||||
updatedAt: '2023-01-01T00:00:00.000Z'
|
updatedAt: '2023-01-01T00:00:00.000Z'
|
||||||
};
|
};
|
||||||
|
|
||||||
couchdbService.createDocument.mockResolvedValue(mockCreated);
|
mockCouchdbService.createDocument.mockResolvedValue(mockCreated);
|
||||||
|
|
||||||
const badge = await Badge.create(badgeData);
|
const badge = await Badge.create(badgeData);
|
||||||
|
|
||||||
@@ -352,7 +356,7 @@ describe('Badge Model', () => {
|
|||||||
updatedAt: '2023-01-01T00:00:00.000Z'
|
updatedAt: '2023-01-01T00:00:00.000Z'
|
||||||
};
|
};
|
||||||
|
|
||||||
couchdbService.createDocument.mockResolvedValue(mockCreated);
|
mockCouchdbService.createDocument.mockResolvedValue(mockCreated);
|
||||||
|
|
||||||
const badge = await Badge.create(badgeData);
|
const badge = await Badge.create(badgeData);
|
||||||
|
|
||||||
@@ -386,7 +390,7 @@ describe('Badge Model', () => {
|
|||||||
updatedAt: '2023-01-01T00:00:00.000Z'
|
updatedAt: '2023-01-01T00:00:00.000Z'
|
||||||
};
|
};
|
||||||
|
|
||||||
couchdbService.createDocument.mockResolvedValue(mockCreated);
|
mockCouchdbService.createDocument.mockResolvedValue(mockCreated);
|
||||||
|
|
||||||
const badge = await Badge.create(badgeData);
|
const badge = await Badge.create(badgeData);
|
||||||
|
|
||||||
|
|||||||
@@ -1,27 +1,31 @@
|
|||||||
// Mock CouchDB service for testing
|
// Mock CouchDB service for testing
|
||||||
jest.mock('../../services/couchdbService', () => ({
|
const mockCouchdbService = {
|
||||||
createDocument: jest.fn(),
|
createDocument: jest.fn(),
|
||||||
findDocumentById: jest.fn(),
|
findDocumentById: jest.fn(),
|
||||||
updateDocument: jest.fn(),
|
updateDocument: jest.fn(),
|
||||||
findByType: jest.fn(),
|
findByType: jest.fn(),
|
||||||
initialize: jest.fn(),
|
initialize: jest.fn(),
|
||||||
find: jest.fn(),
|
find: jest.fn(),
|
||||||
}));
|
findStreetsByLocation: jest.fn(),
|
||||||
|
};
|
||||||
|
|
||||||
|
// Mock the service module
|
||||||
|
jest.mock('../../services/couchdbService', () => mockCouchdbService);
|
||||||
|
|
||||||
const Street = require('../../models/Street');
|
const Street = require('../../models/Street');
|
||||||
const User = require('../../models/User');
|
const User = require('../../models/User');
|
||||||
const couchdbService = require('../../services/couchdbService');
|
|
||||||
|
|
||||||
describe('Street Model', () => {
|
describe('Street Model', () => {
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
jest.clearAllMocks();
|
jest.clearAllMocks();
|
||||||
// Reset all mocks to ensure clean state
|
// Reset all mocks to ensure clean state
|
||||||
couchdbService.createDocument.mockReset();
|
mockCouchdbService.createDocument.mockReset();
|
||||||
couchdbService.findDocumentById.mockReset();
|
mockCouchdbService.findDocumentById.mockReset();
|
||||||
couchdbService.updateDocument.mockReset();
|
mockCouchdbService.updateDocument.mockReset();
|
||||||
couchdbService.findByType.mockReset();
|
mockCouchdbService.findByType.mockReset();
|
||||||
couchdbService.initialize.mockReset();
|
mockCouchdbService.initialize.mockReset();
|
||||||
couchdbService.find.mockReset();
|
mockCouchdbService.find.mockReset();
|
||||||
|
mockCouchdbService.findStreetsByLocation.mockReset();
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('Schema Validation', () => {
|
describe('Schema Validation', () => {
|
||||||
@@ -47,8 +51,8 @@ describe('Street Model', () => {
|
|||||||
updatedAt: '2023-01-01T00:00:00.000Z'
|
updatedAt: '2023-01-01T00:00:00.000Z'
|
||||||
};
|
};
|
||||||
|
|
||||||
couchdbService.initialize.mockResolvedValue(true);
|
mockCouchdbService.initialize.mockResolvedValue(true);
|
||||||
couchdbService.createDocument.mockResolvedValue(mockCreated);
|
mockCouchdbService.createDocument.mockResolvedValue(mockCreated);
|
||||||
|
|
||||||
const street = await Street.create(streetData);
|
const street = await Street.create(streetData);
|
||||||
|
|
||||||
@@ -104,7 +108,7 @@ describe('Street Model', () => {
|
|||||||
updatedAt: '2023-01-01T00:00:00.000Z'
|
updatedAt: '2023-01-01T00:00:00.000Z'
|
||||||
};
|
};
|
||||||
|
|
||||||
couchdbService.createDocument.mockResolvedValue(mockCreated);
|
mockCouchdbService.createDocument.mockResolvedValue(mockCreated);
|
||||||
|
|
||||||
const street = await Street.create(streetData);
|
const street = await Street.create(streetData);
|
||||||
|
|
||||||
@@ -137,7 +141,7 @@ describe('Street Model', () => {
|
|||||||
updatedAt: '2023-01-01T00:00:00.000Z'
|
updatedAt: '2023-01-01T00:00:00.000Z'
|
||||||
};
|
};
|
||||||
|
|
||||||
couchdbService.createDocument.mockResolvedValue(mockCreated);
|
mockCouchdbService.createDocument.mockResolvedValue(mockCreated);
|
||||||
|
|
||||||
const street = await Street.create(streetData);
|
const street = await Street.create(streetData);
|
||||||
|
|
||||||
@@ -169,8 +173,9 @@ describe('Street Model', () => {
|
|||||||
updatedAt: '2023-01-01T00:00:00.000Z'
|
updatedAt: '2023-01-01T00:00:00.000Z'
|
||||||
};
|
};
|
||||||
|
|
||||||
couchdbService.createDocument.mockResolvedValue(mockCreated);
|
mockCouchdbService.createDocument.mockResolvedValue(mockCreated);
|
||||||
couchdbService.findByType.mockResolvedValue([mockCreated]);
|
mockCouchdbService.findByType.mockResolvedValue([mockCreated]);
|
||||||
|
mockCouchdbService.findStreetsByLocation.mockResolvedValue([mockCreated]);
|
||||||
|
|
||||||
// Test findNearby method
|
// Test findNearby method
|
||||||
const nearbyStreets = await Street.findNearby([-73.935242, 40.730610], 1000);
|
const nearbyStreets = await Street.findNearby([-73.935242, 40.730610], 1000);
|
||||||
@@ -202,7 +207,7 @@ describe('Street Model', () => {
|
|||||||
updatedAt: '2023-01-01T00:00:00.000Z'
|
updatedAt: '2023-01-01T00:00:00.000Z'
|
||||||
};
|
};
|
||||||
|
|
||||||
couchdbService.createDocument.mockResolvedValue(mockCreated);
|
mockCouchdbService.createDocument.mockResolvedValue(mockCreated);
|
||||||
|
|
||||||
const street = await Street.create(streetData);
|
const street = await Street.create(streetData);
|
||||||
|
|
||||||
@@ -231,7 +236,7 @@ describe('Street Model', () => {
|
|||||||
updatedAt: '2023-01-01T00:00:00.000Z'
|
updatedAt: '2023-01-01T00:00:00.000Z'
|
||||||
};
|
};
|
||||||
|
|
||||||
couchdbService.createDocument.mockResolvedValue(mockCreated);
|
mockCouchdbService.createDocument.mockResolvedValue(mockCreated);
|
||||||
|
|
||||||
const street = await Street.create(streetData);
|
const street = await Street.create(streetData);
|
||||||
|
|
||||||
@@ -262,7 +267,7 @@ describe('Street Model', () => {
|
|||||||
updatedAt: '2023-01-01T00:00:00.000Z'
|
updatedAt: '2023-01-01T00:00:00.000Z'
|
||||||
};
|
};
|
||||||
|
|
||||||
couchdbService.createDocument.mockResolvedValue(mockCreated);
|
mockCouchdbService.createDocument.mockResolvedValue(mockCreated);
|
||||||
|
|
||||||
const street = await Street.create(streetData);
|
const street = await Street.create(streetData);
|
||||||
|
|
||||||
@@ -300,7 +305,7 @@ describe('Street Model', () => {
|
|||||||
updatedAt: '2023-01-01T00:00:00.000Z'
|
updatedAt: '2023-01-01T00:00:00.000Z'
|
||||||
};
|
};
|
||||||
|
|
||||||
couchdbService.createDocument.mockResolvedValue(mockCreated);
|
mockCouchdbService.createDocument.mockResolvedValue(mockCreated);
|
||||||
|
|
||||||
const street = await Street.create(streetData);
|
const street = await Street.create(streetData);
|
||||||
|
|
||||||
@@ -340,7 +345,7 @@ describe('Street Model', () => {
|
|||||||
updatedAt: '2023-01-01T00:00:00.000Z'
|
updatedAt: '2023-01-01T00:00:00.000Z'
|
||||||
};
|
};
|
||||||
|
|
||||||
couchdbService.createDocument.mockResolvedValue(mockCreated);
|
mockCouchdbService.createDocument.mockResolvedValue(mockCreated);
|
||||||
|
|
||||||
const street = await Street.create(streetData);
|
const street = await Street.create(streetData);
|
||||||
|
|
||||||
|
|||||||
@@ -1,24 +1,32 @@
|
|||||||
// Mock CouchDB service for testing
|
// Mock CouchDB service for testing
|
||||||
jest.mock('../../services/couchdbService', () => ({
|
const mockCouchdbService = {
|
||||||
createDocument: jest.fn(),
|
createDocument: jest.fn(),
|
||||||
findDocumentById: jest.fn(),
|
findDocumentById: jest.fn(),
|
||||||
updateDocument: jest.fn(),
|
updateDocument: jest.fn(),
|
||||||
findByType: jest.fn(),
|
findByType: jest.fn(),
|
||||||
}));
|
initialize: jest.fn(),
|
||||||
|
getDocument: jest.fn(),
|
||||||
|
findUserById: jest.fn(),
|
||||||
|
};
|
||||||
|
|
||||||
|
// Mock the service module
|
||||||
|
jest.mock('../../services/couchdbService', () => mockCouchdbService);
|
||||||
|
|
||||||
const Task = require('../../models/Task');
|
const Task = require('../../models/Task');
|
||||||
const User = require('../../models/User');
|
const User = require('../../models/User');
|
||||||
const Street = require('../../models/Street');
|
const Street = require('../../models/Street');
|
||||||
const couchdbService = require('../../services/couchdbService');
|
|
||||||
|
|
||||||
describe('Task Model', () => {
|
describe('Task Model', () => {
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
jest.clearAllMocks();
|
jest.clearAllMocks();
|
||||||
// Reset all mocks to ensure clean state
|
// Reset all mocks to ensure clean state
|
||||||
couchdbService.createDocument.mockReset();
|
mockCouchdbService.createDocument.mockReset();
|
||||||
couchdbService.findDocumentById.mockReset();
|
mockCouchdbService.findDocumentById.mockReset();
|
||||||
couchdbService.updateDocument.mockReset();
|
mockCouchdbService.updateDocument.mockReset();
|
||||||
couchdbService.findByType.mockReset();
|
mockCouchdbService.findByType.mockReset();
|
||||||
|
mockCouchdbService.initialize.mockReset();
|
||||||
|
mockCouchdbService.getDocument.mockReset();
|
||||||
|
mockCouchdbService.findUserById.mockReset();
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('Schema Validation', () => {
|
describe('Schema Validation', () => {
|
||||||
@@ -48,7 +56,8 @@ describe('Task Model', () => {
|
|||||||
updatedAt: '2023-01-01T00:00:00.000Z'
|
updatedAt: '2023-01-01T00:00:00.000Z'
|
||||||
};
|
};
|
||||||
|
|
||||||
couchdbService.createDocument.mockResolvedValue(mockCreated);
|
mockCouchdbService.initialize.mockResolvedValue(true);
|
||||||
|
mockCouchdbService.createDocument.mockResolvedValue(mockCreated);
|
||||||
|
|
||||||
const task = await Task.create(taskData);
|
const task = await Task.create(taskData);
|
||||||
|
|
||||||
@@ -112,7 +121,8 @@ describe('Task Model', () => {
|
|||||||
updatedAt: '2023-01-01T00:00:00.000Z'
|
updatedAt: '2023-01-01T00:00:00.000Z'
|
||||||
};
|
};
|
||||||
|
|
||||||
couchdbService.createDocument.mockResolvedValue(mockCreated);
|
mockCouchdbService.initialize.mockResolvedValue(true);
|
||||||
|
mockCouchdbService.createDocument.mockResolvedValue(mockCreated);
|
||||||
|
|
||||||
const task = await Task.create(taskData);
|
const task = await Task.create(taskData);
|
||||||
|
|
||||||
@@ -148,7 +158,8 @@ describe('Task Model', () => {
|
|||||||
updatedAt: '2023-01-01T00:00:00.000Z'
|
updatedAt: '2023-01-01T00:00:00.000Z'
|
||||||
};
|
};
|
||||||
|
|
||||||
couchdbService.createDocument.mockResolvedValue(mockCreated);
|
mockCouchdbService.initialize.mockResolvedValue(true);
|
||||||
|
mockCouchdbService.createDocument.mockResolvedValue(mockCreated);
|
||||||
|
|
||||||
const task = await Task.create(taskData);
|
const task = await Task.create(taskData);
|
||||||
|
|
||||||
@@ -184,8 +195,14 @@ describe('Task Model', () => {
|
|||||||
updatedAt: '2023-01-01T00:00:00.000Z'
|
updatedAt: '2023-01-01T00:00:00.000Z'
|
||||||
};
|
};
|
||||||
|
|
||||||
couchdbService.findDocumentById.mockResolvedValue(mockTask);
|
mockCouchdbService.getDocument.mockResolvedValue(mockTask);
|
||||||
couchdbService.updateDocument.mockResolvedValue({
|
mockCouchdbService.findUserById.mockResolvedValue({
|
||||||
|
_id: 'user_123',
|
||||||
|
name: 'Test User',
|
||||||
|
email: 'test@example.com',
|
||||||
|
password: 'password123'
|
||||||
|
});
|
||||||
|
mockCouchdbService.updateDocument.mockResolvedValue({
|
||||||
...mockTask,
|
...mockTask,
|
||||||
status: 'completed',
|
status: 'completed',
|
||||||
completedBy: {
|
completedBy: {
|
||||||
@@ -240,7 +257,8 @@ describe('Task Model', () => {
|
|||||||
updatedAt: '2023-01-01T00:00:00.000Z'
|
updatedAt: '2023-01-01T00:00:00.000Z'
|
||||||
};
|
};
|
||||||
|
|
||||||
couchdbService.createDocument.mockResolvedValue(mockCreated);
|
mockCouchdbService.initialize.mockResolvedValue(true);
|
||||||
|
mockCouchdbService.createDocument.mockResolvedValue(mockCreated);
|
||||||
|
|
||||||
const task = await Task.create(taskData);
|
const task = await Task.create(taskData);
|
||||||
|
|
||||||
@@ -274,7 +292,8 @@ describe('Task Model', () => {
|
|||||||
updatedAt: '2023-01-01T00:00:00.000Z'
|
updatedAt: '2023-01-01T00:00:00.000Z'
|
||||||
};
|
};
|
||||||
|
|
||||||
couchdbService.createDocument.mockResolvedValue(mockCreated);
|
mockCouchdbService.initialize.mockResolvedValue(true);
|
||||||
|
mockCouchdbService.createDocument.mockResolvedValue(mockCreated);
|
||||||
|
|
||||||
const task = await Task.create(taskData);
|
const task = await Task.create(taskData);
|
||||||
|
|
||||||
@@ -309,7 +328,8 @@ describe('Task Model', () => {
|
|||||||
updatedAt: '2023-01-01T00:00:00.000Z'
|
updatedAt: '2023-01-01T00:00:00.000Z'
|
||||||
};
|
};
|
||||||
|
|
||||||
couchdbService.createDocument.mockResolvedValue(mockCreated);
|
mockCouchdbService.initialize.mockResolvedValue(true);
|
||||||
|
mockCouchdbService.createDocument.mockResolvedValue(mockCreated);
|
||||||
|
|
||||||
const task = await Task.create(taskData);
|
const task = await Task.create(taskData);
|
||||||
|
|
||||||
@@ -345,8 +365,8 @@ describe('Task Model', () => {
|
|||||||
updatedAt: '2023-01-01T00:00:00.000Z'
|
updatedAt: '2023-01-01T00:00:00.000Z'
|
||||||
};
|
};
|
||||||
|
|
||||||
couchdbService.findDocumentById.mockResolvedValue(mockTask);
|
mockCouchdbService.getDocument.mockResolvedValue(mockTask);
|
||||||
couchdbService.updateDocument.mockResolvedValue({
|
mockCouchdbService.updateDocument.mockResolvedValue({
|
||||||
...mockTask,
|
...mockTask,
|
||||||
status: 'completed',
|
status: 'completed',
|
||||||
_rev: '2-def',
|
_rev: '2-def',
|
||||||
@@ -390,7 +410,8 @@ describe('Task Model', () => {
|
|||||||
updatedAt: '2023-01-01T00:00:00.000Z'
|
updatedAt: '2023-01-01T00:00:00.000Z'
|
||||||
};
|
};
|
||||||
|
|
||||||
couchdbService.createDocument.mockResolvedValue(mockCreated);
|
mockCouchdbService.initialize.mockResolvedValue(true);
|
||||||
|
mockCouchdbService.createDocument.mockResolvedValue(mockCreated);
|
||||||
|
|
||||||
const task = await Task.create(taskData);
|
const task = await Task.create(taskData);
|
||||||
|
|
||||||
@@ -431,7 +452,8 @@ describe('Task Model', () => {
|
|||||||
updatedAt: '2023-01-01T00:00:00.000Z'
|
updatedAt: '2023-01-01T00:00:00.000Z'
|
||||||
};
|
};
|
||||||
|
|
||||||
couchdbService.createDocument.mockResolvedValue(mockCreated);
|
mockCouchdbService.initialize.mockResolvedValue(true);
|
||||||
|
mockCouchdbService.createDocument.mockResolvedValue(mockCreated);
|
||||||
|
|
||||||
const task = await Task.create(taskData);
|
const task = await Task.create(taskData);
|
||||||
|
|
||||||
@@ -469,7 +491,8 @@ describe('Task Model', () => {
|
|||||||
updatedAt: '2023-01-01T00:00:00.000Z'
|
updatedAt: '2023-01-01T00:00:00.000Z'
|
||||||
};
|
};
|
||||||
|
|
||||||
couchdbService.createDocument.mockResolvedValue(mockCreated);
|
mockCouchdbService.initialize.mockResolvedValue(true);
|
||||||
|
mockCouchdbService.createDocument.mockResolvedValue(mockCreated);
|
||||||
|
|
||||||
const task = await Task.create(taskData);
|
const task = await Task.create(taskData);
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,3 @@
|
|||||||
const User = require('../../models/User');
|
|
||||||
|
|
||||||
// Mock CouchDB service for testing
|
// Mock CouchDB service for testing
|
||||||
const mockCouchdbService = {
|
const mockCouchdbService = {
|
||||||
findUserByEmail: jest.fn(),
|
findUserByEmail: jest.fn(),
|
||||||
@@ -16,6 +14,8 @@ const mockCouchdbService = {
|
|||||||
// Mock the service module
|
// Mock the service module
|
||||||
jest.mock('../../services/couchdbService', () => mockCouchdbService);
|
jest.mock('../../services/couchdbService', () => mockCouchdbService);
|
||||||
|
|
||||||
|
const User = require('../../models/User');
|
||||||
|
|
||||||
describe('User Model', () => {
|
describe('User Model', () => {
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
jest.clearAllMocks();
|
jest.clearAllMocks();
|
||||||
@@ -61,7 +61,7 @@ describe('User Model', () => {
|
|||||||
updatedAt: '2023-01-01T00:00:00.000Z'
|
updatedAt: '2023-01-01T00:00:00.000Z'
|
||||||
};
|
};
|
||||||
|
|
||||||
couchdbService.createDocument.mockResolvedValue(mockCreated);
|
mockCouchdbService.createDocument.mockResolvedValue(mockCreated);
|
||||||
|
|
||||||
const user = await User.create(userData);
|
const user = await User.create(userData);
|
||||||
|
|
||||||
@@ -133,7 +133,7 @@ describe('User Model', () => {
|
|||||||
updatedAt: '2023-01-01T00:00:00.000Z'
|
updatedAt: '2023-01-01T00:00:00.000Z'
|
||||||
};
|
};
|
||||||
|
|
||||||
couchdbService.findUserByEmail.mockResolvedValue(existingUser);
|
mockCouchdbService.findUserByEmail.mockResolvedValue(existingUser);
|
||||||
|
|
||||||
const user = await User.findOne({ email });
|
const user = await User.findOne({ email });
|
||||||
expect(user).toBeDefined();
|
expect(user).toBeDefined();
|
||||||
@@ -172,7 +172,7 @@ describe('User Model', () => {
|
|||||||
updatedAt: '2023-01-01T00:00:00.000Z'
|
updatedAt: '2023-01-01T00:00:00.000Z'
|
||||||
};
|
};
|
||||||
|
|
||||||
couchdbService.createDocument.mockResolvedValue(mockCreated);
|
mockCouchdbService.createDocument.mockResolvedValue(mockCreated);
|
||||||
|
|
||||||
const user = await User.create(userData);
|
const user = await User.create(userData);
|
||||||
|
|
||||||
@@ -217,7 +217,7 @@ describe('User Model', () => {
|
|||||||
updatedAt: '2023-01-01T00:00:00.000Z'
|
updatedAt: '2023-01-01T00:00:00.000Z'
|
||||||
};
|
};
|
||||||
|
|
||||||
couchdbService.createDocument.mockResolvedValue(mockCreated);
|
mockCouchdbService.createDocument.mockResolvedValue(mockCreated);
|
||||||
|
|
||||||
const user = await User.create(userData);
|
const user = await User.create(userData);
|
||||||
|
|
||||||
@@ -256,7 +256,7 @@ describe('User Model', () => {
|
|||||||
updatedAt: '2023-01-01T00:00:00.000Z'
|
updatedAt: '2023-01-01T00:00:00.000Z'
|
||||||
};
|
};
|
||||||
|
|
||||||
couchdbService.createDocument.mockResolvedValue(mockCreated);
|
mockCouchdbService.createDocument.mockResolvedValue(mockCreated);
|
||||||
|
|
||||||
const user = await User.create(userData);
|
const user = await User.create(userData);
|
||||||
|
|
||||||
@@ -296,7 +296,7 @@ describe('User Model', () => {
|
|||||||
updatedAt: '2023-01-01T00:00:00.000Z'
|
updatedAt: '2023-01-01T00:00:00.000Z'
|
||||||
};
|
};
|
||||||
|
|
||||||
couchdbService.createDocument.mockResolvedValue(mockCreated);
|
mockCouchdbService.createDocument.mockResolvedValue(mockCreated);
|
||||||
|
|
||||||
const user = await User.create(userData);
|
const user = await User.create(userData);
|
||||||
|
|
||||||
@@ -337,7 +337,7 @@ describe('User Model', () => {
|
|||||||
updatedAt: '2023-01-01T00:00:00.000Z'
|
updatedAt: '2023-01-01T00:00:00.000Z'
|
||||||
};
|
};
|
||||||
|
|
||||||
couchdbService.createDocument.mockResolvedValue(mockCreated);
|
mockCouchdbService.createDocument.mockResolvedValue(mockCreated);
|
||||||
|
|
||||||
const user = await User.create(userData);
|
const user = await User.create(userData);
|
||||||
|
|
||||||
@@ -380,7 +380,7 @@ describe('User Model', () => {
|
|||||||
updatedAt: '2023-01-01T00:00:00.000Z'
|
updatedAt: '2023-01-01T00:00:00.000Z'
|
||||||
};
|
};
|
||||||
|
|
||||||
couchdbService.createDocument.mockResolvedValue(mockCreated);
|
mockCouchdbService.createDocument.mockResolvedValue(mockCreated);
|
||||||
|
|
||||||
const user = await User.create(userData);
|
const user = await User.create(userData);
|
||||||
expect(user.password).toMatch(/^\$2[aby]\$\d+\$/); // bcrypt hash pattern
|
expect(user.password).toMatch(/^\$2[aby]\$\d+\$/); // bcrypt hash pattern
|
||||||
@@ -417,7 +417,7 @@ describe('User Model', () => {
|
|||||||
updatedAt: '2023-01-01T00:00:00.000Z'
|
updatedAt: '2023-01-01T00:00:00.000Z'
|
||||||
};
|
};
|
||||||
|
|
||||||
couchdbService.createDocument.mockResolvedValue(mockCreated);
|
mockCouchdbService.createDocument.mockResolvedValue(mockCreated);
|
||||||
|
|
||||||
const user = await User.create(userData);
|
const user = await User.create(userData);
|
||||||
|
|
||||||
@@ -461,7 +461,7 @@ describe('User Model', () => {
|
|||||||
updatedAt: '2023-01-01T00:00:00.000Z'
|
updatedAt: '2023-01-01T00:00:00.000Z'
|
||||||
};
|
};
|
||||||
|
|
||||||
couchdbService.createDocument.mockResolvedValue(mockCreated);
|
mockCouchdbService.createDocument.mockResolvedValue(mockCreated);
|
||||||
|
|
||||||
const user = await User.create(userData);
|
const user = await User.create(userData);
|
||||||
expect(user.isPremium).toBe(true);
|
expect(user.isPremium).toBe(true);
|
||||||
@@ -497,8 +497,8 @@ describe('User Model', () => {
|
|||||||
updatedAt: '2023-01-01T00:00:00.000Z'
|
updatedAt: '2023-01-01T00:00:00.000Z'
|
||||||
};
|
};
|
||||||
|
|
||||||
couchdbService.findUserById.mockResolvedValue(mockUser);
|
mockCouchdbService.findUserById.mockResolvedValue(mockUser);
|
||||||
couchdbService.updateDocument.mockResolvedValue({ ...mockUser, isPremium: true, _rev: '2-def' });
|
mockCouchdbService.updateDocument.mockResolvedValue({ ...mockUser, isPremium: true, _rev: '2-def' });
|
||||||
|
|
||||||
const user = await User.findById('user_123');
|
const user = await User.findById('user_123');
|
||||||
user.isPremium = true;
|
user.isPremium = true;
|
||||||
@@ -539,8 +539,8 @@ describe('User Model', () => {
|
|||||||
updatedAt: '2023-01-01T00:00:00.000Z'
|
updatedAt: '2023-01-01T00:00:00.000Z'
|
||||||
};
|
};
|
||||||
|
|
||||||
couchdbService.findUserById.mockResolvedValue(mockUser);
|
mockCouchdbService.findUserById.mockResolvedValue(mockUser);
|
||||||
couchdbService.updateDocument.mockResolvedValue({ ...mockUser, points: 150, _rev: '2-def' });
|
mockCouchdbService.updateDocument.mockResolvedValue({ ...mockUser, points: 150, _rev: '2-def' });
|
||||||
|
|
||||||
const user = await User.findById('user_123');
|
const user = await User.findById('user_123');
|
||||||
user.points += 50;
|
user.points += 50;
|
||||||
@@ -579,8 +579,8 @@ describe('User Model', () => {
|
|||||||
updatedAt: '2023-01-01T00:00:00.000Z'
|
updatedAt: '2023-01-01T00:00:00.000Z'
|
||||||
};
|
};
|
||||||
|
|
||||||
couchdbService.findUserById.mockResolvedValue(mockUser);
|
mockCouchdbService.findUserById.mockResolvedValue(mockUser);
|
||||||
couchdbService.updateDocument.mockResolvedValue({ ...mockUser, points: 75, _rev: '2-def' });
|
mockCouchdbService.updateDocument.mockResolvedValue({ ...mockUser, points: 75, _rev: '2-def' });
|
||||||
|
|
||||||
const user = await User.findById('user_123');
|
const user = await User.findById('user_123');
|
||||||
user.points -= 25;
|
user.points -= 25;
|
||||||
@@ -623,7 +623,7 @@ describe('User Model', () => {
|
|||||||
updatedAt: '2023-01-01T00:00:00.000Z'
|
updatedAt: '2023-01-01T00:00:00.000Z'
|
||||||
};
|
};
|
||||||
|
|
||||||
couchdbService.createDocument.mockResolvedValue(mockCreated);
|
mockCouchdbService.createDocument.mockResolvedValue(mockCreated);
|
||||||
|
|
||||||
const user = await User.create(userData);
|
const user = await User.create(userData);
|
||||||
|
|
||||||
@@ -663,7 +663,7 @@ describe('User Model', () => {
|
|||||||
updatedAt: '2023-01-01T00:00:00.000Z'
|
updatedAt: '2023-01-01T00:00:00.000Z'
|
||||||
};
|
};
|
||||||
|
|
||||||
couchdbService.findUserByEmail.mockResolvedValue(mockUser);
|
mockCouchdbService.findUserByEmail.mockResolvedValue(mockUser);
|
||||||
|
|
||||||
const user = await User.findOne({ email: 'test@example.com' });
|
const user = await User.findOne({ email: 'test@example.com' });
|
||||||
expect(user).toBeDefined();
|
expect(user).toBeDefined();
|
||||||
@@ -696,7 +696,7 @@ describe('User Model', () => {
|
|||||||
updatedAt: '2023-01-01T00:00:00.000Z'
|
updatedAt: '2023-01-01T00:00:00.000Z'
|
||||||
};
|
};
|
||||||
|
|
||||||
couchdbService.findUserById.mockResolvedValue(mockUser);
|
mockCouchdbService.findUserById.mockResolvedValue(mockUser);
|
||||||
|
|
||||||
const user = await User.findById('user_123');
|
const user = await User.findById('user_123');
|
||||||
expect(user).toBeDefined();
|
expect(user).toBeDefined();
|
||||||
@@ -704,7 +704,7 @@ describe('User Model', () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
it('should return null when user not found', async () => {
|
it('should return null when user not found', async () => {
|
||||||
couchdbService.findUserById.mockResolvedValue(null);
|
mockCouchdbService.findUserById.mockResolvedValue(null);
|
||||||
|
|
||||||
const user = await User.findById('nonexistent');
|
const user = await User.findById('nonexistent');
|
||||||
expect(user).toBeNull();
|
expect(user).toBeNull();
|
||||||
@@ -743,7 +743,7 @@ describe('User Model', () => {
|
|||||||
updatedAt: '2023-01-01T00:00:00.000Z'
|
updatedAt: '2023-01-01T00:00:00.000Z'
|
||||||
};
|
};
|
||||||
|
|
||||||
couchdbService.createDocument.mockResolvedValue(mockCreated);
|
mockCouchdbService.createDocument.mockResolvedValue(mockCreated);
|
||||||
|
|
||||||
const user = await User.create(userData);
|
const user = await User.create(userData);
|
||||||
const safeUser = user.toSafeObject();
|
const safeUser = user.toSafeObject();
|
||||||
|
|||||||
@@ -2,6 +2,14 @@ const couchdbService = require("../services/couchdbService");
|
|||||||
|
|
||||||
class Street {
|
class Street {
|
||||||
constructor(data) {
|
constructor(data) {
|
||||||
|
// Validate required fields
|
||||||
|
if (!data.name) {
|
||||||
|
throw new Error('Name is required');
|
||||||
|
}
|
||||||
|
if (!data.location) {
|
||||||
|
throw new Error('Location is required');
|
||||||
|
}
|
||||||
|
|
||||||
this._id = data._id || null;
|
this._id = data._id || null;
|
||||||
this._rev = data._rev || null;
|
this._rev = data._rev || null;
|
||||||
this.type = "street";
|
this.type = "street";
|
||||||
|
|||||||
@@ -2,6 +2,14 @@ const couchdbService = require("../services/couchdbService");
|
|||||||
|
|
||||||
class Task {
|
class Task {
|
||||||
constructor(data) {
|
constructor(data) {
|
||||||
|
// Validate required fields
|
||||||
|
if (!data.street) {
|
||||||
|
throw new Error('Street is required');
|
||||||
|
}
|
||||||
|
if (!data.description) {
|
||||||
|
throw new Error('Description is required');
|
||||||
|
}
|
||||||
|
|
||||||
this._id = data._id || null;
|
this._id = data._id || null;
|
||||||
this._rev = data._rev || null;
|
this._rev = data._rev || null;
|
||||||
this.type = "task";
|
this.type = "task";
|
||||||
|
|||||||
Reference in New Issue
Block a user