eletrotupi / tcc/ api/tests/insights/energy-sleep.unit.test.ts7ff50aa722f838fa59d0afb52d1c2e2b96bf3e22
2.8 KB | 90 lines Raw
1
import { describe, it, expect } from 'vitest'
2
import {
3
  pearson,
4
  energySleepBody,
5
} from '@app/lib/queue/processors/insights/energySleep'
6

7
describe('pearson', () => {
8
  it('returns 1 for a perfect positive correlation', () => {
9
    expect(pearson([1, 2, 3], [2, 4, 6])).toBeCloseTo(1, 12)
10
  })
11

12
  it('returns -1 for a perfect negative correlation', () => {
13
    expect(pearson([1, 2, 3], [6, 4, 2])).toBeCloseTo(-1, 12)
14
  })
15

16
  it('returns 0 with fewer than two samples', () => {
17
    expect(pearson([], [])).toBe(0)
18
    expect(pearson([1], [2])).toBe(0)
19
  })
20

21
  it('returns 0 when either axis has zero variance', () => {
22
    expect(pearson([5, 5, 5], [1, 2, 3])).toBe(0)
23
    expect(pearson([1, 2, 3], [4, 4, 4])).toBe(0)
24
  })
25

26
  it('stays within [-1, 1] for a partial correlation', () => {
27
    const r = pearson([1, 2, 3, 4, 5], [2, 1, 3, 4, 6])
28

29
    expect(r).toBeGreaterThanOrEqual(-1)
30
    expect(r).toBeLessThanOrEqual(1)
31
    expect(r).toBeCloseTo(0.904, 3)
32
  })
33
})
34

35
describe('energySleepBody', () => {
36
  const limited = ' (dados limitados, continue registrando)'
37

38
  it('reads a strong positive correlation above 0.6', () => {
39
    expect(energySleepBody(0.8, 10)).toBe(
40
      'Seu sono tem forte impacto positivo na sua energia no dia seguinte.',
41
    )
42
  })
43

44
  it('reads a moderate correlation above 0.3', () => {
45
    expect(energySleepBody(0.4, 10)).toBe(
46
      'Seu sono tem impacto moderado na sua energia no dia seguinte.',
47
    )
48
  })
49

50
  it('reads a negative correlation below -0.3', () => {
51
    expect(energySleepBody(-0.5, 10)).toBe(
52
      'Curiosamente, mais sono está associado a menos energia — vale investigar.',
53
    )
54
  })
55

56
  it('reports no clear relation in the middle band', () => {
57
    expect(energySleepBody(0, 10)).toBe(
58
      'Não encontramos uma relação clara entre seu sono e energia ainda.',
59
    )
60
  })
61

62
  it('falls to the lower band exactly on each threshold', () => {
63
    expect(energySleepBody(0.6, 10)).toBe(
64
      'Seu sono tem impacto moderado na sua energia no dia seguinte.',
65
    )
66
    expect(energySleepBody(0.3, 10)).toBe(
67
      'Não encontramos uma relação clara entre seu sono e energia ainda.',
68
    )
69
    expect(energySleepBody(-0.3, 10)).toBe(
70
      'Não encontramos uma relação clara entre seu sono e energia ainda.',
71
    )
72
  })
73

74
  it('appends the low-sample footnote under five pairs', () => {
75
    expect(energySleepBody(0.8, 3)).toBe(
76
      'Seu sono tem forte impacto positivo na sua energia no dia seguinte.' +
77
        limited,
78
    )
79
  })
80

81
  it('drops the footnote at exactly five pairs', () => {
82
    expect(energySleepBody(0.8, 4)).toBe(
83
      'Seu sono tem forte impacto positivo na sua energia no dia seguinte.' +
84
        limited,
85
    )
86
    expect(energySleepBody(0.8, 5)).toBe(
87
      'Seu sono tem forte impacto positivo na sua energia no dia seguinte.',
88
    )
89
  })
90
})