meilleure gestion des templates d'email (allégés)
This commit is contained in:
120
src/__tests__/lib/footer-email.test.ts
Normal file
120
src/__tests__/lib/footer-email.test.ts
Normal file
@@ -0,0 +1,120 @@
|
||||
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 = `<a href="${link.url}" style="color: #6b7280; text-decoration: underline;" target="_blank" rel="noopener noreferrer">${link.text}</a>`;
|
||||
footerHtml = footerHtml.replace(link.text, linkHtml);
|
||||
});
|
||||
}
|
||||
|
||||
// Vérifier que le HTML contient les liens cliquables
|
||||
expect(footerHtml).toContain('<a href="' + repositoryUrl + '"');
|
||||
expect(footerHtml).toContain('target="_blank"');
|
||||
expect(footerHtml).toContain('rel="noopener noreferrer"');
|
||||
expect(footerHtml).toContain('Logiciel libre et open source');
|
||||
expect(footerHtml).not.toContain('[Logiciel libre et open source](GITURL)');
|
||||
});
|
||||
|
||||
it('should handle special characters in footer message', () => {
|
||||
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.');
|
||||
});
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user