beeeeg update
Some checks failed
Test and deploy staging / staging (push) Has been cancelled

This commit is contained in:
2026-09-23 04:15:10 +00:00
parent 487eff5bb2
commit d0c7b6548b
135 changed files with 9531 additions and 1777 deletions

54
src/lib/seo.test.ts Normal file
View File

@@ -0,0 +1,54 @@
import { describe, expect, it } from 'vitest';
import { getSeo } from './seo';
describe('public page metadata', () => {
it('gives the homepage a descriptive title and production canonical URL', () => {
const seo = getSeo('/');
expect(seo.title).toBe('Projects, lists and writing | Stan Runge');
expect(seo.url).toBe('https://stanrunge.dev/');
expect(seo.indexable).toBe(true);
expect(seo.image).toBe('https://stanrunge.dev/moon.jpg');
});
it('uses article content and its latest edit time', () => {
const article = getSeo('/blog/my-post', {
blogArticle: {
title: 'My post',
content: 'A **specific** article about lists.',
updatedAt: '2026-09-02T00:00:00.000Z'
}
});
expect(article.title).toBe('My post | Stan Runge');
expect(article.description).toBe('A specific article about lists.');
expect(article.type).toBe('article');
expect(article.modifiedAt).toBe('2026-09-02T00:00:00.000Z');
});
it('describes a list using its contents', () => {
const seo = getSeo('/lists/vinyls-to-collect', {
list: {
name: 'Vinyls to collect',
isProgress: true,
items: [{ name: 'Album one' }, { name: 'Album two' }]
}
});
expect(seo.title).toBe('Vinyls to collect | Stan Runge');
expect(seo.description).toContain('Album one, Album two');
expect(seo.indexable).toBe(true);
});
it('keeps private and staging pages out of search results', () => {
expect(getSeo('/login').indexable).toBe(false);
expect(getSeo('/projects/animaldex/register').indexable).toBe(false);
expect(
getSeo('/blog/my-post/edit', {
blogArticle: {
title: 'My post',
content: '',
updatedAt: ''
}
}).indexable
).toBe(false);
expect(getSeo('/projects/catch-em-all', {}, 'STAGING').indexable).toBe(false);
});
});