import { parseFooterMessage } from '../../lib/utils'; import { PROJECT_CONFIG } from '../../lib/project.config'; describe('Footer Email Integration', () => { describe('parseFooterMessage', () => { it('should parse footer message with GITURL link', () => { const footerMessage = 'Développé avec ❤️ pour faciliter la démocratie participative - [Logiciel libre et open source](GITURL)'; const repositoryUrl = PROJECT_CONFIG.repository.url; const result = parseFooterMessage(footerMessage, repositoryUrl); expect(result.text).toBe('Développé avec ❤️ pour faciliter la démocratie participative - Logiciel libre et open source'); expect(result.links).toHaveLength(1); expect(result.links[0]).toMatchObject({ text: 'Logiciel libre et open source', url: repositoryUrl }); expect(result.links[0].start).toBeGreaterThan(0); expect(result.links[0].end).toBeGreaterThan(result.links[0].start); }); it('should handle footer message without links', () => { const footerMessage = 'Simple footer message without links'; const repositoryUrl = PROJECT_CONFIG.repository.url; const result = parseFooterMessage(footerMessage, repositoryUrl); expect(result.text).toBe('Simple footer message without links'); expect(result.links).toHaveLength(0); }); it('should handle multiple links in footer message', () => { const footerMessage = 'Check our [docs](GITURL) and [code](GITURL)'; const repositoryUrl = PROJECT_CONFIG.repository.url; const result = parseFooterMessage(footerMessage, repositoryUrl); expect(result.text).toBe('Check our docs and code'); expect(result.links).toHaveLength(2); expect(result.links[0].text).toBe('docs'); expect(result.links[1].text).toBe('code'); expect(result.links[0].url).toBe(repositoryUrl); expect(result.links[1].url).toBe(repositoryUrl); }); it('should handle empty footer message', () => { const footerMessage = ''; const repositoryUrl = PROJECT_CONFIG.repository.url; const result = parseFooterMessage(footerMessage, repositoryUrl); expect(result.text).toBe(''); expect(result.links).toHaveLength(0); }); }); describe('Footer message integration in emails', () => { it('should generate correct footer text for email HTML', () => { const footerMessage = 'Développé avec ❤️ pour faciliter la démocratie participative - [Logiciel libre et open source](GITURL)'; const repositoryUrl = PROJECT_CONFIG.repository.url; const { text: processedFooterText, links } = parseFooterMessage(footerMessage, repositoryUrl); // Vérifier que le texte traité peut être utilisé dans du HTML expect(processedFooterText).toBe('Développé avec ❤️ pour faciliter la démocratie participative - Logiciel libre et open source'); expect(processedFooterText).not.toContain('[Logiciel libre et open source](GITURL)'); expect(processedFooterText).toContain('Logiciel libre et open source'); // Vérifier que les liens sont disponibles pour générer le HTML expect(links).toHaveLength(1); expect(links[0].text).toBe('Logiciel libre et open source'); expect(links[0].url).toBe(repositoryUrl); }); it('should generate HTML with clickable links', () => { const footerMessage = 'Développé avec ❤️ pour faciliter la démocratie participative - [Logiciel libre et open source](GITURL)'; const repositoryUrl = PROJECT_CONFIG.repository.url; const { text: processedFooterText, links } = parseFooterMessage(footerMessage, repositoryUrl); // Simuler la génération du HTML avec les liens let footerHtml = processedFooterText; if (links.length > 0) { links.forEach(link => { const linkHtml = `${link.text}`; footerHtml = footerHtml.replace(link.text, linkHtml); }); } // Vérifier que le HTML contient les liens cliquables expect(footerHtml).toContain(' { const footerMessage = 'Footer with special chars: @#$%^&*() and [link](GITURL)'; const repositoryUrl = PROJECT_CONFIG.repository.url; const { text: processedFooterText } = parseFooterMessage(footerMessage, repositoryUrl); expect(processedFooterText).toBe('Footer with special chars: @#$%^&*() and link'); expect(processedFooterText).toContain('@#$%^&*()'); }); it('should handle personalized message placeholders', () => { const message = 'Bonjour [PRENOM], votre nom est [NOM].'; const firstName = 'Jean'; const lastName = 'Dupont'; const personalizedMessage = message .replace(/\[PRENOM\]/g, firstName) .replace(/\[NOM\]/g, lastName); expect(personalizedMessage).toBe('Bonjour Jean, votre nom est Dupont.'); }); }); });