FitTrackee/fittrackee_client/tests/unit/utils/records.spec.ts

665 lines
16 KiB
TypeScript
Raw Normal View History

2023-11-11 17:12:20 +01:00
import { describe, it, expect } from 'vitest'
import { translatedSports } from './fixtures'
import { formatRecord, getRecordsBySports } from '@/utils/records'
describe('formatRecord', () => {
const testsParams = [
{
description: "return formatted record for 'Average speed'",
inputParams: {
record: {
id: 9,
record_type: 'AS',
sport_id: 1,
user: 'admin',
value: 18,
workout_date: 'Sun, 07 Jul 2019 08:00:00 GMT',
workout_id: 'hvYBqYBRa7wwXpaStWR4V2',
},
timezone: 'Europe/Paris',
2023-11-11 17:12:20 +01:00
date_format: 'yyyy/dd/MM',
},
expected: {
id: 9,
record_type: 'AS',
2023-11-11 20:16:18 +01:00
sport_id: 1,
user: 'admin',
value: '18 km/h',
workout_date: '2019/07/07',
workout_id: 'hvYBqYBRa7wwXpaStWR4V2',
},
},
{
description: "return formatted record for 'Farest distance'",
inputParams: {
record: {
id: 10,
record_type: 'FD',
sport_id: 1,
user: 'admin',
value: 18,
workout_date: 'Sun, 07 Jul 2019 22:00:00 GMT',
workout_id: 'hvYBqYBRa7wwXpaStWR4V2',
},
timezone: 'Europe/Paris',
2023-11-11 17:12:20 +01:00
date_format: 'yyyy/MM/dd',
},
expected: {
id: 10,
record_type: 'FD',
2023-11-11 20:16:18 +01:00
sport_id: 1,
user: 'admin',
value: '18 km',
workout_date: '2019/07/08',
workout_id: 'hvYBqYBRa7wwXpaStWR4V2',
},
},
{
description: "return formatted record for 'Longest duration'",
inputParams: {
record: {
id: 11,
record_type: 'LD',
sport_id: 1,
user: 'admin',
value: '1:01:00',
workout_date: 'Sun, 07 Jul 2019 08:00:00 GMT',
workout_id: 'hvYBqYBRa7wwXpaStWR4V2',
},
timezone: 'Europe/Paris',
2023-11-11 17:12:20 +01:00
date_format: 'yyyy/MM/dd',
},
expected: {
id: 11,
record_type: 'LD',
2023-11-11 20:16:18 +01:00
sport_id: 1,
user: 'admin',
value: '1:01:00',
workout_date: '2019/07/07',
workout_id: 'hvYBqYBRa7wwXpaStWR4V2',
},
},
{
description: "return formatted record for 'Max. speed'",
inputParams: {
record: {
id: 12,
record_type: 'MS',
sport_id: 1,
user: 'admin',
value: 18,
workout_date: 'Sun, 07 Jul 2019 22:00:00 GMT',
workout_id: 'hvYBqYBRa7wwXpaStWR4V2',
},
timezone: 'Europe/Paris',
2023-11-11 17:12:20 +01:00
date_format: 'dd/MM/yyyy',
},
expected: {
id: 12,
record_type: 'MS',
2023-11-11 20:16:18 +01:00
sport_id: 1,
user: 'admin',
value: '18 km/h',
workout_date: '08/07/2019',
workout_id: 'hvYBqYBRa7wwXpaStWR4V2',
},
},
2022-07-18 15:29:24 +02:00
{
description: "return formatted record for 'Highest ascent'",
inputParams: {
record: {
id: 13,
record_type: 'HA',
sport_id: 1,
user: 'admin',
value: 100,
workout_date: 'Sun, 07 Jul 2019 08:00:00 GMT',
workout_id: 'hvYBqYBRa7wwXpaStWR4V2',
},
timezone: 'Europe/Paris',
2023-11-11 17:12:20 +01:00
date_format: 'MMM. do, yyyy',
2022-07-18 15:29:24 +02:00
},
expected: {
id: 13,
record_type: 'HA',
2023-11-11 20:16:18 +01:00
sport_id: 1,
user: 'admin',
2022-07-18 15:29:24 +02:00
value: '100 m',
workout_date: 'Jul. 7th, 2019',
2022-07-18 15:29:24 +02:00
workout_id: 'hvYBqYBRa7wwXpaStWR4V2',
},
},
]
testsParams.map((testParams) => {
it(testParams.description, () => {
2023-11-11 17:12:20 +01:00
expect(
formatRecord(
testParams.inputParams.record,
testParams.inputParams.timezone,
false,
testParams.inputParams.date_format
2023-11-11 17:12:20 +01:00
)
).toStrictEqual(testParams.expected)
})
})
})
describe('formatRecord after conversion', () => {
const testsParams = [
{
description: "return formatted record for 'Average speed'",
inputParams: {
record: {
id: 9,
record_type: 'AS',
sport_id: 1,
user: 'admin',
value: 18,
workout_date: 'Sun, 07 Jul 2019 08:00:00 GMT',
workout_id: 'hvYBqYBRa7wwXpaStWR4V2',
},
timezone: 'Europe/Paris',
2023-11-11 17:12:20 +01:00
date_format: 'yyyy/dd/MM',
},
expected: {
id: 9,
record_type: 'AS',
2023-11-11 20:16:18 +01:00
sport_id: 1,
user: 'admin',
value: '11.18 mi/h',
workout_date: '2019/07/07',
workout_id: 'hvYBqYBRa7wwXpaStWR4V2',
},
},
{
description: "return formatted record for 'Farest distance'",
inputParams: {
record: {
id: 10,
record_type: 'FD',
sport_id: 1,
user: 'admin',
value: 18,
workout_date: 'Sun, 07 Jul 2019 22:00:00 GMT',
workout_id: 'hvYBqYBRa7wwXpaStWR4V2',
},
timezone: 'Europe/Paris',
2023-11-11 17:12:20 +01:00
date_format: 'yyyy/dd/MM',
},
expected: {
id: 10,
record_type: 'FD',
2023-11-11 20:16:18 +01:00
sport_id: 1,
user: 'admin',
2021-11-14 17:52:36 +01:00
value: '11.185 mi',
2022-10-26 01:38:55 +02:00
workout_date: '2019/08/07',
workout_id: 'hvYBqYBRa7wwXpaStWR4V2',
},
},
{
description: "return formatted record for 'Longest duration'",
inputParams: {
record: {
id: 11,
record_type: 'LD',
sport_id: 1,
user: 'admin',
value: '1:01:00',
workout_date: 'Sun, 07 Jul 2019 08:00:00 GMT',
workout_id: 'hvYBqYBRa7wwXpaStWR4V2',
},
timezone: 'Europe/Paris',
2023-11-11 17:12:20 +01:00
date_format: 'yyyy/dd/MM',
},
expected: {
id: 11,
record_type: 'LD',
2023-11-11 20:16:18 +01:00
sport_id: 1,
user: 'admin',
value: '1:01:00',
workout_date: '2019/07/07',
workout_id: 'hvYBqYBRa7wwXpaStWR4V2',
},
},
{
description: "return formatted record for 'Max. speed'",
inputParams: {
record: {
id: 12,
record_type: 'MS',
sport_id: 1,
user: 'admin',
value: 18,
workout_date: 'Sun, 07 Jul 2019 22:00:00 GMT',
workout_id: 'hvYBqYBRa7wwXpaStWR4V2',
},
timezone: 'Europe/Paris',
2023-11-11 17:12:20 +01:00
date_format: 'yyyy/dd/MM',
},
expected: {
id: 12,
record_type: 'MS',
2023-11-11 20:16:18 +01:00
sport_id: 1,
user: 'admin',
value: '11.18 mi/h',
2022-10-26 01:38:55 +02:00
workout_date: '2019/08/07',
workout_id: 'hvYBqYBRa7wwXpaStWR4V2',
},
},
2022-07-18 15:29:24 +02:00
{
description: "return formatted record for 'Highest ascent'",
inputParams: {
record: {
id: 13,
record_type: 'HA',
sport_id: 1,
user: 'admin',
value: 100,
workout_date: 'Sun, 07 Jul 2019 08:00:00 GMT',
workout_id: 'hvYBqYBRa7wwXpaStWR4V2',
},
timezone: 'Europe/Paris',
2023-11-11 17:12:20 +01:00
date_format: 'yyyy/dd/MM',
2022-07-18 15:29:24 +02:00
},
expected: {
id: 13,
record_type: 'HA',
2023-11-11 20:16:18 +01:00
sport_id: 1,
user: 'admin',
2022-07-18 15:29:24 +02:00
value: '328.08 ft',
workout_date: '2019/07/07',
workout_id: 'hvYBqYBRa7wwXpaStWR4V2',
},
},
]
testsParams.map((testParams) => {
it(testParams.description, () => {
2023-11-11 17:12:20 +01:00
expect(
formatRecord(
testParams.inputParams.record,
testParams.inputParams.timezone,
true,
testParams.inputParams.date_format
2023-11-11 17:12:20 +01:00
)
).toStrictEqual(testParams.expected)
})
})
})
describe('formatRecord (invalid record type)', () => {
it('it throws an error if record type is invalid', () => {
expect(() =>
formatRecord(
{
id: 12,
record_type: 'M',
sport_id: 1,
user: 'admin',
value: 18,
workout_date: 'Sun, 07 Jul 2019 22:00:00 GMT',
workout_id: 'hvYBqYBRa7wwXpaStWR4V2',
},
'Europe/Paris',
false,
'yyyy/dd/MM'
)
).to.throw(
'Invalid record type, expected: "AS", "FD", "HA", "LD", "MD", got: "M"'
)
})
})
describe('getRecordsBySports', () => {
const testsParams = [
{
description: 'returns empty object if no records',
input: {
records: [],
tz: 'Europe/Paris',
2023-11-11 17:12:20 +01:00
date_format: 'yyyy/dd/MM',
},
expected: {},
},
{
description: 'returns record grouped by Sport',
input: {
records: [
{
id: 9,
record_type: 'AS',
sport_id: 1,
user: 'admin',
value: 18,
workout_date: 'Sun, 07 Jul 2019 08:00:00 GMT',
workout_id: 'hvYBqYBRa7wwXpaStWR4V2',
},
],
tz: 'Europe/Paris',
2023-11-11 17:12:20 +01:00
date_format: 'yyyy/dd/MM',
},
expected: {
'Cycling (Sport)': {
color: null,
label: 'Cycling (Sport)',
records: [
{
id: 9,
record_type: 'AS',
2023-11-11 20:16:18 +01:00
sport_id: 1,
user: 'admin',
value: '18 km/h',
workout_date: '2019/07/07',
workout_id: 'hvYBqYBRa7wwXpaStWR4V2',
},
],
},
},
},
{
description: 'returns record grouped by Sport',
input: {
records: [
{
id: 9,
record_type: 'AS',
sport_id: 1,
user: 'admin',
value: 18,
workout_date: 'Sun, 07 Jul 2019 08:00:00 GMT',
workout_id: 'hvYBqYBRa7wwXpaStWR4V2',
},
{
id: 10,
record_type: 'FD',
sport_id: 2,
user: 'admin',
value: 18,
workout_date: 'Sun, 07 Jul 2019 22:00:00 GMT',
workout_id: 'n6JcLPQt3QtZWFfiSnYm4C',
},
{
id: 12,
record_type: 'MS',
sport_id: 1,
user: 'admin',
value: 18,
workout_date: 'Sun, 07 Jul 2019 08:00:00 GMT',
workout_id: 'hvYBqYBRa7wwXpaStWR4V2',
},
],
tz: 'Europe/Paris',
2023-11-11 17:12:20 +01:00
date_format: 'yyyy/dd/MM',
},
expected: {
'Cycling (Sport)': {
color: null,
label: 'Cycling (Sport)',
records: [
{
id: 9,
record_type: 'AS',
2023-11-11 20:16:18 +01:00
sport_id: 1,
user: 'admin',
value: '18 km/h',
workout_date: '2019/07/07',
workout_id: 'hvYBqYBRa7wwXpaStWR4V2',
},
{
id: 12,
record_type: 'MS',
2023-11-11 20:16:18 +01:00
sport_id: 1,
user: 'admin',
value: '18 km/h',
workout_date: '2019/07/07',
workout_id: 'hvYBqYBRa7wwXpaStWR4V2',
},
],
},
'Cycling (Transport)': {
color: '#000000',
label: 'Cycling (Transport)',
records: [
{
id: 10,
record_type: 'FD',
2023-11-11 20:16:18 +01:00
sport_id: 2,
user: 'admin',
value: '18 km',
2022-10-26 01:38:55 +02:00
workout_date: '2019/08/07',
workout_id: 'n6JcLPQt3QtZWFfiSnYm4C',
},
],
},
},
},
]
testsParams.map((testParams) =>
it(testParams.description, () => {
2023-11-11 17:12:20 +01:00
expect(
getRecordsBySports(
testParams.input.records,
translatedSports,
testParams.input.tz,
false,
true,
testParams.input.date_format
2023-11-11 17:12:20 +01:00
)
).toStrictEqual(testParams.expected)
})
)
})
describe('getRecordsBySports after conversion', () => {
const testsParams = [
{
description: 'returns empty object if no records',
input: {
records: [],
tz: 'Europe/Paris',
2023-11-11 17:12:20 +01:00
date_format: 'yyyy/dd/MM',
},
expected: {},
},
{
description: 'returns record grouped by Sport',
input: {
records: [
{
id: 9,
record_type: 'AS',
sport_id: 1,
user: 'admin',
value: 18,
workout_date: 'Sun, 07 Jul 2019 08:00:00 GMT',
workout_id: 'hvYBqYBRa7wwXpaStWR4V2',
},
],
tz: 'Europe/Paris',
2023-11-11 17:12:20 +01:00
date_format: 'yyyy/dd/MM',
},
expected: {
'Cycling (Sport)': {
color: null,
label: 'Cycling (Sport)',
records: [
{
id: 9,
record_type: 'AS',
2023-11-11 20:16:18 +01:00
sport_id: 1,
user: 'admin',
value: '11.18 mi/h',
workout_date: '2019/07/07',
workout_id: 'hvYBqYBRa7wwXpaStWR4V2',
},
],
},
},
},
{
description: 'returns record grouped by Sport',
input: {
records: [
{
id: 9,
record_type: 'AS',
sport_id: 1,
user: 'admin',
value: 18,
workout_date: 'Sun, 07 Jul 2019 08:00:00 GMT',
workout_id: 'hvYBqYBRa7wwXpaStWR4V2',
},
{
id: 10,
record_type: 'FD',
sport_id: 2,
user: 'admin',
value: 18,
workout_date: 'Sun, 07 Jul 2019 22:00:00 GMT',
workout_id: 'n6JcLPQt3QtZWFfiSnYm4C',
},
{
id: 12,
record_type: 'MS',
sport_id: 1,
user: 'admin',
value: 18,
workout_date: 'Sun, 07 Jul 2019 08:00:00 GMT',
workout_id: 'hvYBqYBRa7wwXpaStWR4V2',
},
],
tz: 'Europe/Paris',
2023-11-11 17:12:20 +01:00
date_format: 'yyyy/dd/MM',
},
expected: {
'Cycling (Sport)': {
color: null,
label: 'Cycling (Sport)',
records: [
{
id: 9,
record_type: 'AS',
2023-11-11 20:16:18 +01:00
sport_id: 1,
user: 'admin',
value: '11.18 mi/h',
workout_date: '2019/07/07',
workout_id: 'hvYBqYBRa7wwXpaStWR4V2',
},
{
id: 12,
record_type: 'MS',
2023-11-11 20:16:18 +01:00
sport_id: 1,
user: 'admin',
value: '11.18 mi/h',
workout_date: '2019/07/07',
workout_id: 'hvYBqYBRa7wwXpaStWR4V2',
},
],
},
'Cycling (Transport)': {
color: '#000000',
label: 'Cycling (Transport)',
records: [
{
id: 10,
record_type: 'FD',
2023-11-11 20:16:18 +01:00
sport_id: 2,
user: 'admin',
2021-11-14 17:52:36 +01:00
value: '11.185 mi',
2022-10-26 01:38:55 +02:00
workout_date: '2019/08/07',
workout_id: 'n6JcLPQt3QtZWFfiSnYm4C',
},
],
},
},
},
]
testsParams.map((testParams) =>
it(testParams.description, () => {
2023-11-11 17:12:20 +01:00
expect(
getRecordsBySports(
testParams.input.records,
translatedSports,
testParams.input.tz,
true,
true,
testParams.input.date_format
2023-11-11 17:12:20 +01:00
)
).toStrictEqual(testParams.expected)
})
)
})
describe('getRecordsBySports with HA record', () => {
const testsParams = [
{
description: 'returns empty object if no records',
input: {
records: [],
tz: 'Europe/Paris',
2023-11-11 17:12:20 +01:00
date_format: 'yyyy/dd/MM',
},
expected: {},
},
{
description: 'returns records except HA record',
input: {
records: [
{
id: 9,
record_type: 'AS',
sport_id: 1,
user: 'admin',
value: 18,
workout_date: 'Sun, 07 Jul 2019 08:00:00 GMT',
workout_id: 'hvYBqYBRa7wwXpaStWR4V2',
},
{
id: 9,
record_type: 'HA',
sport_id: 1,
user: 'admin',
value: 235,
workout_date: 'Sun, 07 Jul 2019 08:00:00 GMT',
workout_id: 'hvYBqYBRa7wwXpaStWR4V2',
},
],
tz: 'Europe/Paris',
2023-11-11 17:12:20 +01:00
date_format: 'yyyy/dd/MM',
},
expected: {
'Cycling (Sport)': {
color: null,
label: 'Cycling (Sport)',
records: [
{
id: 9,
record_type: 'AS',
2023-11-11 20:16:18 +01:00
sport_id: 1,
user: 'admin',
value: '18 km/h',
workout_date: '2019/07/07',
workout_id: 'hvYBqYBRa7wwXpaStWR4V2',
},
],
},
},
},
]
testsParams.map((testParams) =>
it(testParams.description, () => {
2023-11-11 17:12:20 +01:00
expect(
getRecordsBySports(
testParams.input.records,
translatedSports,
testParams.input.tz,
false,
false,
testParams.input.date_format
2023-11-11 17:12:20 +01:00
)
).toStrictEqual(testParams.expected)
})
)
})