465 lines
12 KiB
TypeScript
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)
|
|
})
|
|
})
|
|
})
|