eletrotupi / tcc/ api/tests/moods/create.test.tsc901c35af9c84b6a29e5185545ced1129f33b8f4
1.8 KB | 58 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
const validMood = {
10
  selectedMood: 'GOOD',
11
  anxietyLevel: 2,
12
  stressLevel: 3,
13
  energyLevel: 7,
14
  moment: new Date().toISOString(),
15
  moodComponents: [{ component: 'JOY', intensity: 'MODERATE' }],
16
}
17

18
afterAll(() => db.$disconnect())
19
beforeEach(() => cleanupTestDb(db))
20

21
describe('POST /moods', () => {
22
  it('creates a mood entry and returns it', async () => {
23
    const user = await createTestUser(db)
24
    const token = generateTestToken(user.id, user.email)
25

26
    const res = await request(app)
27
      .post('/moods')
28
      .set('Authorization', `Bearer ${token}`)
29
      .send({ mood: validMood })
30

31
    expect(res.status).toBe(201)
32
    expect(res.body.mood.selectedMood).toBe('GOOD')
33
    expect(res.body.mood.energyLevel).toBe(7)
34
    expect(res.body.mood.moodComponents).toHaveLength(1)
35

36
    const dbMood = await db.mood.findFirst({ where: { userId: user.id } })
37
    expect(dbMood).not.toBeNull()
38
  })
39

40
  it('returns 400 for missing required fields', async () => {
41
    const user = await createTestUser(db)
42
    const token = generateTestToken(user.id, user.email)
43

44
    const res = await request(app)
45
      .post('/moods')
46
      .set('Authorization', `Bearer ${token}`)
47
      .send({ mood: { selectedMood: 'GOOD' } })
48

49
    expect(res.status).toBe(400)
50
    expect(res.body.error).toBeTruthy()
51
    expect(res.body.fields).toBeTruthy()
52
  })
53

54
  it('returns 401 without token', async () => {
55
    const res = await request(app).post('/moods').send({ mood: validMood })
56
    expect(res.status).toBe(401)
57
  })
58
})