FitTrackee/fittrackee_client/tests/unit/utils/sports.spec.ts
2023-11-11 17:14:31 +01:00

465 lines
12 KiB
TypeScript

import { describe, it, expect } from 'vitest'
import { sports } from './fixtures'
import createI18n from '@/i18n'
import { ISport, TActiveStatus } from '@/types/sports'
import { translateSports } from '@/utils/sports'
const { t, locale } = createI18n.global
interface IInputParam {
sports: ISport[]
locale: string
activeStatus: TActiveStatus
sportsToInclude: number[]
}
interface ITestParameter {
description: string
inputParams: IInputParam
expected: Record<never, never>[]
}
describe('translateSports', () => {
const testsParams: ITestParameter[] = [
{
description: "returns sorted all translated sports (with 'en' locale)",
inputParams: {
sports,
locale: 'en',
activeStatus: 'all',
sportsToInclude: [],
},
expected: [
{
color: null,
has_workouts: false,
id: 1,
img: '/img/sports/cycling-sport.png',
is_active: true,
is_active_for_user: true,
label: 'Cycling (Sport)',
stopped_speed_threshold: 1,
translatedLabel: 'Cycling (Sport)',
},
{
color: '#000000',
has_workouts: true,
id: 2,
img: '/img/sports/cycling-transport.png',
is_active: false,
is_active_for_user: false,
label: 'Cycling (Transport)',
stopped_speed_threshold: 1,
translatedLabel: 'Cycling (Transport)',
},
{
color: null,
has_workouts: true,
id: 3,
img: '/img/sports/hiking.png',
is_active: true,
is_active_for_user: false,
label: 'Hiking',
stopped_speed_threshold: 0.1,
translatedLabel: 'Hiking',
},
],
},
{
description:
"returns sorted only active translated sports (with 'en' locales)",
inputParams: {
sports,
locale: 'en',
activeStatus: 'is_active',
sportsToInclude: [],
},
expected: [
{
color: null,
has_workouts: false,
id: 1,
img: '/img/sports/cycling-sport.png',
is_active: true,
is_active_for_user: true,
label: 'Cycling (Sport)',
stopped_speed_threshold: 1,
translatedLabel: 'Cycling (Sport)',
},
{
color: null,
has_workouts: true,
id: 3,
img: '/img/sports/hiking.png',
is_active: true,
is_active_for_user: false,
label: 'Hiking',
stopped_speed_threshold: 0.1,
translatedLabel: 'Hiking',
},
],
},
{
description:
"returns sorted translated sports active for user (with 'en' locales)",
inputParams: {
sports,
locale: 'en',
activeStatus: 'is_active_for_user',
sportsToInclude: [],
},
expected: [
{
color: null,
has_workouts: false,
id: 1,
img: '/img/sports/cycling-sport.png',
is_active: true,
is_active_for_user: true,
label: 'Cycling (Sport)',
stopped_speed_threshold: 1,
translatedLabel: 'Cycling (Sport)',
},
],
},
{
description: "returns empty array if not sports (with 'en' locale)",
inputParams: {
sports: [],
locale: 'en',
activeStatus: 'all',
sportsToInclude: [],
},
expected: [],
},
{
description: "returns sorted all translated sports (with 'fr' locale)",
inputParams: {
sports,
locale: 'fr',
activeStatus: 'all',
sportsToInclude: [],
},
expected: [
{
color: null,
has_workouts: true,
id: 3,
img: '/img/sports/hiking.png',
is_active: true,
is_active_for_user: false,
label: 'Hiking',
stopped_speed_threshold: 0.1,
translatedLabel: 'Randonnée',
},
{
color: null,
has_workouts: false,
id: 1,
img: '/img/sports/cycling-sport.png',
is_active: true,
is_active_for_user: true,
label: 'Cycling (Sport)',
stopped_speed_threshold: 1,
translatedLabel: 'Vélo (Sport)',
},
{
color: '#000000',
has_workouts: true,
id: 2,
img: '/img/sports/cycling-transport.png',
is_active: false,
is_active_for_user: false,
label: 'Cycling (Transport)',
stopped_speed_threshold: 1,
translatedLabel: 'Vélo (Transport)',
},
],
},
{
description:
"returns sorted only active translated sports (with 'fr' locales)",
inputParams: {
sports,
locale: 'fr',
activeStatus: 'is_active',
sportsToInclude: [],
},
expected: [
{
color: null,
has_workouts: true,
id: 3,
img: '/img/sports/hiking.png',
is_active: true,
is_active_for_user: false,
label: 'Hiking',
stopped_speed_threshold: 0.1,
translatedLabel: 'Randonnée',
},
{
color: null,
has_workouts: false,
id: 1,
img: '/img/sports/cycling-sport.png',
is_active: true,
is_active_for_user: true,
label: 'Cycling (Sport)',
stopped_speed_threshold: 1,
translatedLabel: 'Vélo (Sport)',
},
],
},
{
description:
"returns sorted translated sports, active for user (with 'fr' locales)",
inputParams: {
sports,
locale: 'fr',
activeStatus: 'is_active_for_user',
sportsToInclude: [],
},
expected: [
{
color: null,
has_workouts: false,
id: 1,
img: '/img/sports/cycling-sport.png',
is_active: true,
is_active_for_user: true,
label: 'Cycling (Sport)',
stopped_speed_threshold: 1,
translatedLabel: 'Vélo (Sport)',
},
],
},
{
description: "returns empty array if not sports (with 'fr' locale)",
inputParams: {
sports: [],
locale: 'fr',
activeStatus: 'all',
sportsToInclude: [],
},
expected: [],
},
{
description:
"returns sorted all translated sports, even with user sports list provided (with 'en' locale)",
inputParams: {
sports,
locale: 'en',
activeStatus: 'all',
sportsToInclude: [2],
},
expected: [
{
color: null,
has_workouts: false,
id: 1,
img: '/img/sports/cycling-sport.png',
is_active: true,
is_active_for_user: true,
label: 'Cycling (Sport)',
stopped_speed_threshold: 1,
translatedLabel: 'Cycling (Sport)',
},
{
color: '#000000',
has_workouts: true,
id: 2,
img: '/img/sports/cycling-transport.png',
is_active: false,
is_active_for_user: false,
label: 'Cycling (Transport)',
stopped_speed_threshold: 1,
translatedLabel: 'Cycling (Transport)',
},
{
color: null,
has_workouts: true,
id: 3,
img: '/img/sports/hiking.png',
is_active: true,
is_active_for_user: false,
label: 'Hiking',
stopped_speed_threshold: 0.1,
translatedLabel: 'Hiking',
},
],
},
{
description:
"returns sorted only translated sports active on application and sports with user workouts (with 'en' locales)",
inputParams: {
sports,
locale: 'en',
activeStatus: 'is_active',
sportsToInclude: [2],
},
expected: [
{
color: null,
has_workouts: false,
id: 1,
img: '/img/sports/cycling-sport.png',
is_active: true,
is_active_for_user: true,
label: 'Cycling (Sport)',
stopped_speed_threshold: 1,
translatedLabel: 'Cycling (Sport)',
},
{
color: '#000000',
has_workouts: true,
id: 2,
img: '/img/sports/cycling-transport.png',
is_active: false,
is_active_for_user: false,
label: 'Cycling (Transport)',
stopped_speed_threshold: 1,
translatedLabel: 'Cycling (Transport)',
},
{
color: null,
has_workouts: true,
id: 3,
img: '/img/sports/hiking.png',
is_active: true,
is_active_for_user: false,
label: 'Hiking',
stopped_speed_threshold: 0.1,
translatedLabel: 'Hiking',
},
],
},
{
description:
"returns empty array, with user sports list provided (with 'en' locale)",
inputParams: {
sports: [],
locale: 'en',
activeStatus: 'all',
sportsToInclude: [2],
},
expected: [],
},
{
description:
"returns sorted all translated sports, even with user sports list provided (with 'fr' locale)",
inputParams: {
sports,
locale: 'fr',
activeStatus: 'all',
sportsToInclude: [2],
},
expected: [
{
color: null,
has_workouts: true,
id: 3,
img: '/img/sports/hiking.png',
is_active: true,
is_active_for_user: false,
label: 'Hiking',
stopped_speed_threshold: 0.1,
translatedLabel: 'Randonnée',
},
{
color: null,
has_workouts: false,
id: 1,
img: '/img/sports/cycling-sport.png',
is_active: true,
is_active_for_user: true,
label: 'Cycling (Sport)',
stopped_speed_threshold: 1,
translatedLabel: 'Vélo (Sport)',
},
{
color: '#000000',
has_workouts: true,
id: 2,
img: '/img/sports/cycling-transport.png',
is_active: false,
is_active_for_user: false,
label: 'Cycling (Transport)',
stopped_speed_threshold: 1,
translatedLabel: 'Vélo (Transport)',
},
],
},
{
description:
"returns sorted only translated sports active on application and sports with user workouts (with 'fr' locales)",
inputParams: {
sports,
locale: 'fr',
activeStatus: 'is_active',
sportsToInclude: [2],
},
expected: [
{
color: null,
has_workouts: true,
id: 3,
img: '/img/sports/hiking.png',
is_active: true,
is_active_for_user: false,
label: 'Hiking',
stopped_speed_threshold: 0.1,
translatedLabel: 'Randonnée',
},
{
color: null,
has_workouts: false,
id: 1,
img: '/img/sports/cycling-sport.png',
is_active: true,
is_active_for_user: true,
label: 'Cycling (Sport)',
stopped_speed_threshold: 1,
translatedLabel: 'Vélo (Sport)',
},
{
color: '#000000',
has_workouts: true,
id: 2,
img: '/img/sports/cycling-transport.png',
is_active: false,
is_active_for_user: false,
label: 'Cycling (Transport)',
stopped_speed_threshold: 1,
translatedLabel: 'Vélo (Transport)',
},
],
},
{
description:
"returns empty array, with user sports list provided (with 'fr' locale)",
inputParams: {
sports: [],
locale: 'fr',
activeStatus: 'all',
sportsToInclude: [2],
},
expected: [],
},
]
testsParams.map((testParams) => {
it(testParams.description, () => {
locale.value = testParams.inputParams.locale
expect(
translateSports(
testParams.inputParams.sports,
t,
testParams.inputParams.activeStatus,
testParams.inputParams.sportsToInclude
)
).toStrictEqual(testParams.expected)
})
})
})