mirror of
https://github.com/TryGhost/Ghost.git
synced 2025-02-24 23:48:13 -05:00
no-issue This protects our tests against changes to the database schema, which helps us decouple the API from the database, and make tests less brittle. It also forces us to manually update the tests if we do make a change to the API!
220 lines
4.7 KiB
JavaScript
220 lines
4.7 KiB
JavaScript
const url = require('url');
|
|
const _ = require('lodash');
|
|
const testUtils = require('../../../../utils');
|
|
|
|
const API_URL = '/ghost/api/canary/admin/';
|
|
|
|
const expectedProperties = {
|
|
posts: ['posts', 'meta'],
|
|
tags: ['tags', 'meta'],
|
|
users: ['users', 'meta'],
|
|
settings: ['settings', 'meta'],
|
|
subscribers: ['subscribers', 'meta'],
|
|
roles: ['roles'],
|
|
pagination: ['page', 'limit', 'pages', 'total', 'next', 'prev'],
|
|
slugs: ['slugs'],
|
|
slug: ['slug'],
|
|
invites: ['invites', 'meta'],
|
|
themes: ['themes'],
|
|
members: ['members', 'meta'],
|
|
site: [
|
|
'title',
|
|
'description',
|
|
'logo',
|
|
'icon',
|
|
'accent_color',
|
|
'url',
|
|
'version'
|
|
],
|
|
post: [
|
|
'id',
|
|
'uuid',
|
|
'title',
|
|
'slug',
|
|
'mobiledoc',
|
|
'comment_id',
|
|
'feature_image',
|
|
'featured',
|
|
'status',
|
|
'visibility',
|
|
'email_recipient_filter',
|
|
'created_at',
|
|
'updated_at',
|
|
'published_at',
|
|
'custom_excerpt',
|
|
'codeinjection_head',
|
|
'codeinjection_foot',
|
|
'custom_template',
|
|
'canonical_url',
|
|
'url',
|
|
'primary_tag',
|
|
'primary_author',
|
|
'excerpt',
|
|
'tags',
|
|
'authors',
|
|
'email',
|
|
'og_image',
|
|
'og_title',
|
|
'og_description',
|
|
'twitter_image',
|
|
'twitter_title',
|
|
'twitter_description',
|
|
'meta_title',
|
|
'meta_description',
|
|
'email_subject',
|
|
'frontmatter'
|
|
],
|
|
user: [
|
|
'id',
|
|
'name',
|
|
'slug',
|
|
'email',
|
|
'profile_image',
|
|
'cover_image',
|
|
'bio',
|
|
'website',
|
|
'location',
|
|
'facebook',
|
|
'twitter',
|
|
'accessibility',
|
|
'status',
|
|
'meta_title',
|
|
'meta_description',
|
|
'tour',
|
|
'last_seen',
|
|
'created_at',
|
|
'updated_at',
|
|
'url'
|
|
],
|
|
tag: [
|
|
'id',
|
|
'name',
|
|
'slug',
|
|
'description',
|
|
'feature_image',
|
|
'visibility',
|
|
'og_image',
|
|
'og_title',
|
|
'og_description',
|
|
'twitter_image',
|
|
'twitter_title',
|
|
'twitter_description',
|
|
'meta_title',
|
|
'meta_description',
|
|
'codeinjection_head',
|
|
'codeinjection_foot',
|
|
'canonical_url',
|
|
'accent_color',
|
|
'created_at',
|
|
'updated_at'
|
|
],
|
|
setting: [
|
|
'id',
|
|
'group',
|
|
'key',
|
|
'value',
|
|
'type',
|
|
'flags',
|
|
'created_at',
|
|
'updated_at'
|
|
],
|
|
|
|
member: [
|
|
'id',
|
|
'uuid',
|
|
'email',
|
|
'status',
|
|
'name',
|
|
'note',
|
|
'geolocation',
|
|
'subscribed',
|
|
'email_count',
|
|
'email_opened_count',
|
|
'email_open_rate',
|
|
'created_at',
|
|
'updated_at',
|
|
'avatar_image',
|
|
'labels'
|
|
],
|
|
member_signin_url: ['member_id', 'url'],
|
|
role: ['id', 'name', 'description', 'created_at', 'updated_at'],
|
|
permission: [
|
|
'id',
|
|
'name',
|
|
'object_type',
|
|
'action_type',
|
|
'object_id',
|
|
'created_at',
|
|
'updated_at'
|
|
],
|
|
notification: [
|
|
'type',
|
|
'message',
|
|
'status',
|
|
'id',
|
|
'dismissible',
|
|
'location',
|
|
'custom'
|
|
],
|
|
theme: ['name', 'package', 'active'],
|
|
invite: [
|
|
'id',
|
|
'role_id',
|
|
'status',
|
|
'email',
|
|
'expires',
|
|
'created_at',
|
|
'updated_at'
|
|
],
|
|
webhook: [
|
|
'id',
|
|
'event',
|
|
'target_url',
|
|
'name',
|
|
'secret',
|
|
'api_version',
|
|
'integration_id',
|
|
'status',
|
|
'last_triggered_at',
|
|
'last_triggered_status',
|
|
'last_triggered_error',
|
|
'created_at',
|
|
'updated_at'
|
|
],
|
|
email_preview: ['html', 'subject', 'plaintext']
|
|
};
|
|
|
|
module.exports = {
|
|
API: {
|
|
getApiQuery(route) {
|
|
return url.resolve(API_URL, route);
|
|
},
|
|
|
|
checkResponse(...args) {
|
|
this.expectedProperties = expectedProperties;
|
|
return testUtils.API.checkResponse.call(this, ...args);
|
|
}
|
|
},
|
|
|
|
doAuth(...args) {
|
|
return testUtils.API.doAuth(`${API_URL}session/`, ...args);
|
|
},
|
|
|
|
getValidAdminToken(endpoint, key) {
|
|
const jwt = require('jsonwebtoken');
|
|
key = key || testUtils.DataGenerator.Content.api_keys[0];
|
|
|
|
const JWT_OPTIONS = {
|
|
keyid: key.id,
|
|
algorithm: 'HS256',
|
|
expiresIn: '5m',
|
|
audience: endpoint
|
|
};
|
|
|
|
return jwt.sign(
|
|
{},
|
|
Buffer.from(key.secret, 'hex'),
|
|
JWT_OPTIONS
|
|
);
|
|
}
|
|
};
|