eletrotupi / tcc/ api/tests/moods/list.test.tsc901c35af9c84b6a29e5185545ced1129f33b8f4
2.6 KB | 91 lines Raw
1
import { describe, it, expect, afterAll, beforeEach } from 'vitest'
2
import request from 'supertest'
3
import { createApp } from '@app/createApp'
4
import { buildPrisma, cleanupTestDb, createTestUser, generateTestToken } from '../test-helper'
5

6
const app = createApp()
7
const db = buildPrisma()
8

9
afterAll(() => db.$disconnect())
10
beforeEach(() => cleanupTestDb(db))
11

12
describe('GET /moods', () => {
13
  it('returns an empty list when no moods exist', async () => {
14
    const user = await createTestUser(db)
15
    const token = generateTestToken(user.id, user.email)
16

17
    const res = await request(app)
18
      .get('/moods')
19
      .set('Authorization', `Bearer ${token}`)
20

21
    expect(res.status).toBe(200)
22
    expect(res.body.entries).toEqual([])
23
    expect(res.body.total).toBe(0)
24
  })
25

26
  it('returns moods belonging to the authenticated user', async () => {
27
    const user = await createTestUser(db)
28
    const other = await createTestUser(db, { email: 'other@example.com' })
29
    const token = generateTestToken(user.id, user.email)
30

31
    await db.mood.create({
32
      data: {
33
        userId: user.id,
34
        selectedMood: 'GOOD',
35
        anxietyLevel: 1,
36
        stressLevel: 1,
37
        energyLevel: 8,
38
        moment: new Date(),
39
        moodComponents: { create: [{ component: 'JOY', intensity: 'LIGHT' }] },
40
      },
41
    })
42
    await db.mood.create({
43
      data: {
44
        userId: other.id,
45
        selectedMood: 'SAD',
46
        anxietyLevel: 5,
47
        stressLevel: 5,
48
        energyLevel: 2,
49
        moment: new Date(),
50
        moodComponents: { create: [{ component: 'SADNESS', intensity: 'HIGH' }] },
51
      },
52
    })
53

54
    const res = await request(app)
55
      .get('/moods')
56
      .set('Authorization', `Bearer ${token}`)
57

58
    expect(res.status).toBe(200)
59
    expect(res.body.entries).toHaveLength(1)
60
    expect(res.body.entries[0].selectedMood).toBe('GOOD')
61
    expect(res.body.total).toBe(1)
62
  })
63

64
  it('paginates results', async () => {
65
    const user = await createTestUser(db)
66
    const token = generateTestToken(user.id, user.email)
67

68
    for (let i = 0; i < 5; i++) {
69
      await db.mood.create({
70
        data: {
71
          userId: user.id,
72
          selectedMood: 'NEUTRAL',
73
          anxietyLevel: 3,
74
          stressLevel: 3,
75
          energyLevel: 5,
76
          moment: new Date(Date.now() - i * 60_000),
77
          moodComponents: { create: [{ component: 'JOY', intensity: 'LIGHT' }] },
78
        },
79
      })
80
    }
81

82
    const res = await request(app)
83
      .get('/moods?limit=2&page=1')
84
      .set('Authorization', `Bearer ${token}`)
85

86
    expect(res.status).toBe(200)
87
    expect(res.body.entries).toHaveLength(2)
88
    expect(res.body.total).toBe(5)
89
    expect(res.body.nextPage).toBe(2)
90
  })
91
})