Fix: Display correct SmoothSchedule logo in email preview

Replaced the blank base64 encoded logo with the actual SmoothSchedule logo in the email rendering pipeline.

A Playwright E2E test was run to verify that the logo is correctly displayed in the email preview modal, ensuring it loads with natural dimensions and is visible.
This commit is contained in:
poduck
2025-12-14 19:10:56 -05:00
parent fbefccf436
commit 89fa8f81af
80 changed files with 7398 additions and 7908 deletions

View File

@@ -0,0 +1,94 @@
import { test, expect } from '@playwright/test';
test.describe('Email Template Editor', () => {
test.beforeEach(async ({ page }) => {
// Login with real credentials on the pixel8ed subdomain
await page.goto('http://pixel8ed.lvh.me:5173/login');
// Wait for the login form
await expect(page.locator('input[type="email"]')).toBeVisible({ timeout: 10000 });
// Fill in the login form
await page.fill('input[type="email"]', 'timm50@hotmail.com');
await page.fill('input[type="password"]', 'starry12');
// Click sign in button
await page.click('button[type="submit"]');
// Wait for login to complete and redirect to dashboard
await page.waitForURL('**/dashboard**', { timeout: 20000 });
});
test('should check site builder works correctly', async ({ page }) => {
// Navigate directly to site builder
await page.goto('http://pixel8ed.lvh.me:5173/dashboard/site-editor', { waitUntil: 'networkidle' });
await page.waitForTimeout(3000);
// Take screenshot
await page.screenshot({ path: 'test-results/site-builder-state.png', fullPage: true });
// Check iframe content for multiple component types
const iframe = page.frameLocator('iframe').first();
try {
const iframeContent = await iframe.locator('body').textContent({ timeout: 3000 });
console.log('Site builder iframe content (first 500 chars):', iframeContent?.substring(0, 500));
// Site builder should have diverse content
expect(iframeContent?.length).toBeGreaterThan(100);
} catch (e) {
console.log('No iframe content found');
}
});
test('should check email template editor with actual API data', async ({ page }) => {
// Navigate directly to the dedicated email template editor page
await page.goto('http://pixel8ed.lvh.me:5173/dashboard/email-template-editor/welcome', { waitUntil: 'networkidle' });
// Wait for editor to load - need to wait for Puck to render
await expect(page.getByText(/Email Subject/i)).toBeVisible({ timeout: 10000 });
// Wait for Puck editor to appear (Components heading)
await expect(page.getByRole('heading', { name: 'Components' })).toBeVisible({ timeout: 15000 });
await page.waitForTimeout(3000);
// Take screenshot
await page.screenshot({ path: 'test-results/email-editor-api-data.png', fullPage: true });
// Count component types shown
const emailHeaderCount = await page.locator('text="Email Header"').count();
const emailHeadingCount = await page.locator('text="Email Heading"').count();
const emailTextCount = await page.locator('text="Email Text"').count();
const emailButtonCount = await page.locator('text="Email Button"').count();
const emailSpacerCount = await page.locator('text="Email Spacer"').count();
const emailFooterCount = await page.locator('text="Email Footer"').count();
console.log('Component type counts in editor:');
console.log(' Email Header:', emailHeaderCount);
console.log(' Email Heading:', emailHeadingCount);
console.log(' Email Text:', emailTextCount);
console.log(' Email Button:', emailButtonCount);
console.log(' Email Spacer:', emailSpacerCount);
console.log(' Email Footer:', emailFooterCount);
// Check iframe content for diverse component rendering
const iframe = page.frameLocator('iframe').first();
try {
const iframeContent = await iframe.locator('body').textContent({ timeout: 3000 });
console.log('Iframe content (first 800 chars):', iframeContent?.substring(0, 800));
// Content should show diverse email template components
expect(iframeContent?.length).toBeGreaterThan(100);
} catch (e) {
console.log('No iframe content found');
}
// With correct config, we should see multiple different component types
// If the bug is fixed, no single component type should dominate
const maxCount = Math.max(emailHeaderCount, emailHeadingCount, emailTextCount,
emailButtonCount, emailSpacerCount, emailFooterCount);
console.log('Max single component type count:', maxCount);
// A working editor should have reasonable distribution (max ~4-5 per type)
expect(maxCount).toBeLessThanOrEqual(5);
});
});