eletrotupi / tcc/ api/tests/moods/create.test.ts8b7a4383c6c39de79612d786a2c836f1b01221b8
1.7 KB | 57 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.errors).toBeTruthy()
51
  })
52

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