content: integrate approved project evidence
This commit is contained in:
@@ -8,6 +8,8 @@ import ProjectMediaGallery from '@/components/ProjectMediaGallery.vue';
|
||||
import { useLazyMedia } from '@/composables/useLazyMedia';
|
||||
import { parsePortfolioContent, parsePublicAssetManifest } from '@/content/schemas';
|
||||
import type { MediaPresentation, ProductionInputs, PublicAssetManifest } from '@/content/types';
|
||||
import approvedContentJson from '@/../content/public/portfolio-content.json';
|
||||
import approvedManifestJson from '@/../content/public/asset-manifest.json';
|
||||
|
||||
const sha = 'a'.repeat(64);
|
||||
const manifest: PublicAssetManifest = {
|
||||
@@ -226,6 +228,34 @@ describe('ProjectMedia', () => {
|
||||
});
|
||||
|
||||
describe('ProjectMediaGallery', () => {
|
||||
it('renders every approved project still with intrinsic, lazy, contextual semantics', () => {
|
||||
const content = parsePortfolioContent(structuredClone(approvedContentJson));
|
||||
const approvedManifest = parsePublicAssetManifest(structuredClone(approvedManifestJson));
|
||||
const approvedInputs = { manifest: approvedManifest, content, site: {} } as unknown as ProductionInputs;
|
||||
const projects = [...content.projects.selected, ...content.projects.additional];
|
||||
const mediaProjects = projects.filter((project) => project.media !== undefined);
|
||||
|
||||
expect(mediaProjects.map(({ id }) => id)).toEqual([
|
||||
'private-medication-tracker',
|
||||
'opinion-dynamics-simulation',
|
||||
'currency-converter',
|
||||
]);
|
||||
|
||||
const wrappers = mediaProjects.map((project) => mount(ProjectMediaGallery, {
|
||||
props: { media: project.media ?? [], layout: project.mediaLayout ?? 'single' },
|
||||
global: { provide: { [productionInputsKey as symbol]: approvedInputs } },
|
||||
}));
|
||||
const images = wrappers.flatMap((wrapper) => wrapper.findAll('img'));
|
||||
|
||||
expect(images).toHaveLength(6);
|
||||
expect(images.every((image) => image.attributes('loading') === 'lazy')).toBe(true);
|
||||
expect(images.every((image) => image.attributes('decoding') === 'async')).toBe(true);
|
||||
expect(images.every((image) => Number(image.attributes('width')) > 0 && Number(image.attributes('height')) > 0)).toBe(true);
|
||||
expect(wrappers[0]!.text()).toMatch(/fictional demo state|private self-hosted system/iu);
|
||||
expect(wrappers[1]!.findAll('[data-testid="chart-variables"]')).toHaveLength(2);
|
||||
expect(wrappers[1]!.findAll('table')).toHaveLength(1);
|
||||
});
|
||||
|
||||
it('keeps three portrait images lazy, contextual, and in their supplied order', () => {
|
||||
const wrapper = mountGallery([
|
||||
{ kind: 'image', assetId: 'project-image', alt: 'Synthetic profile screen.', caption: 'Fictional demo profile.' },
|
||||
|
||||
@@ -39,7 +39,10 @@ describe('client production-input snapshot', () => {
|
||||
|
||||
it('rejects a supplied asset reference absent from the supplied public manifest', () => {
|
||||
const invalid = validInputs();
|
||||
invalid.content.projects.selected[0]!.assetIds = ['unmanifested-snapshot-asset'];
|
||||
const medication = invalid.content.projects.selected[0]!;
|
||||
medication.assetIds = medication.assetIds.map((assetId) =>
|
||||
assetId === 'medication-mobile-logs' ? 'unmanifested-snapshot-asset' : assetId);
|
||||
medication.media![0]!.assetId = 'unmanifested-snapshot-asset';
|
||||
|
||||
expect(() => readProductionInputsSnapshot(snapshotDocument(invalid))).toThrow(/unmanifested asset reference/i);
|
||||
});
|
||||
|
||||
@@ -39,7 +39,8 @@ describe('safe metadata', () => {
|
||||
'Portfolio of Luca Pîslaru, a Bucharest-based System Administrator and Full-Stack Developer working across Linux infrastructure and end-to-end software delivery.',
|
||||
);
|
||||
expect(metadata.canonicalUrl).toBe('https://portfolio.example.test/');
|
||||
expect(metadata.openGraph.image).toBeUndefined();
|
||||
const previewAsset = manifest.assets.find(({ id }) => id === content.metadata.socialPreviewAssetId)!;
|
||||
expect(metadata.openGraph.image).toBe(`https://portfolio.example.test/assets/${previewAsset.fileName}`);
|
||||
expect(metadata.jsonLd).toEqual({
|
||||
'@context': 'https://schema.org',
|
||||
'@type': 'ProfilePage',
|
||||
|
||||
Reference in New Issue
Block a user