From a669abbfc2b3d78cba376236a9c2e8fc88268f7b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9dric=20FAMIBELLE-PRONZOLA?= Date: Sat, 4 Jul 2026 11:44:32 +0400 Subject: [PATCH] =?UTF-8?q?refactor:=20extraire=20getAlias=20dans=20son=20?= =?UTF-8?q?propre=20module=20et=20le=20s=C3=A9curiser?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/paroles/[slug]/page.js | 2 +- components/akey/an-vedette.js | 2 +- components/awtis/mizik-lyen.js | 2 +- components/teks/lekte.js | 2 +- components/teks/teks-kat.js | 2 +- components/teks/teks.js | 3 +- lib/utils/__tests__/get-alias.test.js | 26 +++++++++++++ lib/utils/format.js | 52 ------------------------- lib/utils/get-alias.js | 55 +++++++++++++++++++++++++++ 9 files changed, 88 insertions(+), 58 deletions(-) create mode 100644 lib/utils/__tests__/get-alias.test.js create mode 100644 lib/utils/get-alias.js diff --git a/app/paroles/[slug]/page.js b/app/paroles/[slug]/page.js index 68f1753..4065cae 100644 --- a/app/paroles/[slug]/page.js +++ b/app/paroles/[slug]/page.js @@ -3,7 +3,7 @@ import Box from '@mui/material/Box' import {jwennTeksEpiSlug} from '../../../lib/oki-api' import AnTeks from '../../../components/teks/an-teks' -import {getAlias} from '../../../lib/utils/format' +import {getAlias} from '../../../lib/utils/get-alias' import {formatKuveti} from '../../../lib/kuveti' import Footer from '../../../components/footer' diff --git a/components/akey/an-vedette.js b/components/akey/an-vedette.js index c22d285..cd4b0d3 100644 --- a/components/akey/an-vedette.js +++ b/components/akey/an-vedette.js @@ -10,7 +10,7 @@ import Chip from '@mui/material/Chip' import Image from 'next/image' import Link from 'next/link' -import {getAlias} from '../../lib/utils/format' +import {getAlias} from '../../lib/utils/get-alias' import {formatKuveti} from '../../lib/kuveti' const IMAGE_URL = process.env.NEXT_PUBLIC_API_URL_ROOT || 'http://localhost:1337' diff --git a/components/awtis/mizik-lyen.js b/components/awtis/mizik-lyen.js index bbd0134..30c4866 100644 --- a/components/awtis/mizik-lyen.js +++ b/components/awtis/mizik-lyen.js @@ -12,7 +12,7 @@ import LibraryMusicIcon from '@mui/icons-material/LibraryMusic' import ExplicitIcon from '@mui/icons-material/Explicit' import {esBrandNew} from '../../lib/date' -import {getAlias} from '../../lib/utils/format' +import {getAlias} from '../../lib/utils/get-alias' const apiUrl = process.env.NEXT_PUBLIC_API_URL_ROOT || 'http://localhost:1337' diff --git a/components/teks/lekte.js b/components/teks/lekte.js index 9cee8ee..c17ebc4 100644 --- a/components/teks/lekte.js +++ b/components/teks/lekte.js @@ -16,7 +16,7 @@ import Image from 'next/image' import {grey} from '@mui/material/colors' import {Link} from '@mui/material' -import {getAlias} from '../../lib/utils/format' +import {getAlias} from '../../lib/utils/get-alias' import {formatKuveti} from '../../lib/kuveti' const IMAGE_URL = process.env.NEXT_PUBLIC_API_URL_ROOT || 'http://localhost:1337' diff --git a/components/teks/teks-kat.js b/components/teks/teks-kat.js index 444eef8..7c25595 100644 --- a/components/teks/teks-kat.js +++ b/components/teks/teks-kat.js @@ -15,7 +15,7 @@ import Grid from '@mui/material/Grid' import ExplicitIcon from '@mui/icons-material/Explicit' import {styled} from '@mui/material/styles' -import {getAlias} from '../../lib/utils/format' +import {getAlias} from '../../lib/utils/get-alias' import {formatKuveti} from '../../lib/kuveti' const PREFIX = 'teks-kat' diff --git a/components/teks/teks.js b/components/teks/teks.js index f96b5c4..7306eda 100644 --- a/components/teks/teks.js +++ b/components/teks/teks.js @@ -18,7 +18,8 @@ import ArrowForwardIosIcon from '@mui/icons-material/ArrowForwardIos' import Image from 'next/image' -import {formatJsonString, getAlias} from '../../lib/utils/format' +import {formatJsonString} from '../../lib/utils/format' +import {getAlias} from '../../lib/utils/get-alias' import {formatKuveti} from '../../lib/kuveti' import LicenseModal from '../cc/license-modal' diff --git a/lib/utils/__tests__/get-alias.test.js b/lib/utils/__tests__/get-alias.test.js new file mode 100644 index 0000000..537815d --- /dev/null +++ b/lib/utils/__tests__/get-alias.test.js @@ -0,0 +1,26 @@ +import {describe, it, expect} from 'vitest' +import {getAlias} from '../get-alias' + +describe('getAlias', () => { + it('retourne une chaîne vide sans planter quand artistes est undefined', () => { + expect(getAlias(undefined)).toBe('') + }) + + it('retourne une chaîne vide sans planter quand artistes est un tableau vide', () => { + expect(getAlias([])).toBe('') + }) + + it('retourne l\'alias unique quand il n\'y a qu\'un artiste', () => { + expect(getAlias([{id: 1, alias: 'Foo'}])).toBe('Foo') + }) + + it('ignore un id de priorité qui ne correspond à aucun artiste (donnée obsolète)', () => { + const artistes = [{id: 1, alias: 'Foo'}, {id: 2, alias: 'Bar'}] + expect(getAlias(artistes, '1-99-2')).toBe('Foo et Bar') + }) + + it('formate plusieurs artistes selon la priorité fournie', () => { + const artistes = [{id: 1, alias: 'Foo'}, {id: 2, alias: 'Bar'}] + expect(getAlias(artistes, '2-1')).toBe('Bar et Foo') + }) +}) diff --git a/lib/utils/format.js b/lib/utils/format.js index e798515..42c4117 100644 --- a/lib/utils/format.js +++ b/lib/utils/format.js @@ -1,54 +1,2 @@ -import slugify from 'slugify' - export const formatJsonString = stringToFormat => stringToFormat.split('\n').map((string, index) =>
{`${string}`}
) // eslint-disable-line react/no-array-index-key - -export const getAlias = (artistes, priorite = null, enhanced = false) => { - if (artistes.length === 1 && !enhanced) { - return artistes[0].alias - } - - if (artistes.length === 1 && enhanced) { - return [{ - type: 'element', - value: artistes[0].alias - }] - } - - const alias = [] - const splittedPriority = priorite ? priorite.split('-') - .map(p => Number.parseInt(p, 10)) : null - - if (splittedPriority) { - for (const element of splittedPriority) { - const foundedArtistes = artistes.find(({id}) => id === element) - alias.push(foundedArtistes.alias) - } - } else { - for (const artiste of artistes) { - alias.push(artiste.alias) - } - } - - if (enhanced) { - const list = new Intl.ListFormat('fr').formatToParts(alias) - return list - } - - return new Intl.ListFormat('fr').format(alias) -} - -function separateString(inputString) { - const regex = /\s*,\s*|\s+et\s+/ - const strings = inputString.split(regex).map(element => element.trim()) - return strings -} - -export const getAliasObject = inputString => { - const awtis = separateString(inputString) - - return awtis.map(alias => ({ - alias, - slug: slugify(alias, {lower: true, remove: /[*#+~.()'"!:@]/g}) - })) -} diff --git a/lib/utils/get-alias.js b/lib/utils/get-alias.js new file mode 100644 index 0000000..f968fb5 --- /dev/null +++ b/lib/utils/get-alias.js @@ -0,0 +1,55 @@ +import slugify from 'slugify' + +export const getAlias = (artistes, priorite = null, enhanced = false) => { + const safeArtistes = artistes || [] + + if (safeArtistes.length === 1 && !enhanced) { + return safeArtistes[0].alias + } + + if (safeArtistes.length === 1 && enhanced) { + return [{ + type: 'element', + value: safeArtistes[0].alias + }] + } + + const alias = [] + const splittedPriority = priorite ? priorite.split('-') + .map(p => Number.parseInt(p, 10)) : null + + if (splittedPriority) { + for (const element of splittedPriority) { + const foundedArtistes = safeArtistes.find(({id}) => id === element) + if (foundedArtistes) { + alias.push(foundedArtistes.alias) + } + } + } else { + for (const artiste of safeArtistes) { + alias.push(artiste.alias) + } + } + + if (enhanced) { + const list = new Intl.ListFormat('fr').formatToParts(alias) + return list + } + + return new Intl.ListFormat('fr').format(alias) +} + +function separateString(inputString) { + const regex = /\s*,\s*|\s+et\s+/ + const strings = inputString.split(regex).map(element => element.trim()) + return strings +} + +export const getAliasObject = inputString => { + const awtis = separateString(inputString) + + return awtis.map(alias => ({ + alias, + slug: slugify(alias, {lower: true, remove: /[*#+~.()'"!:@]/g}) + })) +}