eletrotupi / tcc/ api/tests/auth/login.test.ts491dca79fa09cef036acd73efc346039c3d1140d
2.4 KB | 77 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 } from '../test-helper'
5
import { recordedJobs, resetQueueMocks } from '../mocks/queue'
6

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

10
afterAll(() => db.$disconnect())
11
beforeEach(async () => {
12
  await cleanupTestDb(db)
13

14
  resetQueueMocks()
15
})
16

17
describe('POST /auth/login', () => {
18
  it('returns a token for valid credentials', async () => {
19
    await createTestUser(db, { email: 'login@example.com', password: 'senha123' })
20

21
    const res = await request(app)
22
      .post('/auth/login')
23
      .send({ email: 'login@example.com', password: 'senha123' })
24

25
    expect(res.status).toBe(200)
26
    expect(res.body.token).toBeTruthy()
27
    expect(res.body.user.email).toBe('login@example.com')
28
  })
29

30
  it('returns 401 for wrong password', async () => {
31
    await createTestUser(db, { email: 'login@example.com', password: 'senha123' })
32

33
    const res = await request(app)
34
      .post('/auth/login')
35
      .send({ email: 'login@example.com', password: 'errada' })
36

37
    expect(res.status).toBe(401)
38
  })
39

40
  it('returns 401 for unknown email', async () => {
41
    const res = await request(app)
42
      .post('/auth/login')
43
      .send({ email: 'naoexiste@example.com', password: 'qualquer' })
44

45
    expect(res.status).toBe(401)
46
  })
47

48
  it('reissues an activation code when an inactive user logs in with an expired one', async () => {
49
    const user = await createTestUser(db, { email: 'inactive@example.com', password: 'senha123' })
50
    await db.user.update({
51
      where: { id: user.id },
52
      data: {
53
        activationCode: '111111',
54
        activationCodeExpiresAt: new Date(Date.now() - 1000),
55
      },
56
    })
57

58
    const res = await request(app)
59
      .post('/auth/login')
60
      .send({ email: 'inactive@example.com', password: 'senha123' })
61

62
    expect(res.status).toBe(200)
63

64
    const dbUser = await db.user.findUnique({ where: { id: user.id } })
65
    expect(dbUser!.activationCode).toMatch(/^\d{6}$/)
66
    expect(dbUser!.activationCode).not.toBe('111111')
67
    expect(dbUser!.activationCodeExpiresAt!.getTime()).toBeGreaterThan(Date.now())
68

69
    expect(recordedJobs).toContainEqual(
70
      expect.objectContaining({
71
        queue: 'mail',
72
        name: 'mail:activate-account',
73
        data: { userId: user.id, code: dbUser!.activationCode },
74
      })
75
    )
76
  })
77
})