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.');
});
});
});