import { WIKI_TOPICS, WikiContributionDraft, refuseWikiContribution, } from './wiki-contribution-policy'; /** * Le corps d'une page valide : assez long, franchement international, sans * conseil FCL ni donnee de compte. Chaque cas ne modifie que ce qu'il teste. */ const BODY = `Le connaissement maritime, ou bill of lading, est le document qui matérialise le contrat de transport international. Il vaut titre de propriété de la marchandise et preuve de la prise en charge par le transitaire. Il est émis en trois originaux négociables, dont la remise conditionne la livraison au destinataire au port de destination. Un connaissement propre ne porte aucune réserve sur l'état du cargo au chargement.`; const draft = (overrides: Partial = {}): WikiContributionDraft => ({ topic: 'documents-transport', title: 'Le connaissement maritime', section: 'Rôle et originaux', body: BODY, ...overrides, }); describe('refuseWikiContribution', () => { it('accepts a page of general international-transport knowledge', () => { expect(refuseWikiContribution(draft())).toBeNull(); }); it('accepts every published topic', () => { for (const topic of WIKI_TOPICS) { expect(refuseWikiContribution(draft({ topic }))).toBeNull(); } }); it('refuses a topic outside the wiki', () => { expect(refuseWikiContribution(draft({ topic: 'divers' }))).toBe('unknown-topic'); }); it('refuses a remark passed off as a page', () => { expect(refuseWikiContribution(draft({ body: 'Le connaissement fait foi.' }))).toBe('too-thin'); }); /* ---------------------------------------------------------------------- */ /* Le FCL */ /* ---------------------------------------------------------------------- */ it.each([ 'Nous recommandons le FCL au-delà de 15 m³.', 'Il est préférable de choisir un conteneur complet pour ce type de cargo.', 'Au-delà de ce volume, le FCL est plus économique sur la liaison maritime.', 'For larger cargo you should use FCL instead of consolidation.', 'Un conteneur dédié reste la meilleure option pour un export fragile.', ])('refuses FCL advocacy: %s', sentence => { expect(refuseWikiContribution(draft({ body: `${BODY} ${sentence}` }))).toBe('fcl-advocacy'); }); it('allows FCL to be explained without being advised', () => { const body = `${BODY} Le FCL désigne un conteneur complet chargé pour un seul expéditeur. Xpeditis opère en groupage LCL : les marchandises de plusieurs clients partagent le conteneur.`; expect(refuseWikiContribution(draft({ body }))).toBeNull(); }); it('does not refuse an LCL recommendation that merely names FCL elsewhere', () => { const body = `${BODY}\nLe FCL est un conteneur complet. Le groupage LCL est recommandé pour les envois de moins de 15 m³.`; expect(refuseWikiContribution(draft({ body }))).toBeNull(); }); /* ---------------------------------------------------------------------- */ /* Le particulier */ /* ---------------------------------------------------------------------- */ it.each([ ['a booking number', 'La réservation WCM-2026-004512 illustre ce cas.'], ['an e-mail address', 'Écrivez à jean.martin@acme-import.fr pour les originaux.'], ['a customer file', 'Pour votre dossier, le connaissement a été émis le 3 mars.'], ['a rate', 'Le fret maritime revient à 48 EUR par CBM sur cette liaison.'], ['a price in symbols', 'Comptez $3,400 de THC au départ.'], ])('refuses account-specific content — %s', (_label, sentence) => { expect(refuseWikiContribution(draft({ body: `${BODY} ${sentence}` }))).toBe('account-specific'); }); /* ---------------------------------------------------------------------- */ /* Le perimetre */ /* ---------------------------------------------------------------------- */ it('refuses content that is not about international transport', () => { const body = "La tenue d'une comptabilité analytique suppose de distinguer les charges directes des charges indirectes, puis de les répartir par centre d'analyse selon des clés stables d'un exercice à l'autre. Cette méthode éclaire la marge dégagée par chaque activité de l'entreprise, sans rien changer aux comptes publiés."; expect(refuseWikiContribution(draft({ body, title: 'Comptabilité analytique' }))).toBe( 'not-international' ); }); it('checks the title and the section, not only the body', () => { expect(refuseWikiContribution(draft({ title: 'Pourquoi préférer le FCL' }))).toBe( 'fcl-advocacy' ); expect(refuseWikiContribution(draft({ section: 'Votre dossier en cours' }))).toBe( 'account-specific' ); }); });