tududi/backend/tests/unit/models/area.test.js
Chris 3c1209a5a9
Express migration (#80)
* Initial migration

* Cleanup and create migration scripts

* Introduce test suite

* Fix test issues

* Correct CORS issue and update paths

* Update README
2025-06-16 21:50:44 +03:00

74 lines
No EOL
1.8 KiB
JavaScript

const { Area, User } = require('../../../models');
describe('Area Model', () => {
let user;
beforeEach(async () => {
const bcrypt = require('bcrypt');
user = await User.create({
email: 'test@example.com',
password_digest: await bcrypt.hash('password123', 10)
});
});
describe('validation', () => {
it('should create an area with valid data', async () => {
const areaData = {
name: 'Work',
description: 'Work related projects',
user_id: user.id
};
const area = await Area.create(areaData);
expect(area.name).toBe(areaData.name);
expect(area.description).toBe(areaData.description);
expect(area.user_id).toBe(user.id);
});
it('should require name', async () => {
const areaData = {
description: 'Area without name',
user_id: user.id
};
await expect(Area.create(areaData)).rejects.toThrow();
});
it('should require user_id', async () => {
const areaData = {
name: 'Test Area'
};
await expect(Area.create(areaData)).rejects.toThrow();
});
it('should allow null description', async () => {
const areaData = {
name: 'Test Area',
user_id: user.id,
description: null
};
const area = await Area.create(areaData);
expect(area.description).toBeNull();
});
});
describe('associations', () => {
it('should belong to a user', async () => {
const area = await Area.create({
name: 'Test Area',
user_id: user.id
});
const areaWithUser = await Area.findByPk(area.id, {
include: [{ model: User }]
});
expect(areaWithUser.User).toBeDefined();
expect(areaWithUser.User.id).toBe(user.id);
expect(areaWithUser.User.email).toBe(user.email);
});
});
});