gatsby-plugin-next-seo
Version:
SEO plugin for Gatsby projects
594 lines (567 loc) • 32.3 kB
JavaScript
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
var _react = require("@testing-library/react");
var _react2 = _interopRequireDefault(require("react"));
var _reactHelmetAsync = require("react-helmet-async");
var _baseSeo = require("../base-seo");
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
var SEO = {
title: 'This is a test title.',
base: {
href: 'www.test.com',
target: '_blank'
},
language: 'en-GB',
description: 'This is a test description.',
canonical: 'https://www.canonical.ie',
defaultOpenGraphImageHeight: 1200,
defaultOpenGraphImageWidth: 1200,
mobileAlternate: {
media: 'only screen and (max-width: 640px)',
href: 'https://m.canonical.ie'
},
languageAlternates: [{
hrefLang: 'de-AT',
href: 'https://www.canonical.ie/de'
}, {
hrefLang: 'sk-SK',
href: 'https://www.canonical.ie/sk'
}],
openGraph: {
type: 'website',
locale: 'en_IE',
url: 'https://www.url.ie',
title: 'Open graph title',
description: 'This is testing og:description.',
images: [{
url: 'https://www.test.ie/image-01.jpg',
width: 800,
height: 600,
alt: 'Alt text right here'
}, {
url: 'https://www.test.ie/image-02.jpg'
}, {
url: 'https://www.test.ie/image-03.jpg'
}, {
url: 'https://www.test.ie/image-04.jpg'
}],
site_name: 'SiteName'
},
twitter: {
handle: '@handle',
site: '@site',
cardType: 'summary_large_image'
},
facebook: {
appId: '1234567890'
}
};
var render = function render(ui) {
return (0, _react.render)(ui, {
wrapper: _reactHelmetAsync.HelmetProvider
});
};
beforeEach(_baseSeo.__resetDefaults);
test('renders correctly', function () {
render( /*#__PURE__*/_react2["default"].createElement(_baseSeo.BaseSeo, SEO));
expect(document.documentElement).toMatchSnapshot();
});
test('returns full array for default seo object', function () {
var _document$querySelect, _document$querySelect2, _SEO$base, _document$querySelect3, _SEO$base2;
render( /*#__PURE__*/_react2["default"].createElement(_baseSeo.BaseSeo, SEO));
expect((_document$querySelect = document.querySelector('html')) === null || _document$querySelect === void 0 ? void 0 : _document$querySelect.getAttribute('lang')).toBe(SEO.language);
expect((_document$querySelect2 = document.querySelector('base')) === null || _document$querySelect2 === void 0 ? void 0 : _document$querySelect2.getAttribute('href')).toBe(SEO === null || SEO === void 0 ? void 0 : (_SEO$base = SEO.base) === null || _SEO$base === void 0 ? void 0 : _SEO$base.href);
expect((_document$querySelect3 = document.querySelector('base')) === null || _document$querySelect3 === void 0 ? void 0 : _document$querySelect3.getAttribute('target')).toBe(SEO === null || SEO === void 0 ? void 0 : (_SEO$base2 = SEO.base) === null || _SEO$base2 === void 0 ? void 0 : _SEO$base2.target);
var title = (0, _react.getByText)(document.documentElement, function (content, element) {
return element.tagName.toLowerCase() === 'title' && content.startsWith("".concat(SEO.title));
});
var index = document.documentElement.querySelectorAll('meta[content="index,follow"]');
var description = document.documentElement.querySelectorAll("meta[content=\"".concat(SEO.description, "\"]"));
var descriptionTag = document.documentElement.querySelectorAll('meta[name="description"]');
var twitterCard = document.documentElement.querySelectorAll('meta[content="summary_large_image"]');
var facebookAppId = document.documentElement.querySelectorAll('meta[property="fb:app_id"]');
var twitterCardTag = document.documentElement.querySelectorAll('meta[name="twitter:card"]');
var twitterHandle = document.documentElement.querySelectorAll("meta[content=\"".concat(SEO.twitter.handle, "\"]"));
var twitterHandleTag = document.documentElement.querySelectorAll('meta[name="twitter:creator"]');
var twitterSite = document.documentElement.querySelectorAll("meta[content=\"".concat(SEO.twitter.site, "\"]"));
var twitterSiteTag = document.documentElement.querySelectorAll('meta[name="twitter:site"]');
var ogUrl = document.documentElement.querySelectorAll("meta[content=\"".concat(SEO.openGraph.url, "\"]"));
var ogUrlTag = document.documentElement.querySelectorAll('meta[property="og:url"]');
var ogType = document.documentElement.querySelectorAll("meta[content=\"".concat(SEO.openGraph.type, "\"]"));
var ogTypeTag = document.documentElement.querySelectorAll('meta[property="og:type"]');
var ogTitle = document.documentElement.querySelectorAll("meta[content=\"".concat(SEO.openGraph.title, "\"]"));
var ogTitleTag = document.documentElement.querySelectorAll('meta[property="og:title"]');
var ogDescription = document.documentElement.querySelectorAll("meta[content=\"".concat(SEO.openGraph.description, "\"]"));
var ogDescriptionTag = document.documentElement.querySelectorAll('meta[property="og:description"]');
var ogImage00 = document.documentElement.querySelectorAll("meta[content=\"".concat(SEO.openGraph.images[0].url, "\"]"));
var ogImage01 = document.documentElement.querySelectorAll("meta[content=\"".concat(SEO.openGraph.images[1].url, "\"]"));
var ogImage02 = document.documentElement.querySelectorAll("meta[content=\"".concat(SEO.openGraph.images[2].url, "\"]"));
var ogImage03 = document.documentElement.querySelectorAll("meta[content=\"".concat(SEO.openGraph.images[3].url, "\"]"));
var ogDefaultImageWidthHeight = document.documentElement.querySelectorAll("meta[content=\"".concat(SEO.defaultOpenGraphImageHeight, "\"]"));
var ogSetImageHeight = document.documentElement.querySelectorAll("meta[content=\"".concat(SEO.openGraph.images[0].height, "\"]"));
var ogSetImageWidth = document.documentElement.querySelectorAll("meta[content=\"".concat(SEO.openGraph.images[0].width, "\"]"));
var ogSetImageAlt = document.documentElement.querySelectorAll("meta[content=\"".concat(SEO.openGraph.images[0].alt, "\"]"));
var ogLocale = document.documentElement.querySelectorAll("meta[content=\"".concat(SEO.openGraph.locale, "\"]"));
var ogSiteName = document.documentElement.querySelectorAll("meta[content=\"".concat(SEO.openGraph.site_name, "\"]"));
var mobileAlternateTag = document.documentElement.querySelectorAll('link[rel="alternate"][media]');
var mobileAlternateHref = document.documentElement.querySelectorAll("link[href=\"".concat(SEO.mobileAlternate.href, "\"]"));
var mobileAlternateMedia = document.documentElement.querySelectorAll("link[media=\"".concat(SEO.mobileAlternate.media, "\"]"));
expect(Array.from(mobileAlternateTag).length).toBe(1);
expect(Array.from(mobileAlternateHref).length).toBe(1);
expect(Array.from(mobileAlternateMedia).length).toBe(1);
var languageAlternatesTags = document.documentElement.querySelectorAll('link[rel="alternate"][hrefLang]');
expect(Array.from(languageAlternatesTags).length).toBe(SEO.languageAlternates.length);
SEO.languageAlternates.forEach(function (_, idx) {
var languageAlternateHref = document.documentElement.querySelectorAll("link[href=\"".concat(SEO.languageAlternates[idx].href, "\"]"));
var languageAlternateHrefLang = document.documentElement.querySelectorAll("link[hrefLang=\"".concat(SEO.languageAlternates[idx].hrefLang, "\"]"));
expect(Array.from(languageAlternateHref).length).toBe(1);
expect(Array.from(languageAlternateHrefLang).length).toBe(1);
});
expect(title).toBeDefined();
expect(Array.from(index).length).toBe(2);
expect(Array.from(description).length).toBe(1);
expect(Array.from(descriptionTag).length).toBe(1);
expect(Array.from(facebookAppId).length).toBe(1);
expect(Array.from(twitterCard).length).toBe(1);
expect(Array.from(twitterCardTag).length).toBe(1);
expect(Array.from(twitterHandle).length).toBe(1);
expect(Array.from(twitterHandleTag).length).toBe(1);
expect(Array.from(twitterSite).length).toBe(1);
expect(Array.from(twitterSiteTag).length).toBe(1);
expect(Array.from(ogUrl).length).toBe(1);
expect(Array.from(ogUrlTag).length).toBe(1);
expect(Array.from(ogType).length).toBe(1);
expect(Array.from(ogTypeTag).length).toBe(1);
expect(Array.from(ogTitle).length).toBe(1);
expect(Array.from(ogTitleTag).length).toBe(1);
expect(Array.from(ogDescription).length).toBe(1);
expect(Array.from(ogDescriptionTag).length).toBe(1);
expect(Array.from(ogImage00).length).toBe(1);
expect(Array.from(ogImage01).length).toBe(1);
expect(Array.from(ogImage02).length).toBe(1);
expect(Array.from(ogImage03).length).toBe(1);
expect(Array.from(ogDefaultImageWidthHeight).length).toBe(6);
expect(Array.from(ogSetImageHeight).length).toBe(1);
expect(Array.from(ogSetImageWidth).length).toBe(1);
expect(Array.from(ogSetImageAlt).length).toBe(1);
expect(Array.from(ogLocale).length).toBe(1);
expect(Array.from(ogSiteName).length).toBe(1);
});
test('correctly sets noindex', function () {
var overrideProps = _objectSpread(_objectSpread({}, SEO), {}, {
noindex: true
});
render( /*#__PURE__*/_react2["default"].createElement(_baseSeo.BaseSeo, overrideProps));
var index = document.documentElement.querySelectorAll('meta[content="index,follow"]');
var noindex = document.documentElement.querySelectorAll('meta[content="noindex,follow"]');
expect(Array.from(index).length).toBe(0);
expect(Array.from(noindex).length).toBe(2);
});
test('correctly sets nofollow', function () {
var overrideProps = _objectSpread(_objectSpread({}, SEO), {}, {
nofollow: true
});
render( /*#__PURE__*/_react2["default"].createElement(_baseSeo.BaseSeo, overrideProps));
var indexfollow = document.documentElement.querySelectorAll('meta[content="index,follow"]');
var indexnofollow = document.documentElement.querySelectorAll('meta[content="index,nofollow"]');
expect(Array.from(indexfollow).length).toBe(0);
expect(Array.from(indexnofollow).length).toBe(2);
});
test('correctly sets noindex, nofollow', function () {
var overrideProps = _objectSpread(_objectSpread({}, SEO), {}, {
noindex: true,
nofollow: true
});
render( /*#__PURE__*/_react2["default"].createElement(_baseSeo.BaseSeo, overrideProps));
var indexfollow = document.documentElement.querySelectorAll('meta[content="index,follow"]');
var noindexnofollow = document.documentElement.querySelectorAll('meta[content="noindex,nofollow"]');
expect(Array.from(indexfollow).length).toBe(0);
expect(Array.from(noindexnofollow).length).toBe(2);
});
test('displays title with titleTemplate integrated', function () {
var template = 'Gatsby SEO';
var overrideProps = _objectSpread(_objectSpread({}, SEO), {}, {
titleTemplate: "".concat(template, " | %s")
});
render( /*#__PURE__*/_react2["default"].createElement(_baseSeo.BaseSeo, overrideProps));
var title = (0, _react.getByText)(document.documentElement, function (content, element) {
return element.tagName.toLowerCase() === 'title' && content.startsWith(template);
});
expect(title.innerHTML).toMatch("".concat(template, " | ").concat(SEO.title));
});
test('og:title fallback uses titleTemplate', function () {
var template = 'Gatsby SEO';
var overrideProps = _objectSpread(_objectSpread({}, SEO), {}, {
titleTemplate: "".concat(template, " | %s"),
openGraph: {}
});
render( /*#__PURE__*/_react2["default"].createElement(_baseSeo.BaseSeo, overrideProps));
var ogTitleTag = document.documentElement.querySelector('meta[property="og:title"]');
expect(ogTitleTag).toBeTruthy();
expect(ogTitleTag === null || ogTitleTag === void 0 ? void 0 : ogTitleTag.getAttribute('content')).toMatch("".concat(template, " | ").concat(SEO.title));
});
test('BaseSeo respects the nesting/overriding behaviour of React Helmet', function () {
var _document$querySelect4, _document$querySelect5;
var template = 'Gatsby SEO';
var title = 'Example Title';
var exampleUrlBase = 'https://example.com';
var exampleUrlOverride = 'https://examp2le.com';
var exampleBaseHrefOverride = 'https://overridetest.com';
var exampleBaseTargetOverride = '_self';
render( /*#__PURE__*/_react2["default"].createElement(_react2["default"].Fragment, null, /*#__PURE__*/_react2["default"].createElement(_baseSeo.BaseSeo, {
base: {
href: exampleBaseHrefOverride,
target: exampleBaseTargetOverride
},
title: title,
titleTemplate: "".concat(template, " | %s"),
openGraph: {
url: exampleUrlBase
}
}), /*#__PURE__*/_react2["default"].createElement("div", null, /*#__PURE__*/_react2["default"].createElement("div", null, /*#__PURE__*/_react2["default"].createElement(_baseSeo.BaseSeo, {
openGraph: {
url: exampleUrlOverride
}
}))))); // <title> tag is not overridden
var titleElement = (0, _react.getByText)(document.documentElement, function (content, element) {
return element.tagName.toLowerCase() === 'title' && content.startsWith(template);
});
expect(titleElement.innerHTML).toMatch("".concat(template, " | ").concat(title)); // og:title is not overridden, uses fallback with titleTemplate
var ogTitleTag = document.documentElement.querySelector('meta[property="og:title"]');
expect(ogTitleTag).toBeTruthy();
expect(ogTitleTag === null || ogTitleTag === void 0 ? void 0 : ogTitleTag.getAttribute('content')).toMatch("".concat(template, " | ").concat(title)); // og:url is overriden
var ogUrlTag = document.documentElement.querySelector('meta[property="og:url"]');
expect(ogUrlTag).toBeTruthy();
expect(ogUrlTag === null || ogUrlTag === void 0 ? void 0 : ogUrlTag.getAttribute('content')).toEqual(exampleUrlOverride);
expect((_document$querySelect4 = document.querySelector('base')) === null || _document$querySelect4 === void 0 ? void 0 : _document$querySelect4.getAttribute('href')).toBe(exampleBaseHrefOverride);
expect((_document$querySelect5 = document.querySelector('base')) === null || _document$querySelect5 === void 0 ? void 0 : _document$querySelect5.getAttribute('target')).toBe(exampleBaseTargetOverride);
});
var ArticleSEO = {
title: 'Article Page Title',
description: 'Description of article page',
openGraph: {
title: 'Open Graph Article Title',
description: 'Description of open graph article',
url: 'https://www.example.com/articles/article-title',
type: 'article',
article: {
publishedTime: '2017-06-21T23:04:13Z',
modifiedTime: '2018-01-21T18:04:43Z',
expirationTime: '2022-12-21T22:04:11Z',
authors: ['https://www.example.com/authors/@firstnameA-lastnameA', 'https://www.example.com/authors/@firstnameB-lastnameB'],
section: 'Section II',
tags: ['Tag A', 'Tag B']
},
images: [{
url: 'https://www.test.ie/og-image-article-title-01.jpg',
width: 850,
height: 650,
alt: 'Og Image Alt Article Title A'
}, {
url: 'https://www.test.ie/og-image-article-title-02.jpg',
width: 950,
height: 850,
alt: 'Og Image Alt Article Title B'
}],
site_name: 'SiteName'
},
twitter: {
handle: '@handle',
site: '@site',
cardType: 'summary_large_image'
}
};
test('Article SEO renders correctly', function () {
render( /*#__PURE__*/_react2["default"].createElement(_baseSeo.BaseSeo, ArticleSEO));
expect(document.documentElement).toMatchSnapshot();
});
test('Check article og type meta', function () {
render( /*#__PURE__*/_react2["default"].createElement(_baseSeo.BaseSeo, ArticleSEO));
var ogType = document.documentElement.querySelectorAll("meta[content=\"".concat(ArticleSEO.openGraph.type, "\"]"));
var ogTypeTag = document.documentElement.querySelectorAll('meta[property="og:type"]');
var ogArticlePublishedTime = document.documentElement.querySelectorAll("meta[content=\"".concat(ArticleSEO.openGraph.article.publishedTime, "\"]"));
var ogArticlePublishedTimeTag = document.documentElement.querySelectorAll('meta[property="article:published_time"]');
var ogArticleModifiedTime = document.documentElement.querySelectorAll("meta[content=\"".concat(ArticleSEO.openGraph.article.modifiedTime, "\"]"));
var ogArticleModifiedTimeTag = document.documentElement.querySelectorAll('meta[property="article:modified_time"]');
var ogArticleExpirationTime = document.documentElement.querySelectorAll("meta[content=\"".concat(ArticleSEO.openGraph.article.expirationTime, "\"]"));
var ogArticleExpirationTimeTag = document.documentElement.querySelectorAll('meta[property="article:expiration_time"]');
var ogArticleAuthor00 = document.documentElement.querySelectorAll("meta[content=\"".concat(ArticleSEO.openGraph.article.authors[0], "\"]"));
var ogArticleAuthor01 = document.documentElement.querySelectorAll("meta[content=\"".concat(ArticleSEO.openGraph.article.authors[1], "\"]"));
var ogArticleSection = document.documentElement.querySelectorAll("meta[content=\"".concat(ArticleSEO.openGraph.article.section, "\"]"));
var ogArticleSectionTag = document.documentElement.querySelectorAll('meta[property="article:section"]');
var ogArticleTags00 = document.documentElement.querySelectorAll("meta[content=\"".concat(ArticleSEO.openGraph.article.tags[0], "\"]"));
var ogArticleTags01 = document.documentElement.querySelectorAll("meta[content=\"".concat(ArticleSEO.openGraph.article.tags[1], "\"]"));
expect(Array.from(ogType).length).toBe(1);
expect(Array.from(ogTypeTag).length).toBe(1);
expect(Array.from(ogArticlePublishedTime).length).toBe(1);
expect(Array.from(ogArticlePublishedTimeTag).length).toBe(1);
expect(Array.from(ogArticleModifiedTime).length).toBe(1);
expect(Array.from(ogArticleModifiedTimeTag).length).toBe(1);
expect(Array.from(ogArticleExpirationTime).length).toBe(1);
expect(Array.from(ogArticleExpirationTimeTag).length).toBe(1);
expect(Array.from(ogArticleAuthor00).length).toBe(1);
expect(Array.from(ogArticleAuthor01).length).toBe(1);
expect(Array.from(ogArticleSection).length).toBe(1);
expect(Array.from(ogArticleSectionTag).length).toBe(1);
expect(Array.from(ogArticleTags00).length).toBe(1);
expect(Array.from(ogArticleTags01).length).toBe(1);
});
var BookSEO = {
title: 'Book Page Title',
description: 'Description of book page',
openGraph: {
title: 'Open Graph Book Title',
description: 'Description of open graph book',
url: 'https://www.example.com/books/book-title',
type: 'book',
book: {
releaseDate: '2018-09-17T11:08:13Z',
isbn: '978-3-16-148410-0',
authors: ['https://www.example.com/authors/@firstnameA-lastnameA', 'https://www.example.com/authors/@firstnameB-lastnameB'],
tags: ['Tag A', 'Tag B']
},
images: [{
url: 'https://www.test.ie/og-image-book-title-01.jpg',
width: 850,
height: 650,
alt: 'Og Image Alt Book Title A'
}, {
url: 'https://www.test.ie/og-image-book-title-02.jpg',
width: 950,
height: 850,
alt: 'Og Image Alt Book Title B'
}],
site_name: 'SiteName'
},
twitter: {
handle: '@handle',
site: '@site',
cardType: 'summary_large_image'
}
};
test('Book SEO renders correctly', function () {
render( /*#__PURE__*/_react2["default"].createElement(_baseSeo.BaseSeo, BookSEO));
expect(document.documentElement).toMatchSnapshot();
});
test('Check book og type meta', function () {
render( /*#__PURE__*/_react2["default"].createElement(_baseSeo.BaseSeo, BookSEO));
var ogType = document.documentElement.querySelectorAll("meta[content=\"".concat(BookSEO.openGraph.type, "\"]"));
var ogTypeTag = document.documentElement.querySelectorAll('meta[property="og:type"]');
var ogBookReleaseDate = document.documentElement.querySelectorAll("meta[content=\"".concat(BookSEO.openGraph.book.releaseDate, "\"]"));
var ogBookReleaseDateTag = document.documentElement.querySelectorAll('meta[property="book:release_date"]');
var ogBookAuthor00 = document.documentElement.querySelectorAll("meta[content=\"".concat(BookSEO.openGraph.book.authors[0], "\"]"));
var ogBookAuthor01 = document.documentElement.querySelectorAll("meta[content=\"".concat(BookSEO.openGraph.book.authors[1], "\"]"));
var ogBookIsbn = document.documentElement.querySelectorAll("meta[content=\"".concat(BookSEO.openGraph.book.isbn, "\"]"));
var ogBookIsbnTag = document.documentElement.querySelectorAll('meta[property="book:isbn"]');
var ogBookTags00 = document.documentElement.querySelectorAll("meta[content=\"".concat(BookSEO.openGraph.book.tags[0], "\"]"));
var ogBookTags01 = document.documentElement.querySelectorAll("meta[content=\"".concat(BookSEO.openGraph.book.tags[1], "\"]"));
expect(Array.from(ogType).length).toBe(1);
expect(Array.from(ogTypeTag).length).toBe(1);
expect(Array.from(ogBookReleaseDate).length).toBe(1);
expect(Array.from(ogBookReleaseDateTag).length).toBe(1);
expect(Array.from(ogBookAuthor00).length).toBe(1);
expect(Array.from(ogBookAuthor01).length).toBe(1);
expect(Array.from(ogBookIsbn).length).toBe(1);
expect(Array.from(ogBookIsbnTag).length).toBe(1);
expect(Array.from(ogBookTags00).length).toBe(1);
expect(Array.from(ogBookTags01).length).toBe(1);
});
var ProfileSEO = {
title: 'Profile Page Title',
description: 'Description of profile page',
openGraph: {
title: 'Open Graph Profile Title',
description: 'Description of open graph profile',
url: 'https://www.example.com/@firstlast123',
type: 'profile',
profile: {
firstName: 'First',
lastName: 'Last',
username: 'firstlast123',
gender: 'male'
},
images: [{
url: 'https://www.test.ie/og-image-firstlast123-01.jpg',
width: 850,
height: 650,
alt: 'Og Image Alt firstlast123 A'
}, {
url: 'https://www.test.ie/og-image-firstlast123-02.jpg',
width: 950,
height: 850,
alt: 'Og Image Alt firstlast123 B'
}],
site_name: 'SiteName'
},
twitter: {
handle: '@handle',
site: '@site',
cardType: 'summary_large_image'
}
};
test('Profile SEO renders correctly', function () {
render( /*#__PURE__*/_react2["default"].createElement(_baseSeo.BaseSeo, ProfileSEO));
expect(document.documentElement).toMatchSnapshot();
});
test('Check profile og type meta', function () {
render( /*#__PURE__*/_react2["default"].createElement(_baseSeo.BaseSeo, ProfileSEO));
var ogType = document.documentElement.querySelectorAll("meta[content=\"".concat(ProfileSEO.openGraph.type, "\"]"));
var ogTypeTag = document.documentElement.querySelectorAll('meta[property="og:type"]');
var ogProfileFirstName = document.documentElement.querySelectorAll("meta[content=\"".concat(ProfileSEO.openGraph.profile.firstName, "\"]"));
var ogProfileFirstNameTag = document.documentElement.querySelectorAll('meta[property="profile:first_name"]');
var ogProfileLastName = document.documentElement.querySelectorAll("meta[content=\"".concat(ProfileSEO.openGraph.profile.lastName, "\"]"));
var ogProfileLastNameTag = document.documentElement.querySelectorAll('meta[property="profile:last_name"]');
var ogProfileUsername = document.documentElement.querySelectorAll("meta[content=\"".concat(ProfileSEO.openGraph.profile.username, "\"]"));
var ogProfileUsernameTag = document.documentElement.querySelectorAll('meta[property="profile:username"]');
var ogProfileGender = document.documentElement.querySelectorAll("meta[content=\"".concat(ProfileSEO.openGraph.profile.gender, "\"]"));
var ogProfileGenderTag = document.documentElement.querySelectorAll('meta[property="profile:gender"]');
expect(Array.from(ogType).length).toBe(1);
expect(Array.from(ogTypeTag).length).toBe(1);
expect(Array.from(ogProfileFirstName).length).toBe(1);
expect(Array.from(ogProfileFirstNameTag).length).toBe(1);
expect(Array.from(ogProfileLastName).length).toBe(1);
expect(Array.from(ogProfileLastNameTag).length).toBe(1);
expect(Array.from(ogProfileUsername).length).toBe(1);
expect(Array.from(ogProfileUsernameTag).length).toBe(1);
expect(Array.from(ogProfileGender).length).toBe(1);
expect(Array.from(ogProfileGenderTag).length).toBe(1);
});
var VideoSEO = {
title: 'Video Page Title',
description: 'Description of video page',
openGraph: {
title: 'Open Graph Video Title',
description: 'Description of open graph video',
url: 'https://www.example.com/videos/video-title',
type: 'video.movie',
video: {
actors: [{
profile: 'https://www.example.com/actors/@firstnameA-lastnameA',
role: 'Protagonist'
}, {
profile: 'https://www.example.com/actors/@firstnameB-lastnameB',
role: 'Antagonist'
}],
directors: ['https://www.example.com/directors/@firstnameA-lastnameA', 'https://www.example.com/directors/@firstnameB-lastnameB'],
writers: ['https://www.example.com/writers/@firstnameA-lastnameA', 'https://www.example.com/writers/@firstnameB-lastnameB'],
duration: 680000,
releaseDate: '2022-12-21T22:04:11Z',
tags: ['Tag A', 'Tag B']
},
images: [{
url: 'https://www.test.ie/og-image-video-title-01.jpg',
width: 850,
height: 650,
alt: 'Og Image Alt Video Title A'
}, {
url: 'https://www.test.ie/og-image-video-title-02.jpg',
width: 950,
height: 850,
alt: 'Og Image Alt Video Title B'
}],
site_name: 'SiteName'
},
twitter: {
handle: '@handle',
site: '@site',
cardType: 'summary_large_image'
}
};
test('Video SEO renders correctly', function () {
render( /*#__PURE__*/_react2["default"].createElement(_baseSeo.BaseSeo, VideoSEO));
expect(document.documentElement).toMatchSnapshot();
});
test('Check video og type meta', function () {
render( /*#__PURE__*/_react2["default"].createElement(_baseSeo.BaseSeo, VideoSEO));
var ogType = document.documentElement.querySelectorAll("meta[content=\"".concat(VideoSEO.openGraph.type, "\"]"));
var ogTypeTag = document.documentElement.querySelectorAll('meta[property="og:type"]');
var ogVideoReleaseDate = document.documentElement.querySelectorAll("meta[content=\"".concat(VideoSEO.openGraph.video.releaseDate, "\"]"));
var ogVideoReleaseDateTag = document.documentElement.querySelectorAll('meta[property="video:release_date"]');
var ogVideoDuration = document.documentElement.querySelectorAll("meta[content=\"".concat(VideoSEO.openGraph.video.duration, "\"]"));
var ogVideoDurationTag = document.documentElement.querySelectorAll('meta[property="video:duration"]');
var ogVideoActors00 = document.documentElement.querySelectorAll("meta[content=\"".concat(VideoSEO.openGraph.video.actors[0].profile, "\"]"));
var ogVideoActors01 = document.documentElement.querySelectorAll("meta[content=\"".concat(VideoSEO.openGraph.video.actors[1].profile, "\"]"));
var ogVideoActorsRoles00 = document.documentElement.querySelectorAll("meta[content=\"".concat(VideoSEO.openGraph.video.actors[0].role, "\"]"));
var ogVideoActorsRoles01 = document.documentElement.querySelectorAll("meta[content=\"".concat(VideoSEO.openGraph.video.actors[1].role, "\"]"));
var ogVideoDirectors00 = document.documentElement.querySelectorAll("meta[content=\"".concat(VideoSEO.openGraph.video.directors[0], "\"]"));
var ogVideoDirectors01 = document.documentElement.querySelectorAll("meta[content=\"".concat(VideoSEO.openGraph.video.directors[1], "\"]"));
var ogVideoWriters00 = document.documentElement.querySelectorAll("meta[content=\"".concat(VideoSEO.openGraph.video.writers[0], "\"]"));
var ogVideoWriters01 = document.documentElement.querySelectorAll("meta[content=\"".concat(VideoSEO.openGraph.video.writers[1], "\"]"));
var ogVideoTags00 = document.documentElement.querySelectorAll("meta[content=\"".concat(ArticleSEO.openGraph.article.tags[0], "\"]"));
var ogVideoTags01 = document.documentElement.querySelectorAll("meta[content=\"".concat(VideoSEO.openGraph.video.tags[1], "\"]"));
expect(Array.from(ogType).length).toBe(1);
expect(Array.from(ogTypeTag).length).toBe(1);
expect(Array.from(ogVideoReleaseDate).length).toBe(1);
expect(Array.from(ogVideoReleaseDateTag).length).toBe(1);
expect(Array.from(ogVideoDuration).length).toBe(1);
expect(Array.from(ogVideoDurationTag).length).toBe(1);
expect(Array.from(ogVideoActors00).length).toBe(1);
expect(Array.from(ogVideoActors01).length).toBe(1);
expect(Array.from(ogVideoActorsRoles00).length).toBe(1);
expect(Array.from(ogVideoActorsRoles01).length).toBe(1);
expect(Array.from(ogVideoDirectors00).length).toBe(1);
expect(Array.from(ogVideoDirectors01).length).toBe(1);
expect(Array.from(ogVideoWriters00).length).toBe(1);
expect(Array.from(ogVideoWriters01).length).toBe(1);
expect(Array.from(ogVideoTags00).length).toBe(1);
expect(Array.from(ogVideoTags01).length).toBe(1);
});
test('additional meta tags are set', function () {
var overrideProps = _objectSpread(_objectSpread({}, SEO), {}, {
metaTags: [{
property: 'random',
content: 'something'
}, {
name: 'foo',
content: 'bar'
}]
});
render( /*#__PURE__*/_react2["default"].createElement(_baseSeo.BaseSeo, overrideProps));
var propertyTag = document.documentElement.querySelectorAll('meta[content="something"]');
var nameTag = document.documentElement.querySelectorAll('meta[content="bar"]');
expect(Array.from(propertyTag).length).toBe(1);
expect(Array.from(nameTag).length).toBe(1);
});
test('correctly sets noindex default', function () {
var overrideProps = {
dangerouslySetAllPagesToNoIndex: true
};
render( /*#__PURE__*/_react2["default"].createElement(_baseSeo.BaseSeo, overrideProps));
var indexfollow = document.documentElement.querySelectorAll('meta[content="index,follow"]');
var noindexfollow = document.documentElement.querySelectorAll('meta[content="noindex,follow"]');
expect(Array.from(indexfollow).length).toBe(0);
expect(Array.from(noindexfollow).length).toBe(2);
});
test('correctly sets nofollow default', function () {
var overrideProps = {
dangerouslySetAllPagesToNoFollow: true
};
render( /*#__PURE__*/_react2["default"].createElement(_baseSeo.BaseSeo, overrideProps));
var indexfollow = document.documentElement.querySelectorAll('meta[content="index,follow"]');
var indexnofollow = document.documentElement.querySelectorAll('meta[content="index,nofollow"]');
expect(Array.from(indexfollow).length).toBe(0);
expect(Array.from(indexnofollow).length).toBe(2);
});
test('correctly read noindex & nofollow false', function () {
var overrideProps = _objectSpread(_objectSpread({}, SEO), {}, {
noindex: false,
nofollow: false
});
render( /*#__PURE__*/_react2["default"].createElement(_baseSeo.BaseSeo, overrideProps));
var indexfollow = document.documentElement.querySelectorAll('meta[content="index,follow"]');
var noindexnofollow = document.documentElement.querySelectorAll('meta[content="noindex,nofollow"]');
expect(Array.from(indexfollow).length).toBe(2);
expect(Array.from(noindexnofollow).length).toBe(0);
});
test('sets prefix with htmlAttributes', function () {
var _document$querySelect6;
var overrideProps = _objectSpread(_objectSpread({}, SEO), {}, {
htmlAttributes: {
prefix: 'og: https://ogp.me/ns#'
}
});
render( /*#__PURE__*/_react2["default"].createElement(_baseSeo.BaseSeo, overrideProps));
expect((_document$querySelect6 = document.querySelector('html')) === null || _document$querySelect6 === void 0 ? void 0 : _document$querySelect6.getAttribute('prefix')).toBe('og: https://ogp.me/ns#');
});