Merge branch 'main' into feature/excel
Some checks failed
Build & Deploy / 🔍 Prepare (push) Successful in 9s
CI - Lint, Typecheck & Test / quality-assurance (pull_request) Failing after 1m57s
Build & Deploy / 🧪 QA (push) Failing after 2m6s
Build & Deploy / 🏗️ Build (push) Has been skipped
Build & Deploy / 🚀 Deploy (push) Has been skipped
Build & Deploy / 🧪 Post-Deploy Verification (push) Has been skipped
Build & Deploy / 🔔 Notify (push) Successful in 2s

This commit is contained in:
2026-03-03 13:34:57 +01:00
19 changed files with 615 additions and 83 deletions

View File

@@ -76,19 +76,31 @@ describe('OG Image Generation', () => {
await verifyImageResponse(response);
}, 30000);
it('should generate dynamic blog post OG image', async ({ skip }) => {
it('should generate dynamic blog post OG image with featured photo', async ({ skip }) => {
if (!isServerUp) skip();
// Assuming 'hello-world' or a newly created post slug.
// If it 404s, it still tests the routing, though 200 is expected for an actual post.
const url = `${BASE_URL}/de/blog/hello-world/opengraph-image`;
const response = await fetch(url);
// Even if the post "hello-world" doesn't exist and returns 404 in some environments,
// we should at least check it doesn't 500. We'll accept 200 or 404 as valid "working" states
// vs a 500 compilation/satori error.
expect([200, 404]).toContain(response.status);
if (response.status === 200) {
await verifyImageResponse(response);
// Discover a real blog slug from the sitemap
const sitemapRes = await fetch(`${BASE_URL}/sitemap.xml`);
const sitemapXml = await sitemapRes.text();
const blogMatch = sitemapXml.match(/<loc>[^<]*\/de\/blog\/([^<]+)<\/loc>/);
const slug = blogMatch ? blogMatch[1] : null;
if (!slug) {
console.log('⚠️ No blog post found in sitemap, skipping dynamic OG test');
skip();
return;
}
const url = `${BASE_URL}/de/blog/${slug}/opengraph-image`;
const response = await fetch(url);
await verifyImageResponse(response);
// Verify the image is substantially large (>50KB) to confirm it actually
// contains the featured photo and isn't just a tiny fallback/text-only image
const buffer = await response.clone().arrayBuffer();
expect(
buffer.byteLength,
`OG image for "${slug}" is suspiciously small (${buffer.byteLength} bytes) — likely missing featured photo`,
).toBeGreaterThan(50000);
}, 30000);
});