emoji-integration.test.tsβ’5.81 kB
import assert from 'node:assert/strict';
import { describe, test } from 'node:test';
import type { JsonResume } from '../src/json-resume-schema.ts';
import { generateResumePDFBuffer } from '../src/resume-generator.ts';
describe('Emoji Integration in PDFs', () => {
test('renders resume with emoji in name', async () => {
const resume: JsonResume = {
basics: {
name: 'John Doe π¨βπ»',
label: 'Software Engineer',
email: 'john@example.com',
},
};
const pdfBuffer = await generateResumePDFBuffer(resume);
assert.ok(pdfBuffer instanceof Buffer, 'Should return a Buffer');
assert.ok(pdfBuffer.length > 0, 'PDF should have content');
console.log(` π Created: (${pdfBuffer.length} bytes)`);
});
test('renders resume with emoji in skills', async () => {
const resume: JsonResume = {
basics: {
name: 'Jane Developer',
},
skills: [
{
name: 'JavaScript π',
keywords: ['React βοΈ', 'Node.js π’'],
},
{
name: 'Python π',
keywords: ['Django', 'FastAPI β‘'],
},
],
};
const pdfBuffer = await generateResumePDFBuffer(resume);
assert.ok(pdfBuffer instanceof Buffer, 'Should return a Buffer');
assert.ok(pdfBuffer.length > 0, 'PDF should have content');
console.log(` π Created: (${pdfBuffer.length} bytes)`);
});
test('renders resume with emoji in job highlights', async () => {
const resume: JsonResume = {
basics: {
name: 'Alex Engineer',
},
work: [
{
name: 'Tech Corp',
position: 'Senior Developer',
highlights: ['Built scalable systems π', 'Improved performance by 50% β‘', 'Led team of 5 developers π₯'],
},
],
};
const pdfBuffer = await generateResumePDFBuffer(resume);
assert.ok(pdfBuffer instanceof Buffer, 'Should return a Buffer');
assert.ok(pdfBuffer.length > 0, 'PDF should have content');
console.log(` π Created: (${pdfBuffer.length} bytes)`);
});
test('renders resume with various emoji types', async () => {
const resume: JsonResume = {
basics: {
name: 'Emoji Test π―',
label: 'Full Stack Developer',
summary: 'Passionate developer π» with love for clean code β¨',
},
work: [
{
name: 'Startup Inc',
position: 'Lead Developer π¨βπΌ',
summary: 'Leading development team π',
highlights: ['Shipped 10+ features π’', 'Zero bugs in production β
', 'Happy customers π'],
},
],
skills: [
{
name: 'Languages',
keywords: ['TypeScript π·', 'Go πΉ', 'Rust π¦'],
},
],
awards: [
{
title: 'Best Developer π
',
awarder: 'Tech Awards',
summary: 'Recognized for excellence π',
},
],
};
const pdfBuffer = await generateResumePDFBuffer(resume);
assert.ok(pdfBuffer instanceof Buffer, 'Should return a Buffer');
assert.ok(pdfBuffer.length > 0, 'PDF should have content');
console.log(` π Created: (${pdfBuffer.length} bytes)`);
});
test('handles resume without emoji gracefully', async () => {
const resume: JsonResume = {
basics: {
name: 'Plain Name',
label: 'Regular Job',
},
skills: [
{
name: 'Regular Skills',
keywords: ['TypeScript', 'Node.js'],
},
],
};
const pdfBuffer = await generateResumePDFBuffer(resume);
assert.ok(pdfBuffer instanceof Buffer, 'Should return a Buffer');
assert.ok(pdfBuffer.length > 0, 'PDF should have content');
console.log(` π Created: (${pdfBuffer.length} bytes)`);
});
test('renders standard Unicode symbols correctly (Greek, geometric, symbols)', async () => {
const resume: JsonResume = {
basics: {
name: 'Symbol Test Resume',
label: 'Director of Operations',
},
work: [
{
name: 'Example Company',
position: 'Director of Operations',
highlights: ['Ξ Platform Growth: Scaled private photo SaaS from 5 to 40+ schools', 'β³ OKR-Driven Roadmap: Partnered with sales to define outcomes', 'β B2C Revenue System: Launched photo products pipeline', 'β Microservices Architecture: Built 8+ Node.js REST services'],
},
],
};
const pdfBuffer = await generateResumePDFBuffer(resume);
assert.ok(pdfBuffer instanceof Buffer, 'Should return a Buffer');
assert.ok(pdfBuffer.length > 0, 'PDF should have content');
console.log(` π Created: (${pdfBuffer.length} bytes)`);
console.log(' βΉοΈ Greek letters (Ξ), geometric shapes (β³ β), and symbols (β) should render correctly');
});
test('correctly distinguishes between symbols and true emoji', async () => {
const resume: JsonResume = {
basics: {
name: 'Mixed Content Test',
summary: 'This resume tests both standard symbols (Ξ β³ β β) and true emoji (π π π)',
},
work: [
{
name: 'Symbol Company',
position: 'Developer',
highlights: ['Standard symbols: Ξ β³ β β β β
β (should render as black glyphs)', 'True emoji: π π π π (need special rendering)'],
},
],
};
const pdfBuffer = await generateResumePDFBuffer(resume);
assert.ok(pdfBuffer instanceof Buffer, 'Should return a Buffer');
assert.ok(pdfBuffer.length > 0, 'PDF should have content');
console.log(` π Created: (${pdfBuffer.length} bytes)`);
console.log(' βΉοΈ Standard symbols should render, true emoji should be handled specially');
});
});