File size: 1,949 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
58
59
60
61
62
63
64
65
66
67
68
69
const DatabaseTestHelper = require('../helpers/dbHelper.cjs');
const APITestHelper = require('../helpers/apiHelper.cjs');

describe('Widget API Integration', () => {
  let dbHelper;
  let apiHelper;
  let testUser;

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

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

  beforeEach(async () => {
    await dbHelper.clearDatabase();
    testUser = await dbHelper.createTestUser();
    apiHelper = new APITestHelper(app);
    await apiHelper.login(testUser.email, 'password');
  });

  test('GET /api/widgets should return all widgets', async () => {
    await dbHelper.createTestWidget(testUser.id);
    await dbHelper.createTestWidget(testUser.id, { name: 'Widget 2' });

    const response = await apiHelper.get('/api/widgets');

    expect(response.status).toBe(200);
    expect(response.body).toHaveLength(2);
  });

  test('POST /api/widgets should create a new widget', async () => {
    const widgetData = {
      name: 'New Widget',
      version: '1.0.0',
      price: 49.99,
      description: 'Test widget',
    };

    const response = await apiHelper.post('/api/widgets', widgetData);

    expect(response.status).toBe(201);
    expect(response.body.name).toBe('New Widget');
    expect(response.body.ownerId).toBe(testUser.id);
  });

  test('PUT /api/widgets/:id should update widget', async () => {
    const widget = await dbHelper.createTestWidget(testUser.id);

    const response = await apiHelper.put(`/api/widgets/${widget.id}`, {
      price: 79.99,
    });

    expect(response.status).toBe(200);
    expect(response.body.price).toBe('79.99');
  });

  test('DELETE /api/widgets/:id should delete widget', async () => {
    const widget = await dbHelper.createTestWidget(testUser.id);

    const response = await apiHelper.delete(`/api/widgets/${widget.id}`);

    expect(response.status).toBe(204);
  });
});