665 lines
16 KiB
TypeScript
665 lines
16 KiB
TypeScript
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',
|
|
date_format: 'yyyy/dd/MM',
|
|
},
|
|
expected: {
|
|
id: 9,
|
|
record_type: 'AS',
|
|
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',
|
|
date_format: 'yyyy/MM/dd',
|
|
},
|
|
expected: {
|
|
id: 10,
|
|
record_type: 'FD',
|
|
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',
|
|
date_format: 'yyyy/MM/dd',
|
|
},
|
|
expected: {
|
|
id: 11,
|
|
record_type: 'LD',
|
|
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',
|
|
date_format: 'dd/MM/yyyy',
|
|
},
|
|
expected: {
|
|
id: 12,
|
|
record_type: 'MS',
|
|
sport_id: 1,
|
|
user: 'admin',
|
|
value: '18 km/h',
|
|
workout_date: '08/07/2019',
|
|
workout_id: 'hvYBqYBRa7wwXpaStWR4V2',
|
|
},
|
|
},
|
|
{
|
|
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',
|
|
date_format: 'MMM. do, yyyy',
|
|
},
|
|
expected: {
|
|
id: 13,
|
|
record_type: 'HA',
|
|
sport_id: 1,
|
|
user: 'admin',
|
|
value: '100 m',
|
|
workout_date: 'Jul. 7th, 2019',
|
|
workout_id: 'hvYBqYBRa7wwXpaStWR4V2',
|
|
},
|
|
},
|
|
]
|
|
testsParams.map((testParams) => {
|
|
it(testParams.description, () => {
|
|
expect(
|
|
formatRecord(
|
|
testParams.inputParams.record,
|
|
testParams.inputParams.timezone,
|
|
false,
|
|
testParams.inputParams.date_format
|
|
)
|
|
).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',
|
|
date_format: 'yyyy/dd/MM',
|
|
},
|
|
expected: {
|
|
id: 9,
|
|
record_type: 'AS',
|
|
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',
|
|
date_format: 'yyyy/dd/MM',
|
|
},
|
|
expected: {
|
|
id: 10,
|
|
record_type: 'FD',
|
|
sport_id: 1,
|
|
user: 'admin',
|
|
value: '11.185 mi',
|
|
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',
|
|
date_format: 'yyyy/dd/MM',
|
|
},
|
|
expected: {
|
|
id: 11,
|
|
record_type: 'LD',
|
|
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',
|
|
date_format: 'yyyy/dd/MM',
|
|
},
|
|
expected: {
|
|
id: 12,
|
|
record_type: 'MS',
|
|
sport_id: 1,
|
|
user: 'admin',
|
|
value: '11.18 mi/h',
|
|
workout_date: '2019/08/07',
|
|
workout_id: 'hvYBqYBRa7wwXpaStWR4V2',
|
|
},
|
|
},
|
|
{
|
|
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',
|
|
date_format: 'yyyy/dd/MM',
|
|
},
|
|
expected: {
|
|
id: 13,
|
|
record_type: 'HA',
|
|
sport_id: 1,
|
|
user: 'admin',
|
|
value: '328.08 ft',
|
|
workout_date: '2019/07/07',
|
|
workout_id: 'hvYBqYBRa7wwXpaStWR4V2',
|
|
},
|
|
},
|
|
]
|
|
testsParams.map((testParams) => {
|
|
it(testParams.description, () => {
|
|
expect(
|
|
formatRecord(
|
|
testParams.inputParams.record,
|
|
testParams.inputParams.timezone,
|
|
true,
|
|
testParams.inputParams.date_format
|
|
)
|
|
).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',
|
|
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',
|
|
date_format: 'yyyy/dd/MM',
|
|
},
|
|
expected: {
|
|
'Cycling (Sport)': {
|
|
color: null,
|
|
label: 'Cycling (Sport)',
|
|
records: [
|
|
{
|
|
id: 9,
|
|
record_type: 'AS',
|
|
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',
|
|
date_format: 'yyyy/dd/MM',
|
|
},
|
|
expected: {
|
|
'Cycling (Sport)': {
|
|
color: null,
|
|
label: 'Cycling (Sport)',
|
|
records: [
|
|
{
|
|
id: 9,
|
|
record_type: 'AS',
|
|
sport_id: 1,
|
|
user: 'admin',
|
|
value: '18 km/h',
|
|
workout_date: '2019/07/07',
|
|
workout_id: 'hvYBqYBRa7wwXpaStWR4V2',
|
|
},
|
|
{
|
|
id: 12,
|
|
record_type: 'MS',
|
|
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',
|
|
sport_id: 2,
|
|
user: 'admin',
|
|
value: '18 km',
|
|
workout_date: '2019/08/07',
|
|
workout_id: 'n6JcLPQt3QtZWFfiSnYm4C',
|
|
},
|
|
],
|
|
},
|
|
},
|
|
},
|
|
]
|
|
testsParams.map((testParams) =>
|
|
it(testParams.description, () => {
|
|
expect(
|
|
getRecordsBySports(
|
|
testParams.input.records,
|
|
translatedSports,
|
|
testParams.input.tz,
|
|
false,
|
|
true,
|
|
testParams.input.date_format
|
|
)
|
|
).toStrictEqual(testParams.expected)
|
|
})
|
|
)
|
|
})
|
|
|
|
describe('getRecordsBySports after conversion', () => {
|
|
const testsParams = [
|
|
{
|
|
description: 'returns empty object if no records',
|
|
input: {
|
|
records: [],
|
|
tz: 'Europe/Paris',
|
|
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',
|
|
date_format: 'yyyy/dd/MM',
|
|
},
|
|
expected: {
|
|
'Cycling (Sport)': {
|
|
color: null,
|
|
label: 'Cycling (Sport)',
|
|
records: [
|
|
{
|
|
id: 9,
|
|
record_type: 'AS',
|
|
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',
|
|
date_format: 'yyyy/dd/MM',
|
|
},
|
|
expected: {
|
|
'Cycling (Sport)': {
|
|
color: null,
|
|
label: 'Cycling (Sport)',
|
|
records: [
|
|
{
|
|
id: 9,
|
|
record_type: 'AS',
|
|
sport_id: 1,
|
|
user: 'admin',
|
|
value: '11.18 mi/h',
|
|
workout_date: '2019/07/07',
|
|
workout_id: 'hvYBqYBRa7wwXpaStWR4V2',
|
|
},
|
|
{
|
|
id: 12,
|
|
record_type: 'MS',
|
|
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',
|
|
sport_id: 2,
|
|
user: 'admin',
|
|
value: '11.185 mi',
|
|
workout_date: '2019/08/07',
|
|
workout_id: 'n6JcLPQt3QtZWFfiSnYm4C',
|
|
},
|
|
],
|
|
},
|
|
},
|
|
},
|
|
]
|
|
testsParams.map((testParams) =>
|
|
it(testParams.description, () => {
|
|
expect(
|
|
getRecordsBySports(
|
|
testParams.input.records,
|
|
translatedSports,
|
|
testParams.input.tz,
|
|
true,
|
|
true,
|
|
testParams.input.date_format
|
|
)
|
|
).toStrictEqual(testParams.expected)
|
|
})
|
|
)
|
|
})
|
|
|
|
describe('getRecordsBySports with HA record', () => {
|
|
const testsParams = [
|
|
{
|
|
description: 'returns empty object if no records',
|
|
input: {
|
|
records: [],
|
|
tz: 'Europe/Paris',
|
|
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',
|
|
date_format: 'yyyy/dd/MM',
|
|
},
|
|
expected: {
|
|
'Cycling (Sport)': {
|
|
color: null,
|
|
label: 'Cycling (Sport)',
|
|
records: [
|
|
{
|
|
id: 9,
|
|
record_type: 'AS',
|
|
sport_id: 1,
|
|
user: 'admin',
|
|
value: '18 km/h',
|
|
workout_date: '2019/07/07',
|
|
workout_id: 'hvYBqYBRa7wwXpaStWR4V2',
|
|
},
|
|
],
|
|
},
|
|
},
|
|
},
|
|
]
|
|
testsParams.map((testParams) =>
|
|
it(testParams.description, () => {
|
|
expect(
|
|
getRecordsBySports(
|
|
testParams.input.records,
|
|
translatedSports,
|
|
testParams.input.tz,
|
|
false,
|
|
false,
|
|
testParams.input.date_format
|
|
)
|
|
).toStrictEqual(testParams.expected)
|
|
})
|
|
)
|
|
})
|