eletrotupi / tcc/ api/tests/insights/daily-sleep.unit.test.ts68b32b6167f98c0777e1cc816c4065363f24fba4
2.3 KB | 82 lines Raw
1
import { describe, it, expect } from 'vitest'
2
import {
3
  computeDailySleep,
4
  dailySleepBody,
5
} from '@app/lib/queue/processors/insights/dailySleep'
6

7
const record = (average: number) => ({ average })
8

9
describe('computeDailySleep', () => {
10
  it('sums today and compares it against yesterday', () => {
11
    const { metadata } = computeDailySleep([record(8)], [record(6)])
12

13
    expect(metadata).toEqual({
14
      totalHours: 8,
15
      diffMinutes: 120,
16
      diffStr: '+2h que ontem',
17
      sessionCount: 1,
18
      napStr: '',
19
      hadNaps: false,
20
      windowLabel: 'hoje',
21
    })
22
  })
23

24
  it('omits the difference when nothing was logged yesterday', () => {
25
    const { metadata } = computeDailySleep([record(6)], [])
26

27
    expect(metadata).toMatchObject({
28
      totalHours: 6,
29
      diffMinutes: null,
30
      diffStr: '',
31
    })
32
  })
33

34
  it('subtracts yesterday from today when yesterday was longer', () => {
35
    const { metadata } = computeDailySleep([record(4)], [record(9)])
36

37
    expect(metadata).toMatchObject({
38
      totalHours: 4,
39
      diffMinutes: -300,
40
      diffStr: '-5h que ontem',
41
    })
42
  })
43

44
  it('names the extra sessions as naps, pluralized past two', () => {
45
    const oneNap = computeDailySleep([record(5), record(2)], []).metadata
46
    const twoNaps = computeDailySleep(
47
      [record(5), record(2), record(1)],
48
      [],
49
    ).metadata
50

51
    expect(oneNap).toMatchObject({
52
      totalHours: 7,
53
      sessionCount: 2,
54
      napStr: 'incluindo 1 cochilo',
55
      hadNaps: true,
56
    })
57
    expect(twoNaps).toMatchObject({
58
      totalHours: 8,
59
      sessionCount: 3,
60
      napStr: 'incluindo 2 cochilos',
61
    })
62
  })
63

64
  it('drops the difference string under five minutes', () => {
65
    const under = computeDailySleep([record(6)], [record(6.05)]).metadata
66
    const at = computeDailySleep([record(6)], [record(5.9)]).metadata
67

68
    expect(under).toMatchObject({ diffMinutes: -3, diffStr: '' })
69
    expect(at).toMatchObject({ diffMinutes: 6, diffStr: '+6min que ontem' })
70
  })
71
})
72

73
describe('dailySleepBody', () => {
74
  it('formats a whole hour and a remainder', () => {
75
    expect(dailySleepBody(8)).toBe('8h de sono hoje')
76
    expect(dailySleepBody(7.5)).toBe('7h 30min de sono hoje')
77
  })
78

79
  it('renders a day with nothing logged as zero hours', () => {
80
    expect(dailySleepBody(0)).toBe('0h de sono hoje')
81
  })
82
})