From dfe2364843543b43cb02738d56fc4d557f4fcaee Mon Sep 17 00:00:00 2001 From: Jiachi Liu Date: Fri, 17 Feb 2023 00:57:07 +0100 Subject: [PATCH] add unit test and fix lint --- .../src/lib/metadata/resolve-metadata.test.ts | 37 +++++++++++++++++++ .../next/src/lib/metadata/resolve-metadata.ts | 1 - .../metadata/resolvers/resolve-title.test.ts | 22 +++++++++++ 3 files changed, 59 insertions(+), 1 deletion(-) create mode 100644 packages/next/src/lib/metadata/resolve-metadata.test.ts create mode 100644 packages/next/src/lib/metadata/resolvers/resolve-title.test.ts diff --git a/packages/next/src/lib/metadata/resolve-metadata.test.ts b/packages/next/src/lib/metadata/resolve-metadata.test.ts new file mode 100644 index 0000000000000..f54c1a159f473 --- /dev/null +++ b/packages/next/src/lib/metadata/resolve-metadata.test.ts @@ -0,0 +1,37 @@ +import { accumulateMetadata, MetadataItems } from './resolve-metadata' + +describe('accumulateMetadata', () => { + describe('merge title', () => { + it('should merge page title', async () => { + const metadataItems: MetadataItems = [ + [{ title: 'root' }, null], + [{ title: 'layout' }, null], + [{ title: 'page' }, null], + ] + const metadata = await accumulateMetadata(metadataItems) + expect(metadata).toMatchObject({ + title: { absolute: 'page', template: null }, + }) + }) + + it('should merge page title', async () => { + const metadataItems: MetadataItems = [ + [{ title: 'root' }, null], + [ + { title: { absolute: 'layout', template: '1st parent layout %s' } }, + null, + ], + [ + { title: { absolute: 'layout', template: '2nd parent layout %s' } }, + null, + ], + [null, null], // same level layout + [{ title: 'page' }, null], + ] + const metadata = await accumulateMetadata(metadataItems) + expect(metadata).toMatchObject({ + title: { absolute: '2nd parent layout page', template: null }, + }) + }) + }) +}) diff --git a/packages/next/src/lib/metadata/resolve-metadata.ts b/packages/next/src/lib/metadata/resolve-metadata.ts index c8e9967ec811d..11b209719dec8 100644 --- a/packages/next/src/lib/metadata/resolve-metadata.ts +++ b/packages/next/src/lib/metadata/resolve-metadata.ts @@ -3,7 +3,6 @@ import type { ResolvedMetadata, ResolvingMetadata, } from './types/metadata-interface' -import type { AbsoluteTemplateString } from './types/metadata-types' import type { MetadataImageModule } from '../../build/webpack/loaders/metadata/types' import { createDefaultMetadata } from './default-metadata' import { resolveOpenGraph, resolveTwitter } from './resolvers/resolve-opengraph' diff --git a/packages/next/src/lib/metadata/resolvers/resolve-title.test.ts b/packages/next/src/lib/metadata/resolvers/resolve-title.test.ts new file mode 100644 index 0000000000000..73f9e4361c116 --- /dev/null +++ b/packages/next/src/lib/metadata/resolvers/resolve-title.test.ts @@ -0,0 +1,22 @@ +import { resolveTitle } from './resolve-title' + +describe('resolveTitle', () => { + it('should resolve nullable template as empty string title', () => { + expect(resolveTitle('', null)).toEqual({ absolute: '', template: null }) + expect(resolveTitle(null, null)).toEqual({ absolute: '', template: null }) + }) + + it('should resolve title with template', () => { + // returned template should equal the input title's template + expect(resolveTitle('title', 'dash %s')).toEqual({ + absolute: 'dash title', + template: null, + }) + expect( + resolveTitle({ default: 'title', template: '%s | absolute' }, 'dash %s') + ).toEqual({ absolute: 'dash title', template: '%s | absolute' }) + expect( + resolveTitle({ default: '', template: '%s | absolute' }, 'fake template') + ).toEqual({ absolute: 'fake template', template: '%s | absolute' }) + }) +})