import { assertSchema } from '@cypress/schema-tools';
import { render as testRender } from '@testing-library/react';
import mockConsole, { RestoreConsole } from 'jest-mock-console';
import React, { ReactElement } from 'react';
import { HelmetProvider } from 'react-helmet-async';
import {
ArticleJsonLd,
BlogJsonLd,
BlogPostJsonLd,
BookJsonLd,
BreadcrumbJsonLd,
CourseJsonLd,
FAQJsonLd,
LocalBusinessJsonLd,
LogoJsonLd,
NewsArticleJsonLd,
ProductJsonLd,
SitelinksSearchBoxJsonLd,
SpeakableJsonLd,
} from '../..';
import schemas from '../../../e2e/schema';
const render = (ui: ReactElement) =>
testRender(ui, { wrapper: HelmetProvider });
let restoreConsole: RestoreConsole;
beforeAll(() => {
restoreConsole = mockConsole('error');
});
afterAll(() => {
restoreConsole();
});
test('ArticleJsonLd', () => {
render(
,
);
const jsonLD = JSON.parse(
document.querySelector('script')?.innerHTML ?? '{}',
);
assertSchema(schemas)('Article', '1.0.0')(jsonLD);
expect(document.documentElement).toMatchSnapshot();
});
test('NewsArticleJsonLd', () => {
render(
,
);
const jsonLD = JSON.parse(
document.querySelector('script')?.innerHTML ?? '{}',
);
assertSchema(schemas)('NewsArticle', '1.0.0')(jsonLD);
expect(document.documentElement).toMatchSnapshot();
});
test('BlogPostJsonLd', () => {
render(
,
);
const jsonLD = JSON.parse(
document.querySelector('script')?.innerHTML ?? '{}',
);
assertSchema(schemas)('BlogPosting', '1.0.0')(jsonLD);
expect(document.documentElement).toMatchSnapshot();
});
test('BlogJsonLd', () => {
render(
,
);
const jsonLD = JSON.parse(
document.querySelector('script')?.innerHTML ?? '{}',
);
assertSchema(schemas)('Blog', '1.0.0')(jsonLD);
expect(document.documentElement).toMatchSnapshot();
});
test('BreadcrumbJsonLd', () => {
render(
,
);
const jsonLD = JSON.parse(
document.querySelector('script')?.innerHTML ?? '{}',
);
assertSchema(schemas)('Breadcrumb', '1.0.0')(jsonLD);
expect(document.documentElement).toMatchSnapshot();
});
test('BookJsonLd', () => {
render(
,
);
JSON.parse(document.querySelector('script')?.innerHTML ?? '');
expect(document.documentElement).toMatchSnapshot();
});
test('CourseJsonLd', () => {
render(
,
);
const jsonLD = JSON.parse(
document.querySelector('script')?.innerHTML ?? '{}',
);
assertSchema(schemas)('Course', '1.0.0')(jsonLD);
expect(document.documentElement).toMatchSnapshot();
});
test('SpeakableJsonLd', () => {
render();
JSON.parse(document.querySelector('script')?.innerHTML ?? '');
expect(document.documentElement).toMatchSnapshot();
expect(() =>
render(
,
),
).toThrowError();
});
test('LocalBusinessJsonLd', () => {
render(
,
);
const jsonLD = JSON.parse(
document.querySelector('script')?.innerHTML ?? '{}',
);
assertSchema(schemas)('Local Business', '1.0.0')(jsonLD);
expect(document.documentElement).toMatchSnapshot();
});
test('LogoJsonLd', () => {
render(
,
);
const jsonLD = JSON.parse(
document.querySelector('script')?.innerHTML ?? '{}',
);
assertSchema(schemas)('Logo', '1.0.0')(jsonLD);
expect(document.documentElement).toMatchSnapshot();
});
test('ProductJsonLd', () => {
render(
,
);
const jsonLD = JSON.parse(
document.querySelector('script')?.innerHTML ?? '{}',
);
assertSchema(schemas)('Product', '1.0.0')(jsonLD);
expect(document.documentElement).toMatchSnapshot();
});
test('FAQJsonLd', () => {
render(
,
);
JSON.parse(document.querySelector('script')?.innerHTML ?? '');
expect(document.documentElement).toMatchSnapshot();
});
test('SitelinksSearchBoxJsonLd', () => {
render(
,
);
const jsonLD = JSON.parse(
document.querySelector('script')?.innerHTML ?? '{}',
);
assertSchema(schemas)('SitelinksSearchBox', '1.0.0')(jsonLD);
expect(document.documentElement).toMatchSnapshot();
});