UNPKG

gatsby-plugin-next-seo

Version:
594 lines (567 loc) 32.3 kB
"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#'); });