diff --git a/packages/starlight/__tests__/basics/omit-canonical.test.ts b/packages/starlight/__tests__/basics/omit-canonical.test.ts new file mode 100644 index 00000000000..cce92f5931d --- /dev/null +++ b/packages/starlight/__tests__/basics/omit-canonical.test.ts @@ -0,0 +1,32 @@ +import { expect, test, vi } from 'vitest'; +import { getRouteDataTestContext } from '../test-utils'; +import { generateRouteData } from '../../utils/routing/data'; +import { routes } from '../../utils/routing'; + +vi.mock('astro:content', async () => + (await import('../test-utils')).mockedAstroContent({ + docs: [ + ['index.mdx', { title: 'Home Page' }], + [ + 'environmental-impact.md', + { + title: 'Eco-friendly docs', + description: + 'Learn how Starlight can help you build greener documentation sites and reduce your carbon footprint.', + }, + ], + ], + }) +); + +test('omits link canonical tag when site is not set', () => { + const route = routes[0]!; + const { head } = generateRouteData({ + props: { ...route, headings: [] }, + context: getRouteDataTestContext(undefined, false), + }); + + const canonicalExists = head.some((tag) => tag.tag === 'link' && tag.attrs?.rel === 'canonical'); + + expect(canonicalExists).toBe(false); +}); diff --git a/packages/starlight/__tests__/head/head.test.ts b/packages/starlight/__tests__/head/head.test.ts index c0a3b48ba72..de497819912 100644 --- a/packages/starlight/__tests__/head/head.test.ts +++ b/packages/starlight/__tests__/head/head.test.ts @@ -188,7 +188,15 @@ test('places the default favicon below any user provided icons', () => { expect(defaultFaviconIndex).toBeGreaterThan(userFaviconIndex); }); -function getTestHead(heads: HeadConfig = [], route = routes[0]!): HeadConfig { +test('omits meta og:url tag when site is not set', () => { + const head = getTestHead(undefined, undefined, false); + + const ogUrlExists = head.some((tag) => tag.tag === 'meta' && tag.attrs?.property === 'og:url'); + + expect(ogUrlExists).toBe(false); +}); + +function getTestHead(heads: HeadConfig = [], route = routes[0]!, setSite?: boolean): HeadConfig { return generateRouteData({ props: { ...route, @@ -201,6 +209,9 @@ function getTestHead(heads: HeadConfig = [], route = routes[0]!): HeadConfig { }, }, }, - context: getRouteDataTestContext(), + context: + setSite === undefined + ? getRouteDataTestContext() + : getRouteDataTestContext(undefined, setSite), }).head; } diff --git a/packages/starlight/__tests__/test-utils.ts b/packages/starlight/__tests__/test-utils.ts index 4ec8c6fbc82..9a81795759b 100644 --- a/packages/starlight/__tests__/test-utils.ts +++ b/packages/starlight/__tests__/test-utils.ts @@ -102,11 +102,15 @@ export async function mockedCollectionConfig(docsUserSchema?: Parameters