File size: 1,434 Bytes
5a81b95
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
const DatabaseTestHelper = require('../helpers/dbHelper.cjs');

describe('User Model', () => {
  let dbHelper;

  beforeAll(async () => {
    dbHelper = new DatabaseTestHelper();
    await dbHelper.connect();
  });

  afterAll(async () => {
    await dbHelper.disconnect();
  });

  beforeEach(async () => {
    await dbHelper.clearDatabase();
  });

  test('should create a user with valid data', async () => {
    const user = await dbHelper.createTestUser({
      username: 'john_doe',
      email: 'john@example.com',
    });

    expect(user.id).toBeDefined();
    expect(user.username).toBe('john_doe');
    expect(user.email).toBe('john@example.com');
    expect(user.isActive).toBe(true);
  });

  test('should enforce unique username constraint', async () => {
    await dbHelper.createTestUser({ username: 'duplicate' });

    await expect(
      dbHelper.createTestUser({
        username: 'duplicate',
        email: 'different@example.com',
      })
    ).rejects.toThrow();
  });

  test('should enforce unique email constraint', async () => {
    await dbHelper.createTestUser({ email: 'same@example.com' });

    await expect(
      dbHelper.createTestUser({
        username: 'different',
        email: 'same@example.com',
      })
    ).rejects.toThrow();
  });

  test('should validate email format', async () => {
    await expect(dbHelper.createTestUser({ email: 'invalid-email' })).rejects.toThrow();
  });
});