mirror of
https://github.com/TryGhost/Ghost.git
synced 2025-01-27 22:49:56 -05:00
c4d3bd7cd2
refs #6534 - don't output publisher for the 'People' type on the author page - change publisher to a full 'Organisation' for the 'Article' type on posts Note: Google's structured data validator also wants image & publisher.logo inside of Article to be full 'ImageObject's. Currently, it output's an error for them: 'The attribute itemtype has an invalid value.' However, the spec on Schema.org says a url is valid: https://schema.org/Article, which is slightly different to Google's spec here: https://developers.google.com/structured-data/rich-snippets/articles#article_markup_properties Ideally, we would output a full 'ImageObject', however we don't currently have the width & height info required. Therefore, I think what we have is valid strictly speaking, but we should aim to fix this when we have better image tools.
202 lines
7.2 KiB
JavaScript
202 lines
7.2 KiB
JavaScript
/*globals describe, it*/
|
|
var getSchema = require('../../../server/data/meta/schema'),
|
|
should = require('should');
|
|
|
|
describe('getSchema', function () {
|
|
it('should return post schema if context starts with post', function () {
|
|
var metadata = {
|
|
blog: {
|
|
title: 'Blog Title',
|
|
logo: 'http://mysite.com/author/image/url/logo.jpg'
|
|
},
|
|
authorImage: 'http://mysite.com/author/image/url/me.jpg',
|
|
authorFacebook: 'https://facebook.com/testuser',
|
|
creatorTwitter: '@testuser',
|
|
authorUrl: 'http://mysite.com/author/me/',
|
|
metaTitle: 'Post Title',
|
|
url: 'http://mysite.com/post/my-post-slug/',
|
|
publishedDate: '2015-12-25T05:35:01.234Z',
|
|
modifiedDate: '2016-01-21T22:13:05.412Z',
|
|
coverImage: 'http://mysite.com/content/image/mypostcoverimage.jpg',
|
|
keywords: ['one', 'two', 'tag'],
|
|
metaDescription: 'Post meta description'
|
|
}, data = {
|
|
context: ['post'],
|
|
post: {
|
|
author: {
|
|
name: 'Post Author',
|
|
website: 'http://myblogsite.com/',
|
|
bio: 'My author bio.',
|
|
facebook: 'https://www.facebook.com/testuser',
|
|
twitter: 'https://twitter.com/testuser'
|
|
}
|
|
}
|
|
}, schema = getSchema(metadata, data);
|
|
|
|
should.deepEqual(schema, {
|
|
'@context': 'http://schema.org',
|
|
'@type': 'Article',
|
|
author: {
|
|
'@type': 'Person',
|
|
description: 'My author bio.',
|
|
image: 'http://mysite.com/author/image/url/me.jpg',
|
|
name: 'Post Author',
|
|
sameAs: [
|
|
'http://myblogsite.com/',
|
|
'https://www.facebook.com/testuser',
|
|
'https://twitter.com/testuser'
|
|
],
|
|
url: 'http://mysite.com/author/me/'
|
|
},
|
|
dateModified: '2016-01-21T22:13:05.412Z',
|
|
datePublished: '2015-12-25T05:35:01.234Z',
|
|
description: 'Post meta description',
|
|
headline: 'Post Title',
|
|
image: 'http://mysite.com/content/image/mypostcoverimage.jpg',
|
|
keywords: 'one, two, tag',
|
|
publisher: {
|
|
'@type': 'Organization',
|
|
name: 'Blog Title',
|
|
logo: 'http://mysite.com/author/image/url/logo.jpg'
|
|
},
|
|
url: 'http://mysite.com/post/my-post-slug/'
|
|
});
|
|
});
|
|
|
|
it('should return post schema removing null or undefined values', function () {
|
|
var metadata = {
|
|
blog: {
|
|
title: 'Blog Title'
|
|
},
|
|
authorImage: null,
|
|
authorFacebook: undefined,
|
|
creatorTwitter: undefined,
|
|
authorUrl: 'http://mysite.com/author/me/',
|
|
metaTitle: 'Post Title',
|
|
url: 'http://mysite.com/post/my-post-slug/',
|
|
publishedDate: '2015-12-25T05:35:01.234Z',
|
|
modifiedDate: '2016-01-21T22:13:05.412Z',
|
|
coverImage: undefined,
|
|
keywords: [],
|
|
metaDescription: 'Post meta description'
|
|
}, data = {
|
|
context: ['post'],
|
|
post: {
|
|
author: {
|
|
name: 'Post Author',
|
|
website: undefined,
|
|
bio: null,
|
|
facebook: null,
|
|
twitter: null
|
|
}
|
|
}
|
|
}, schema = getSchema(metadata, data);
|
|
|
|
should.deepEqual(schema, {
|
|
'@context': 'http://schema.org',
|
|
'@type': 'Article',
|
|
author: {
|
|
'@type': 'Person',
|
|
name: 'Post Author',
|
|
sameAs: [],
|
|
url: 'http://mysite.com/author/me/'
|
|
},
|
|
dateModified: '2016-01-21T22:13:05.412Z',
|
|
datePublished: '2015-12-25T05:35:01.234Z',
|
|
description: 'Post meta description',
|
|
headline: 'Post Title',
|
|
publisher: {
|
|
'@type': 'Organization',
|
|
name: 'Blog Title',
|
|
logo: null
|
|
},
|
|
url: 'http://mysite.com/post/my-post-slug/'
|
|
});
|
|
});
|
|
|
|
it('should return home schema if context starts with home', function () {
|
|
var metadata = {
|
|
blog: {
|
|
title: 'Blog Title'
|
|
},
|
|
url: 'http://mysite.com/post/my-post-slug/',
|
|
coverImage: 'http://mysite.com/content/image/mypostcoverimage.jpg',
|
|
metaDescription: 'This is the theme description'
|
|
}, data = {
|
|
context: ['home']
|
|
}, schema = getSchema(metadata, data);
|
|
|
|
should.deepEqual(schema, {
|
|
'@context': 'http://schema.org',
|
|
'@type': 'Website',
|
|
description: 'This is the theme description',
|
|
image: 'http://mysite.com/content/image/mypostcoverimage.jpg',
|
|
publisher: 'Blog Title',
|
|
url: 'http://mysite.com/post/my-post-slug/'
|
|
});
|
|
});
|
|
|
|
it('should return tag schema if context starts with tag', function () {
|
|
var metadata = {
|
|
blog: {
|
|
title: 'Blog Title'
|
|
},
|
|
url: 'http://mysite.com/post/my-post-slug/',
|
|
coverImage: 'http://mysite.com/content/image/mypostcoverimage.jpg',
|
|
metaDescription: 'This is the tag description!'
|
|
}, data = {
|
|
context: ['tag'],
|
|
tag: {
|
|
name: 'Great Tag'
|
|
}
|
|
}, schema = getSchema(metadata, data);
|
|
|
|
should.deepEqual(schema, {
|
|
'@context': 'http://schema.org',
|
|
'@type': 'Series',
|
|
description: 'This is the tag description!',
|
|
image: 'http://mysite.com/content/image/mypostcoverimage.jpg',
|
|
name: 'Great Tag',
|
|
publisher: 'Blog Title',
|
|
url: 'http://mysite.com/post/my-post-slug/'
|
|
});
|
|
});
|
|
|
|
it('should return author schema if context starts with author', function () {
|
|
var metadata = {
|
|
blog: {
|
|
title: 'Blog Title'
|
|
},
|
|
authorImage: 'http://mysite.com/author/image/url/me.jpg',
|
|
authorUrl: 'http://mysite.com/author/me/',
|
|
metaDescription: 'This is the author description!'
|
|
}, data = {
|
|
context: ['author'],
|
|
author: {
|
|
name: 'Author Name',
|
|
website: 'http://myblogsite.com/',
|
|
twitter: 'https://twitter.com/testuser'
|
|
}
|
|
}, schema = getSchema(metadata, data);
|
|
|
|
should.deepEqual(schema, {
|
|
'@context': 'http://schema.org',
|
|
'@type': 'Person',
|
|
description: 'This is the author description!',
|
|
name: 'Author Name',
|
|
sameAs: [
|
|
'http://myblogsite.com/',
|
|
'https://twitter.com/testuser'
|
|
],
|
|
url: 'http://mysite.com/author/me/'
|
|
});
|
|
});
|
|
|
|
it('should return null if not a supported type', function () {
|
|
var metadata = {},
|
|
data = {},
|
|
schema = getSchema(metadata, data);
|
|
|
|
should.deepEqual(schema, null);
|
|
});
|
|
});
|