UNPKG

pixel-forge

Version:

A comprehensive generator for social media previews, favicons, and visual assets across all platforms

189 lines (188 loc) 10.4 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const globals_1 = require("@jest/globals"); const fs_1 = require("fs"); const path_1 = __importDefault(require("path")); const comprehensive_1 = require("../comprehensive"); const instagram_1 = require("../instagram"); const messaging_1 = require("../messaging"); const platforms_1 = require("../platforms"); const image_processor_1 = require("../../../core/image-processor"); (0, globals_1.describe)('Comprehensive Social Media Generators', () => { const testConfig = { appName: 'Test App', description: 'Test Description', themeColor: '#ffffff', backgroundColor: '#ffffff', output: { path: './test-output', prefix: '/', quality: 90 } }; (0, globals_1.beforeAll)(async () => { // Enable mock mode for testing without ImageMagick (0, image_processor_1.enableMockMode)(); // Create a test image if it doesn't exist const testImageDir = path_1.default.join(__dirname, 'fixtures'); const testImagePath = path_1.default.join(testImageDir, 'test-image.png'); try { await fs_1.promises.mkdir(testImageDir, { recursive: true }); // Check if test image exists, if not create a simple one try { await fs_1.promises.access(testImagePath); } catch { // Create a small empty file as a placeholder await fs_1.promises.writeFile(testImagePath, Buffer.from([ 0x89, 0x50, 0x4E, 0x47, 0x0D, 0x0A, 0x1A, 0x0A, 0x00, 0x00, 0x00, 0x0D, 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x08, 0x06, 0x00, 0x00, 0x00, 0x1F, 0x15, 0xC4, 0x89, 0x00, 0x00, 0x00, 0x0A, 0x49, 0x44, 0x41, 0x54, 0x08, 0xD7, 0x63, 0x60, 0x00, 0x00, 0x00, 0x02, 0x00, 0x01, 0xE2, 0x21, 0xBC, 0x33, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4E, 0x44, 0xAE, 0x42, 0x60, 0x82 ])); } } catch (error) { console.error('Error setting up test image:', error); } }); (0, globals_1.afterAll)(() => { // Disable mock mode (0, image_processor_1.disableMockMode)(); }); (0, globals_1.beforeEach)(async () => { // Create output directory await fs_1.promises.mkdir(testConfig.output.path, { recursive: true }); }); (0, globals_1.afterEach)(async () => { // Clean up output directory await fs_1.promises.rm(testConfig.output.path, { recursive: true, force: true }); }); (0, globals_1.describe)('InstagramGenerator', () => { (0, globals_1.it)('should generate all Instagram formats', async () => { const generator = new instagram_1.InstagramGenerator(path_1.default.join(__dirname, 'fixtures', 'test-image.png'), testConfig); await generator.generate({ includeStories: false, // Skip stories to avoid text overlay includeReels: false // Skip reels to avoid text overlay }); const files = await fs_1.promises.readdir(testConfig.output.path); (0, globals_1.expect)(files).toContain('instagram-square.png'); (0, globals_1.expect)(files).toContain('instagram-portrait.png'); (0, globals_1.expect)(files).toContain('instagram-landscape.png'); }); (0, globals_1.it)('should generate correct meta tags', () => { const generator = new instagram_1.InstagramGenerator(path_1.default.join(__dirname, 'fixtures', 'test-image.png'), testConfig); const metaTags = generator.getMetaTags(); (0, globals_1.expect)(metaTags).toEqual(globals_1.expect.arrayContaining([ globals_1.expect.stringContaining('instagram-square.png'), globals_1.expect.stringContaining('instagram-landscape.png') ])); }); (0, globals_1.it)('should generate Next.js metadata', () => { const generator = new instagram_1.InstagramGenerator(path_1.default.join(__dirname, 'fixtures', 'test-image.png'), testConfig); const metadata = generator.getNextMetadata(); (0, globals_1.expect)(metadata.openGraph?.images).toBeDefined(); (0, globals_1.expect)(metadata.twitter?.images).toBeDefined(); }); }); (0, globals_1.describe)('MessagingGenerator', () => { (0, globals_1.it)('should generate messaging app formats', async () => { const generator = new messaging_1.MessagingGenerator(path_1.default.join(__dirname, 'fixtures', 'test-image.png'), testConfig); await generator.generate({ includeWhatsApp: true, includeDiscord: false, // Skip to avoid text overlay includeTelegram: false, // Skip to avoid text overlay includeWeChat: false }); const files = await fs_1.promises.readdir(testConfig.output.path); (0, globals_1.expect)(files).toContain('messaging-standard.png'); (0, globals_1.expect)(files).toContain('whatsapp-square.png'); (0, globals_1.expect)(files).toContain('whatsapp-link.png'); }); (0, globals_1.it)('should generate messaging meta tags', () => { const generator = new messaging_1.MessagingGenerator(path_1.default.join(__dirname, 'fixtures', 'test-image.png'), testConfig); const metaTags = generator.getMetaTags(); (0, globals_1.expect)(metaTags).toEqual(globals_1.expect.arrayContaining([ globals_1.expect.stringContaining('messaging-standard.png'), globals_1.expect.stringContaining('apple-mobile-web-app-capable') ])); }); }); (0, globals_1.describe)('PlatformGenerator', () => { (0, globals_1.it)('should generate platform-specific formats', async () => { const generator = new platforms_1.PlatformGenerator(path_1.default.join(__dirname, 'fixtures', 'test-image.png'), testConfig); await generator.generate({ includeTikTok: false, // Skip to avoid text overlay includeYouTube: false, // Skip to avoid text overlay includePinterest: false, // Skip to avoid text overlay includeThreads: true // Keep one simple test }); const files = await fs_1.promises.readdir(testConfig.output.path); (0, globals_1.expect)(files).toContain('threads.png'); }); (0, globals_1.it)('should generate platform meta tags', () => { const generator = new platforms_1.PlatformGenerator(path_1.default.join(__dirname, 'fixtures', 'test-image.png'), testConfig); const metaTags = generator.getMetaTags(); (0, globals_1.expect)(metaTags.length).toBeGreaterThan(0); }); }); (0, globals_1.describe)('ComprehensiveSocialGenerator', () => { (0, globals_1.it)('should generate all social media formats', async () => { const generator = new comprehensive_1.ComprehensiveSocialGenerator(path_1.default.join(__dirname, 'fixtures', 'test-image.png'), testConfig); await generator.generate({ includeStandard: true, includeInstagram: false, // Skip Instagram for now due to text overlay issue includeMessaging: false, // Skip messaging for now includePlatforms: false // Skip platforms for now }); const files = await fs_1.promises.readdir(testConfig.output.path); // Standard social (0, globals_1.expect)(files).toContain('og-facebook.png'); (0, globals_1.expect)(files).toContain('twitter-card.png'); (0, globals_1.expect)(files).toContain('og-linkedin.png'); }); (0, globals_1.it)('should respect platform toggles', async () => { const generator = new comprehensive_1.ComprehensiveSocialGenerator(path_1.default.join(__dirname, 'fixtures', 'test-image.png'), testConfig); await generator.generate({ includeStandard: true, includeInstagram: false, includeMessaging: false, includePlatforms: false }); const files = await fs_1.promises.readdir(testConfig.output.path); // Should have standard social (0, globals_1.expect)(files).toContain('og-facebook.png'); }); (0, globals_1.it)('should generate comprehensive meta tags', () => { const generator = new comprehensive_1.ComprehensiveSocialGenerator(path_1.default.join(__dirname, 'fixtures', 'test-image.png'), testConfig); const metaTags = generator.getMetaTags(); // Should include tags from all generators (0, globals_1.expect)(metaTags.length).toBeGreaterThan(5); (0, globals_1.expect)(metaTags.some(tag => tag.includes('og-facebook.png'))).toBe(true); }); (0, globals_1.it)('should generate comprehensive Next.js metadata', () => { const generator = new comprehensive_1.ComprehensiveSocialGenerator(path_1.default.join(__dirname, 'fixtures', 'test-image.png'), testConfig); const metadata = generator.getNextMetadata(); (0, globals_1.expect)(metadata.openGraph?.images).toBeDefined(); (0, globals_1.expect)(metadata.twitter).toBeDefined(); }); (0, globals_1.it)('should return list of generated files', async () => { const generator = new comprehensive_1.ComprehensiveSocialGenerator(path_1.default.join(__dirname, 'fixtures', 'test-image.png'), testConfig); const fileList = await generator.getGeneratedFiles(); (0, globals_1.expect)(fileList).toEqual(globals_1.expect.arrayContaining([ 'facebook.png', 'twitter.png', 'instagram-square.png', 'whatsapp-square.png', 'tiktok.png', 'youtube-thumbnail.png', 'pinterest-pin.png' ])); }); }); });