| 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 | })
|