0
Fork 0
mirror of https://github.com/TryGhost/Ghost.git synced 2025-04-15 03:01:37 -05:00

Moved server unit tests into the server folder

- this is a small part of a bit of cleanup of our test files
- the goal is to make the existing tests clearer with a view to making it easier to write more tests
- this makes the test structure follow the codebase structure more closely
- eventually we will colocate the tests as we break the codebase down further
This commit is contained in:
Hannah Wolfe 2021-10-06 11:12:21 +01:00
parent 95d27e7f58
commit 9e96b04542
No known key found for this signature in database
GPG key ID: 9F8C7532D0A6BA55
92 changed files with 468 additions and 244 deletions

View file

@ -3,7 +3,7 @@ const sinon = require('sinon');
const moment = require('moment');
const _ = require('lodash');
const nock = require('nock');
const SchedulingDefault = require('../../../../core/server/adapters/scheduling/SchedulingDefault');
const SchedulingDefault = require('../../../../../core/server/adapters/scheduling/SchedulingDefault');
describe('Scheduling Default Adapter', function () {
const scope = {};

View file

@ -3,13 +3,13 @@ const should = require('should');
const sinon = require('sinon');
const Promise = require('bluebird');
const moment = require('moment');
const testUtils = require('../../../../utils');
const models = require('../../../../../core/server/models');
const events = require('../../../../../core/server/lib/common/events');
const schedulingUtils = require('../../../../../core/server/adapters/scheduling/utils');
const SchedulingDefault = require('../../../../../core/server/adapters/scheduling/SchedulingDefault');
const urlUtils = require('../../../../../core/shared/url-utils');
const PostScheduler = require('../../../../../core/server/adapters/scheduling/post-scheduling/post-scheduler');
const testUtils = require('../../../../../utils');
const models = require('../../../../../../core/server/models');
const events = require('../../../../../../core/server/lib/common/events');
const schedulingUtils = require('../../../../../../core/server/adapters/scheduling/utils');
const SchedulingDefault = require('../../../../../../core/server/adapters/scheduling/SchedulingDefault');
const urlUtils = require('../../../../../../core/shared/url-utils');
const PostScheduler = require('../../../../../../core/server/adapters/scheduling/post-scheduling/post-scheduler');
describe('Scheduling: Post Scheduler', function () {
let adapter;

View file

@ -1,8 +1,8 @@
const should = require('should');
const fs = require('fs-extra');
const configUtils = require('../../../utils/configUtils');
const config = require('../../../../core/shared/config');
const schedulingUtils = require('../../../../core/server/adapters/scheduling/utils');
const configUtils = require('../../../../utils/configUtils');
const config = require('../../../../../core/shared/config');
const schedulingUtils = require('../../../../../core/server/adapters/scheduling/utils');
const schedulingPath = configUtils.config.getContentPath('adapters') + 'scheduling/';
describe('Scheduling: utils', function () {

View file

@ -5,9 +5,9 @@ const fs = require('fs-extra');
const moment = require('moment');
const Promise = require('bluebird');
const path = require('path');
const LocalFileStore = require('../../../../core/server/adapters/storage/LocalFileStorage');
const LocalFileStore = require('../../../../../core/server/adapters/storage/LocalFileStorage');
let localFileStore;
const configUtils = require('../../../utils/configUtils');
const configUtils = require('../../../../utils/configUtils');
describe('Local File System Storage', function () {
let image;
@ -143,7 +143,7 @@ describe('Local File System Storage', function () {
describe('read image', function () {
beforeEach(function () {
// we have some example images in our test utils folder
localFileStore.storagePath = path.join(__dirname, '../../../utils/fixtures/images/');
localFileStore.storagePath = path.join(__dirname, '../../../../utils/fixtures/images/');
});
it('success', function (done) {

View file

@ -1,9 +1,9 @@
const should = require('should');
const fs = require('fs-extra');
const StorageBase = require('ghost-storage-base');
const configUtils = require('../../../utils/configUtils');
const storage = require('../../../../core/server/adapters/storage');
const LocalFileStorage = require('../../../../core/server/adapters/storage/LocalFileStorage');
const configUtils = require('../../../../utils/configUtils');
const storage = require('../../../../../core/server/adapters/storage');
const LocalFileStorage = require('../../../../../core/server/adapters/storage/LocalFileStorage');
const storagePath = configUtils.config.getContentPath('adapters') + 'storage/';
describe('storage: index_spec', function () {

View file

@ -1,9 +1,9 @@
const should = require('should');
const sinon = require('sinon');
const urlUtils = require('../../../../core/shared/url-utils');
const urlUtils = require('../../../../../core/shared/url-utils');
// Stuff we are testing
const storageUtils = require('../../../../core/server/adapters/storage/utils');
const storageUtils = require('../../../../../core/server/adapters/storage/utils');
describe('storage utils', function () {
let urlForStub;

View file

@ -2,9 +2,9 @@ const should = require('should');
const sinon = require('sinon');
const _ = require('lodash');
const fs = require('fs-extra');
const models = require('../../../../core/server/models');
const exporter = require('../../../../core/server/data/exporter');
const dbBackup = require('../../../../core/server/data/db/backup');
const models = require('../../../../../core/server/models');
const exporter = require('../../../../../core/server/data/exporter');
const dbBackup = require('../../../../../core/server/data/db/backup');
describe('Backup', function () {
let exportStub;

View file

@ -3,10 +3,10 @@ const sinon = require('sinon');
const rewire = require('rewire');
const Promise = require('bluebird');
const errors = require('@tryghost/errors');
const db = require('../../../../core/server/data/db');
const exporter = rewire('../../../../core/server/data/exporter');
const schema = require('../../../../core/server/data/schema');
const models = require('../../../../core/server/models');
const db = require('../../../../../core/server/data/db');
const exporter = rewire('../../../../../core/server/data/exporter');
const schema = require('../../../../../core/server/data/schema');
const models = require('../../../../../core/server/models');
const schemaTables = Object.keys(schema.tables);
describe('Exporter', function () {
@ -172,7 +172,7 @@ describe('Exporter', function () {
const {
BACKUP_TABLES,
TABLES_ALLOWLIST
} = require('../../../../core/server/data/exporter/table-lists.js');
} = require('../../../../../core/server/data/exporter/table-lists.js');
const nonSchemaTables = ['migrations', 'migrations_lock'];
const requiredTables = schemaTables.concat(nonSchemaTables);
@ -190,8 +190,8 @@ describe('Exporter', function () {
it('should be fixed when default settings is changed', function () {
const {
SETTING_KEYS_BLOCKLIST
} = require('../../../../core/server/data/exporter/table-lists.js');
const defaultSettings = require('../../../../core/server/data/schema/default-settings.json');
} = require('../../../../../core/server/data/exporter/table-lists.js');
const defaultSettings = require('../../../../../core/server/data/schema/default-settings.json');
const totalKeysLength = Object.keys(defaultSettings).reduce((acc, curr, index) => {
return acc + Object.keys(defaultSettings[curr]).length;

View file

@ -1,6 +1,6 @@
const should = require('should');
const find = require('lodash/find');
const PostsImporter = require('../../../../../../core/server/data/importer/importers/data/posts');
const PostsImporter = require('../../../../../../../core/server/data/importer/importers/data/posts');
describe('PostsImporter', function () {
describe('#beforeImport', function () {

View file

@ -1,6 +1,6 @@
const find = require('lodash/find');
const should = require('should');
const SettingsImporter = require('../../../../../../core/server/data/importer/importers/data/settings');
const SettingsImporter = require('../../../../../../../core/server/data/importer/importers/data/settings');
describe('SettingsImporter', function () {
describe('#beforeImport', function () {

View file

@ -4,25 +4,25 @@ const sinon = require('sinon');
const rewire = require('rewire');
const Promise = require('bluebird');
const _ = require('lodash');
const testUtils = require('../../../utils');
const testUtils = require('../../../../utils');
const moment = require('moment');
const path = require('path');
// Stuff we are testing
const ImportManager = require('../../../../core/server/data/importer');
const ImportManager = require('../../../../../core/server/data/importer');
const JSONHandler = require('../../../../core/server/data/importer/handlers/json');
let ImageHandler = rewire('../../../../core/server/data/importer/handlers/image');
const MarkdownHandler = require('../../../../core/server/data/importer/handlers/markdown');
const DataImporter = require('../../../../core/server/data/importer/importers/data');
const ImageImporter = require('../../../../core/server/data/importer/importers/image');
const storage = require('../../../../core/server/adapters/storage');
const configUtils = require('../../../utils/configUtils');
const JSONHandler = require('../../../../../core/server/data/importer/handlers/json');
let ImageHandler = rewire('../../../../../core/server/data/importer/handlers/image');
const MarkdownHandler = require('../../../../../core/server/data/importer/handlers/markdown');
const DataImporter = require('../../../../../core/server/data/importer/importers/data');
const ImageImporter = require('../../../../../core/server/data/importer/importers/image');
const storage = require('../../../../../core/server/adapters/storage');
const configUtils = require('../../../../utils/configUtils');
describe('Importer', function () {
afterEach(function () {
sinon.restore();
ImageHandler = rewire('../../../../core/server/data/importer/handlers/image');
ImageHandler = rewire('../../../../../core/server/data/importer/handlers/image');
configUtils.restore();
});
@ -680,7 +680,7 @@ describe('Importer', function () {
});
it('does preprocess posts, users and tags correctly', function () {
const inputData = require('../../../utils/fixtures/import/import-data-1.json');
const inputData = require('../../../../utils/fixtures/import/import-data-1.json');
const outputData = DataImporter.preProcess(_.cloneDeep(inputData));
// Data preprocess is a noop
@ -698,7 +698,7 @@ describe('Importer', function () {
});
it('does preprocess posts, users and tags correctly', function () {
let inputData = require('../../../utils/fixtures/import/import-data-1.json');
let inputData = require('../../../../utils/fixtures/import/import-data-1.json');
let outputData = ImageImporter.preProcess(_.cloneDeep(inputData));
inputData = inputData.data.data;
@ -727,7 +727,7 @@ describe('Importer', function () {
});
it('does import the images correctly', function () {
const inputData = require('../../../utils/fixtures/import/import-data-1.json');
const inputData = require('../../../../utils/fixtures/import/import-data-1.json');
const storageApi = {
save: sinon.stub().returns(Promise.resolve())

View file

@ -2,7 +2,7 @@ const should = require('should');
const sinon = require('sinon');
const errors = require('@tryghost/errors');
const utils = require('../../../../core/server/data/migrations/utils');
const utils = require('../../../../../core/server/data/migrations/utils');
class Deferred {
constructor() {

View file

@ -1,7 +1,7 @@
const should = require('should');
const errors = require('@tryghost/errors');
const commands = require('../../../../core/server/data/schema/commands');
const commands = require('../../../../../core/server/data/schema/commands');
describe('schema commands', function () {
it('_hasForeignSQLite throws when knex is nox configured to use sqlite3', async function () {

View file

@ -2,10 +2,10 @@ const should = require('should');
const sinon = require('sinon');
const Promise = require('bluebird');
const rewire = require('rewire');
const models = require('../../../../../core/server/models');
const baseUtils = require('../../../../../core/server/models/base/utils');
const fixtureUtils = rewire('../../../../../core/server/data/schema/fixtures/utils');
const fixtures = require('../../../../../core/server/data/schema/fixtures/fixtures');
const models = require('../../../../../../core/server/models');
const baseUtils = require('../../../../../../core/server/models/base/utils');
const fixtureUtils = rewire('../../../../../../core/server/data/schema/fixtures/utils');
const fixtures = require('../../../../../../core/server/data/schema/fixtures/fixtures');
describe('Migration Fixture Utils', function () {
let loggerStub;

View file

@ -4,12 +4,12 @@ const yaml = require('js-yaml');
const crypto = require('crypto');
const fs = require('fs-extra');
const path = require('path');
const {config} = require('../../../utils/configUtils');
const schema = require('../../../../core/server/data/schema');
const fixtures = require('../../../../core/server/data/schema/fixtures');
const routeSettings = require('../../../../core/server/services/route-settings');
const validateRouteSettings = require('../../../../core/server/services/route-settings/validate');
const defaultSettings = require('../../../../core/server/data/schema/default-settings');
const {config} = require('../../../../utils/configUtils');
const schema = require('../../../../../core/server/data/schema');
const fixtures = require('../../../../../core/server/data/schema/fixtures');
const routeSettings = require('../../../../../core/server/services/route-settings');
const validateRouteSettings = require('../../../../../core/server/services/route-settings/validate');
const defaultSettings = require('../../../../../core/server/data/schema/default-settings');
/**
* @NOTE

View file

@ -1,10 +1,10 @@
const should = require('should');
const _ = require('lodash');
const ObjectId = require('bson-objectid');
const testUtils = require('../../../utils');
const models = require('../../../../core/server/models');
const testUtils = require('../../../../utils');
const models = require('../../../../../core/server/models');
const validateSchema = require('../../../../core/server/data/schema/validator');
const validateSchema = require('../../../../../core/server/data/schema/validator');
describe('Validate Schema', function () {
before(function () {

View file

@ -2,7 +2,7 @@ const should = require('should');
const sinon = require('sinon');
const _ = require('lodash');
const path = require('path');
const BlogIcon = require('../../../../core/server/lib/image/blog-icon');
const BlogIcon = require('../../../../../core/server/lib/image/blog-icon');
describe('lib/image: blog icon', function () {
describe('getIconUrl', function () {
@ -198,7 +198,7 @@ describe('lib/image: blog icon', function () {
describe('getIconDimensions', function () {
it('[success] returns .ico dimensions', function (done) {
const blogIcon = new BlogIcon({config: {}, i18n: {}, storageUtils: {}, urlUtils: {}, settingsCache: {}});
blogIcon.getIconDimensions(path.join(__dirname, '../../../utils/fixtures/images/favicon.ico'))
blogIcon.getIconDimensions(path.join(__dirname, '../../../../utils/fixtures/images/favicon.ico'))
.then(function (result) {
should.exist(result);
result.should.eql({
@ -211,7 +211,7 @@ describe('lib/image: blog icon', function () {
it('[success] returns .png dimensions', function (done) {
const blogIcon = new BlogIcon({config: {}, i18n: {}, storageUtils: {}, urlUtils: {}, settingsCache: {}});
blogIcon.getIconDimensions(path.join(__dirname, '../../../utils/fixtures/images/favicon.png'))
blogIcon.getIconDimensions(path.join(__dirname, '../../../../utils/fixtures/images/favicon.png'))
.then(function (result) {
should.exist(result);
result.should.eql({
@ -224,7 +224,7 @@ describe('lib/image: blog icon', function () {
it('[success] returns .ico dimensions for icon with multiple sizes', function (done) {
const blogIcon = new BlogIcon({config: {}, i18n: {}, storageUtils: {}, urlUtils: {}, settingsCache: {}});
blogIcon.getIconDimensions(path.join(__dirname, '../../../utils/fixtures/images/favicon_multi_sizes.ico'))
blogIcon.getIconDimensions(path.join(__dirname, '../../../../utils/fixtures/images/favicon_multi_sizes.ico'))
.then(function (result) {
should.exist(result);
result.should.eql({
@ -240,7 +240,7 @@ describe('lib/image: blog icon', function () {
t: key => key
}, storageUtils: {}, urlUtils: {}, settingsCache: {}});
blogIcon.getIconDimensions(path.join(__dirname, '../../../utils/fixtures/images/favicon_multi_sizes_FILE_DOES_NOT_EXIST.ico'))
blogIcon.getIconDimensions(path.join(__dirname, '../../../../utils/fixtures/images/favicon_multi_sizes_FILE_DOES_NOT_EXIST.ico'))
.catch(function (error) {
should.exist(error);
error.message.should.eql('errors.utils.blogIcon.error');

View file

@ -1,7 +1,7 @@
const should = require('should');
const sinon = require('sinon');
const Promise = require('bluebird');
const CachedImageSizeFromUrl = require('../../../../core/server/lib/image/cached-image-size-from-url');
const CachedImageSizeFromUrl = require('../../../../../core/server/lib/image/cached-image-size-from-url');
describe('lib/image: image size cache', function () {
let sizeOfStub;

View file

@ -1,5 +1,5 @@
const should = require('should');
const Gravatar = require('../../../../core/server/lib/image/gravatar');
const Gravatar = require('../../../../../core/server/lib/image/gravatar');
describe('lib/image: gravatar', function () {
it('can successfully lookup a gravatar url', function (done) {

View file

@ -4,7 +4,7 @@ const nock = require('nock');
const path = require('path');
const errors = require('@tryghost/errors');
const fs = require('fs');
const ImageSize = require('../../../../core/server/lib/image/image-size');
const ImageSize = require('../../../../../core/server/lib/image/image-size');
describe('lib/image: image size', function () {
// use a 1x1 gif in nock responses because it's really small and easy to work with
@ -138,7 +138,7 @@ describe('lib/image: image size', function () {
}, urlUtils: {}, request: (requestUrl) => {
if (requestUrl === url) {
return Promise.resolve({
body: fs.readFileSync(path.join(__dirname, '/../../../utils/fixtures/images/favicon_multi_sizes.ico'))
body: fs.readFileSync(path.join(__dirname, '../../../../utils/fixtures/images/favicon_multi_sizes.ico'))
});
}
return Promise.reject();
@ -278,7 +278,7 @@ describe('lib/image: image size', function () {
width: 100
};
const storagePath = path.join(__dirname, '../../../../test/utils/fixtures/images/');
const storagePath = path.join(__dirname, '../../../../utils/fixtures/images/');
const urlForStub = sinon.stub();
urlForStub.withArgs('image').returns('http://myblog.com/content/images/favicon.png');
urlForStub.withArgs('home').returns('http://myblog.com/');
@ -408,7 +408,7 @@ describe('lib/image: image size', function () {
.get('/media/355241_d31358572a2542c5a44738ddcb59e7ea.jpg_256')
.delayConnection(10)
.reply(408);
const imageSize = new ImageSize({config: {
get: (key) => {
if (key === 'times:getImageSizeTimeoutInMS') {
@ -524,7 +524,7 @@ describe('lib/image: image size', function () {
width: 800
};
const storagePath = path.join(__dirname, '../../../../test/utils/fixtures/images/');
const storagePath = path.join(__dirname, '../../../../utils/fixtures/images/');
const urlForStub = sinon.stub();
urlForStub.withArgs('image').returns('http://myblog.com/content/images/ghost-logo.png');
urlForStub.withArgs('home').returns('http://myblog.com/');
@ -567,7 +567,7 @@ describe('lib/image: image size', function () {
width: 1010
};
const storagePath = path.join(__dirname, '../../../../test/utils/fixtures/images/');
const storagePath = path.join(__dirname, '../../../../utils/fixtures/images/');
const urlForStub = sinon.stub();
urlForStub.withArgs('image').returns('http://myblog.com/blog/content/images/favicon_too_large.png');
urlForStub.withArgs('home').returns('http://myblog.com/');
@ -610,7 +610,7 @@ describe('lib/image: image size', function () {
width: 64
};
const storagePath = path.join(__dirname, '../../../../test/utils/fixtures/images/');
const storagePath = path.join(__dirname, '../../../../utils/fixtures/images/');
const urlForStub = sinon.stub();
urlForStub.withArgs('image').returns('http://myblog.com/content/images/favicon_multi_sizes.ico');
urlForStub.withArgs('home').returns('http://myblog.com/');
@ -653,7 +653,7 @@ describe('lib/image: image size', function () {
width: 249
};
const storagePath = path.join(__dirname, '../../../../test/utils/fixtures/images/');
const storagePath = path.join(__dirname, '../../../../utils/fixtures/images/');
const urlForStub = sinon.stub();
urlForStub.withArgs('image').returns('http://myblog.com/content/images/ghosticon.webp');
urlForStub.withArgs('home').returns('http://myblog.com/');
@ -691,7 +691,7 @@ describe('lib/image: image size', function () {
it('[failure] returns error if storage adapter errors', function (done) {
const url = '/content/images/not-existing-image.png';
const storagePath = path.join(__dirname, '../../../../test/utils/fixtures/images/');
const storagePath = path.join(__dirname, '../../../../utils/fixtures/images/');
const urlForStub = sinon.stub();
urlForStub.withArgs('image').returns('http://myblog.com/content/images/not-existing-image.png');
urlForStub.withArgs('home').returns('http://myblog.com/');

View file

@ -2,11 +2,11 @@ const path = require('path');
const should = require('should');
const sinon = require('sinon');
const nock = require('nock');
const configUtils = require('../../utils/configUtils');
const mobiledocLib = require('../../../core/server/lib/mobiledoc');
const storage = require('../../../core/server/adapters/storage');
const urlUtils = require('../../../core/shared/url-utils');
const mockUtils = require('../../utils/mocks');
const configUtils = require('../../../utils/configUtils');
const mobiledocLib = require('../../../../core/server/lib/mobiledoc');
const storage = require('../../../../core/server/adapters/storage');
const urlUtils = require('../../../../core/shared/url-utils');
const mockUtils = require('../../../utils/mocks');
describe('lib/mobiledoc', function () {
afterEach(function () {
@ -279,7 +279,7 @@ describe('lib/mobiledoc', function () {
beforeEach(function () {
originalStoragePath = storage.getStorage().storagePath;
storage.getStorage().storagePath = path.join(__dirname, '../../utils/fixtures/images/');
storage.getStorage().storagePath = path.join(__dirname, '../../../utils/fixtures/images/');
});
afterEach(function () {
@ -299,7 +299,7 @@ describe('lib/mobiledoc', function () {
const unsplashMock = nock('https://images.unsplash.com/')
.get('/favicon_too_large')
.query(true)
.replyWithFile(200, path.join(__dirname, '../../utils/fixtures/images/favicon_not_square.png'), {
.replyWithFile(200, path.join(__dirname, '../../../utils/fixtures/images/favicon_not_square.png'), {
'Content-Type': 'image/png'
});

View file

@ -2,8 +2,8 @@ const sinon = require('sinon');
const should = require('should');
const rewire = require('rewire');
const nock = require('nock');
const externalRequest = rewire('../../../core/server/lib/request-external');
const configUtils = require('../../utils/configUtils');
const externalRequest = rewire('../../../../core/server/lib/request-external');
const configUtils = require('../../../utils/configUtils');
// for sinon stubs
const dnsPromises = require('dns').promises;

View file

@ -1,7 +1,7 @@
const models = require('../../../core/server/models');
const models = require('../../../../core/server/models');
const should = require('should');
const sinon = require('sinon');
const testUtils = require('../../utils');
const testUtils = require('../../../utils');
describe('Unit: models/api_key', function () {
before(models.init);

View file

@ -1,7 +1,7 @@
const errors = require('@tryghost/errors');
const should = require('should');
const sinon = require('sinon');
const models = require('../../../../core/server/models');
const models = require('../../../../../core/server/models');
describe('Models: crud', function () {
before(function () {

View file

@ -4,9 +4,9 @@ const sinon = require('sinon');
const _ = require('lodash');
const Promise = require('bluebird');
const security = require('@tryghost/security');
const models = require('../../../../core/server/models');
const urlUtils = require('../../../../core/shared/url-utils');
const testUtils = require('../../../utils');
const models = require('../../../../../core/server/models');
const urlUtils = require('../../../../../core/shared/url-utils');
const testUtils = require('../../../../utils');
describe('Models: base', function () {
before(function () {

View file

@ -1,9 +1,9 @@
const should = require('should');
const url = require('url');
const sinon = require('sinon');
const models = require('../../../core/server/models');
const testUtils = require('../../utils');
const {knex} = require('../../../core/server/data/db');
const models = require('../../../../core/server/models');
const testUtils = require('../../../utils');
const {knex} = require('../../../../core/server/data/db');
describe('Unit: models/integration', function () {
before(function () {

View file

@ -1,8 +1,8 @@
const errors = require('@tryghost/errors');
const sinon = require('sinon');
const Promise = require('bluebird');
const models = require('../../../core/server/models');
const settingsCache = require('../../../core/shared/settings-cache');
const models = require('../../../../core/server/models');
const settingsCache = require('../../../../core/shared/settings-cache');
describe('Unit: models/invite', function () {
before(function () {

View file

@ -1,6 +1,6 @@
const sinon = require('sinon');
const models = require('../../../core/server/models');
const configUtils = require('../../utils/configUtils');
const models = require('../../../../core/server/models');
const configUtils = require('../../../utils/configUtils');
const config = configUtils.config;

View file

@ -1,8 +1,8 @@
const should = require('should');
const sinon = require('sinon');
const models = require('../../../core/server/models');
const testUtils = require('../../utils');
const configUtils = require('../../utils/configUtils');
const models = require('../../../../core/server/models');
const testUtils = require('../../../utils');
const configUtils = require('../../../utils/configUtils');
describe('Unit: models/permission', function () {
before(function () {

View file

@ -2,10 +2,10 @@
const errors = require('@tryghost/errors');
const should = require('should');
const sinon = require('sinon');
const testUtils = require('../../utils');
const knex = require('../../../core/server/data/db').knex;
const urlService = require('../../../core/frontend/services/url');
const models = require('../../../core/server/models');
const testUtils = require('../../../utils');
const knex = require('../../../../core/server/data/db').knex;
const urlService = require('../../../../core/frontend/services/url');
const models = require('../../../../core/server/models');
const security = require('@tryghost/security');
describe('Unit: models/post', function () {

View file

@ -1,6 +1,6 @@
const should = require('should');
const sinon = require('sinon');
const models = require('../../../core/server/models');
const models = require('../../../../core/server/models');
describe('Unit: models/session', function () {
before(function () {

View file

@ -1,9 +1,9 @@
const should = require('should');
const sinon = require('sinon');
const mockDb = require('mock-knex');
const models = require('../../../core/server/models');
const {knex} = require('../../../core/server/data/db');
const events = require('../../../core/server/lib/common/events');
const models = require('../../../../core/server/models');
const {knex} = require('../../../../core/server/data/db');
const events = require('../../../../core/server/lib/common/events');
const errors = require('@tryghost/errors');
describe('Unit: models/settings', function () {

View file

@ -1,4 +1,4 @@
const models = require('../../../core/server/models');
const models = require('../../../../core/server/models');
const should = require('should');
const sinon = require('sinon');
@ -38,4 +38,3 @@ describe('Unit: models/single-use-token', function () {
});
});
});

View file

@ -1,9 +1,9 @@
const should = require('should');
const url = require('url');
const sinon = require('sinon');
const models = require('../../../core/server/models');
const testUtils = require('../../utils');
const {knex} = require('../../../core/server/data/db');
const models = require('../../../../core/server/models');
const testUtils = require('../../../utils');
const {knex} = require('../../../../core/server/data/db');
describe('Unit: models/tag', function () {
before(function () {

View file

@ -2,11 +2,11 @@ const should = require('should');
const sinon = require('sinon');
const Promise = require('bluebird');
const errors = require('@tryghost/errors');
const models = require('../../../core/server/models');
const permissions = require('../../../core/server/services/permissions');
const schema = require('../../../core/server/data/schema');
const models = require('../../../../core/server/models');
const permissions = require('../../../../core/server/services/permissions');
const schema = require('../../../../core/server/data/schema');
const security = require('@tryghost/security');
const testUtils = require('../../utils');
const testUtils = require('../../../utils');
describe('Unit: models/user', function () {
before(function () {

View file

@ -2,8 +2,8 @@ const errors = require('@tryghost/errors');
const jwt = require('jsonwebtoken');
const should = require('should');
const sinon = require('sinon');
const apiKeyAuth = require('../../../../../core/server/services/auth/api-key');
const models = require('../../../../../core/server/models');
const apiKeyAuth = require('../../../../../../core/server/services/auth/api-key');
const models = require('../../../../../../core/server/models');
describe('Admin API Key Auth', function () {
before(models.init);

View file

@ -1,9 +1,9 @@
const errors = require('@tryghost/errors');
const {authenticateContentApiKey} = require('../../../../../core/server/services/auth/api-key/content');
const models = require('../../../../../core/server/models');
const {authenticateContentApiKey} = require('../../../../../../core/server/services/auth/api-key/content');
const models = require('../../../../../../core/server/models');
const should = require('should');
const sinon = require('sinon');
const testUtils = require('../../../../utils');
const testUtils = require('../../../../../utils');
describe('Content API Key Auth', function () {
before(models.init);

View file

@ -1,7 +1,7 @@
const jwt = require('jsonwebtoken');
const should = require('should');
const {UnauthorizedError} = require('@tryghost/errors');
const members = require('../../../../../core/server/services/auth/members');
const members = require('../../../../../../core/server/services/auth/members');
describe('Auth Service - Members', function () {
it('exports an authenticateMembersToken method', function () {

View file

@ -1,5 +1,5 @@
const sessionMiddleware = require('../../../../../core/server/services/auth').session;
const models = require('../../../../../core/server/models');
const sessionMiddleware = require('../../../../../../core/server/services/auth').session;
const models = require('../../../../../../core/server/models');
const sinon = require('sinon');
const should = require('should');

View file

@ -1,5 +1,5 @@
const SessionStore = require('../../../../../core/server/services/auth/session/store');
const models = require('../../../../../core/server/models');
const SessionStore = require('../../../../../../core/server/services/auth/session/store');
const models = require('../../../../../../core/server/models');
const EventEmitter = require('events');
const {Store} = require('express-session');
const sinon = require('sinon');

View file

@ -1,9 +1,9 @@
const should = require('should');
const sinon = require('sinon');
const configUtils = require('../../utils/configUtils');
const labs = require('../../../core/shared/labs');
const settingsCache = require('../../../core/shared/settings-cache');
const configUtils = require('../../../utils/configUtils');
const labs = require('../../../../core/shared/labs');
const settingsCache = require('../../../../core/shared/settings-cache');
describe('Labs Service', function () {
afterEach(function () {

View file

@ -1,11 +1,11 @@
const should = require('should');
const sinon = require('sinon');
const Promise = require('bluebird');
const mail = require('../../../../core/server/services/mail');
const settingsCache = require('../../../../core/shared/settings-cache');
const configUtils = require('../../../utils/configUtils');
const urlUtils = require('../../../../core/shared/url-utils');
const i18n = require('../../../../core/shared/i18n');
const mail = require('../../../../../core/server/services/mail');
const settingsCache = require('../../../../../core/shared/settings-cache');
const configUtils = require('../../../../utils/configUtils');
const urlUtils = require('../../../../../core/shared/url-utils');
const i18n = require('../../../../../core/shared/i18n');
let mailer;
// Mock SMTP config

View file

@ -1,7 +1,7 @@
const should = require('should');
const sinon = require('sinon');
const mail = require('../../../../core/server/services/mail');
const configUtils = require('../../../utils/configUtils');
const mail = require('../../../../../core/server/services/mail');
const configUtils = require('../../../../utils/configUtils');
describe('Mail: Utils', function () {
const scope = {ghostMailer: null};

View file

@ -2,7 +2,7 @@ const should = require('should');
const sinon = require('sinon');
const errors = require('@tryghost/errors');
const {addEmail, _partitionMembersBySegment, _getEmailMemberRows, _transformEmailRecipientFilter} = require('../../../../core/server/services/mega/mega');
const {addEmail, _partitionMembersBySegment, _getEmailMemberRows, _transformEmailRecipientFilter} = require('../../../../../core/server/services/mega/mega');
describe('MEGA', function () {
describe('addEmail', function () {

View file

@ -1,6 +1,6 @@
const should = require('should');
const {parseReplacements, renderEmailForSegment} = require('../../../../core/server/services/mega/post-email-serializer');
const {parseReplacements, renderEmailForSegment} = require('../../../../../core/server/services/mega/post-email-serializer');
describe('Post Email Serializer', function () {
it('creates replacement pattern for valid format and value', function () {

View file

@ -1,6 +1,6 @@
const should = require('should');
const {getSegmentsFromHtml} = require('../../../../core/server/services/mega/segment-parser');
const {getSegmentsFromHtml} = require('../../../../../core/server/services/mega/segment-parser');
describe('MEGA: Segment Parser', function () {
it('extracts a single segments used in HTML', function () {

View file

@ -1,8 +1,8 @@
const should = require('should');
const UrlUtils = require('@tryghost/url-utils');
const MembersConfigProvider = require('../../../../core/server/services/members/config');
const MembersConfigProvider = require('../../../../../core/server/services/members/config');
const configUtils = require('../../../utils/configUtils');
const configUtils = require('../../../../utils/configUtils');
const sinon = require('sinon');
/**

View file

@ -1,10 +1,10 @@
const should = require('should');
const sinon = require('sinon');
const urlUtils = require('../../../../core/shared/url-utils');
const membersService = require('../../../../core/server/services/members');
const membersMiddleware = require('../../../../core/server/services/members/middleware');
const settingsCache = require('../../../../core/shared/settings-cache');
const urlUtils = require('../../../../../core/shared/url-utils');
const membersService = require('../../../../../core/server/services/members');
const membersMiddleware = require('../../../../../core/server/services/members/middleware');
const settingsCache = require('../../../../../core/shared/settings-cache');
describe('Members Service Middleware', function () {
describe('createSessionFromMagicLink', function () {

View file

@ -1,5 +1,5 @@
const should = require('should');
const stripeConnect = require('../../../../core/server/services/members/stripe-connect');
const stripeConnect = require('../../../../../core/server/services/members/stripe-connect');
describe('Members - Stripe Connect', function () {
it('getStripeConnectOAuthUrl returns the correct url and sets the necessary state on session and url', async function () {

View file

@ -1,8 +1,8 @@
const should = require('should');
const sinon = require('sinon');
const Notifications = require('../../../../core/server/services/notifications/notifications');
const {owner} = require('../../../utils/fixtures/context');
const Notifications = require('../../../../../core/server/services/notifications/notifications');
const {owner} = require('../../../../utils/fixtures/context');
describe('Notifications Service', function () {
it('can browse non-major version upgrade notifications', function () {

View file

@ -1,11 +1,11 @@
const should = require('should');
const sinon = require('sinon');
const testUtils = require('../../../utils');
const testUtils = require('../../../../utils');
const Promise = require('bluebird');
const _ = require('lodash');
const models = require('../../../../core/server/models');
const permissions = require('../../../../core/server/services/permissions');
const providers = require('../../../../core/server/services/permissions/providers');
const models = require('../../../../../core/server/models');
const permissions = require('../../../../../core/server/services/permissions');
const providers = require('../../../../../core/server/services/permissions/providers');
describe('Permissions', function () {
let fakePermissions = [];

View file

@ -1,11 +1,11 @@
const should = require('should');
const sinon = require('sinon');
const testUtils = require('../../../utils');
const testUtils = require('../../../../utils');
const Promise = require('bluebird');
const _ = require('lodash');
const models = require('../../../../core/server/models');
const actionsMap = require('../../../../core/server/services/permissions/actions-map-cache');
const permissions = require('../../../../core/server/services/permissions');
const models = require('../../../../../core/server/models');
const actionsMap = require('../../../../../core/server/services/permissions/actions-map-cache');
const permissions = require('../../../../../core/server/services/permissions');
describe('Permissions', function () {
let fakePermissions = [];

View file

@ -1,5 +1,5 @@
const should = require('should');
const parseContext = require('../../../../core/server/services/permissions/parse-context');
const parseContext = require('../../../../../core/server/services/permissions/parse-context');
describe('Permissions', function () {
describe('parseContext', function () {

View file

@ -1,9 +1,9 @@
const should = require('should');
const sinon = require('sinon');
const testUtils = require('../../../utils');
const testUtils = require('../../../../utils');
const Promise = require('bluebird');
const models = require('../../../../core/server/models');
const providers = require('../../../../core/server/services/permissions/providers');
const models = require('../../../../../core/server/models');
const providers = require('../../../../../core/server/services/permissions/providers');
describe('Permission Providers', function () {
before(function () {

View file

@ -1,7 +1,7 @@
const should = require('should');
const _ = require('lodash');
const errors = require('@tryghost/errors');
const applyPublicRules = require('../../../../core/server/services/permissions/public');
const applyPublicRules = require('../../../../../core/server/services/permissions/public');
describe('Permissions', function () {
describe('applyPublicRules', function () {

View file

@ -1,6 +1,6 @@
const should = require('should');
const {PostsService} = require('../../../../core/server/services/posts/posts-service');
const {PostsService} = require('../../../../../core/server/services/posts/posts-service');
describe('PostsService', function () {
describe('shouldSendEmail', function () {

View file

@ -1,6 +1,6 @@
const should = require('should');
const {validate} = require('../../../../core/server/services/redirects/validation');
const {validate} = require('../../../../../core/server/services/redirects/validation');
describe('UNIT: custom redirects validation', function () {
it('passes validation for a valid redirects config', function () {

View file

@ -2,7 +2,7 @@ const sinon = require('sinon');
const should = require('should');
const fs = require('fs-extra');
const path = require('path');
const DefaultSettingsManager = require('../../../../core/server/services/route-settings/default-settings-manager');
const DefaultSettingsManager = require('../../../../../core/server/services/route-settings/default-settings-manager');
describe('UNIT > Settings Service DefaultSettingsManager:', function () {
beforeEach(function () {
@ -16,12 +16,12 @@ describe('UNIT > Settings Service DefaultSettingsManager:', function () {
describe('Ensure settings files', function () {
it('returns yaml file from settings folder if it exists', async function () {
fs.readFile.withArgs(path.join(__dirname, '../../../utils/fixtures/settings/routes.yaml'), 'utf8').resolves('content');
fs.readFile.withArgs(path.join(__dirname, '../../../../utils/fixtures/settings/routes.yaml'), 'utf8').resolves('content');
const defaultSettingsManager = new DefaultSettingsManager({
type: 'routes',
extension: '.yaml',
destinationFolderPath: path.join(__dirname, '../../../utils/fixtures/settings/'),
destinationFolderPath: path.join(__dirname, '../../../../utils/fixtures/settings/'),
sourceFolderPath: ''
});
@ -32,8 +32,8 @@ describe('UNIT > Settings Service DefaultSettingsManager:', function () {
});
it('copies default settings file if no file found', async function () {
const destinationFolderPath = path.join(__dirname, '../../../utils/fixtures/settings/');
const sourceFolderPath = path.join(__dirname, '../../../../core/server/services/route-settings/');
const destinationFolderPath = path.join(__dirname, '../../../../utils/fixtures/settings/');
const sourceFolderPath = path.join(__dirname, '../../../../../core/server/services/route-settings/');
const defaultSettingsManager = new DefaultSettingsManager({
type: 'routes',
@ -56,7 +56,7 @@ describe('UNIT > Settings Service DefaultSettingsManager:', function () {
});
it('rejects, if error is not a not found error', async function () {
const destinationFolderPath = path.join(__dirname, '../../../utils/fixtures/settings/');
const destinationFolderPath = path.join(__dirname, '../../../../utils/fixtures/settings/');
const defaultSettingsManager = new DefaultSettingsManager({
type: 'routes',

View file

@ -3,13 +3,13 @@ const should = require('should');
const rewire = require('rewire');
const fs = require('fs-extra');
const path = require('path');
const configUtils = require('../../../utils/configUtils');
const configUtils = require('../../../../utils/configUtils');
const errors = require('@tryghost/errors');
const SettingsLoader = rewire('../../../../core/server/services/route-settings/settings-loader');
const SettingsLoader = rewire('../../../../../core/server/services/route-settings/settings-loader');
describe('UNIT > SettingsLoader:', function () {
beforeEach(function () {
configUtils.set('paths:contentPath', path.join(__dirname, '../../../utils/fixtures/'));
configUtils.set('paths:contentPath', path.join(__dirname, '../../../../utils/fixtures/'));
});
afterEach(function () {
@ -64,7 +64,7 @@ describe('UNIT > SettingsLoader:', function () {
it('can find yaml settings file and returns a settings object', function () {
const fsReadFileSpy = sinon.spy(fs, 'readFileSync');
const expectedSettingsFile = path.join(__dirname, '../../../utils/fixtures/settings/routes.yaml');
const expectedSettingsFile = path.join(__dirname, '../../../../utils/fixtures/settings/routes.yaml');
yamlParserStub.returns(yamlStubFile);
validateStub.returns({routes: {}, collections: {}, taxonomies: {}});
@ -105,7 +105,7 @@ describe('UNIT > SettingsLoader:', function () {
});
it('throws error if file can\'t be accessed', function (done) {
const expectedSettingsFile = path.join(__dirname, '../../../utils/fixtures/settings/routes.yaml');
const expectedSettingsFile = path.join(__dirname, '../../../../utils/fixtures/settings/routes.yaml');
const fsError = new Error('no permission');
fsError.code = 'EPERM';

View file

@ -1,8 +1,8 @@
const should = require('should');
const sinon = require('sinon');
const errors = require('@tryghost/errors');
const themeEngine = require('../../../../core/frontend/services/theme-engine');
const validate = require('../../../../core/server/services/route-settings/validate');
const themeEngine = require('../../../../../core/frontend/services/theme-engine');
const validate = require('../../../../../core/server/services/route-settings/validate');
should.equal(true, true);

View file

@ -3,7 +3,7 @@ const should = require('should');
const fs = require('fs-extra');
const yaml = require('js-yaml');
const path = require('path');
const yamlParser = require('../../../../core/server/services/route-settings/yaml-parser');
const yamlParser = require('../../../../../core/server/services/route-settings/yaml-parser');
describe('UNIT > Settings Service yaml parser:', function () {
let yamlSpy;
@ -18,7 +18,7 @@ describe('UNIT > Settings Service yaml parser:', function () {
describe('Yaml Parser', function () {
it('parses correct yaml file', function () {
const file = fs.readFileSync(path.join(__dirname, '../../../utils/fixtures/settings/', 'goodroutes.yaml'), 'utf8');
const file = fs.readFileSync(path.join(__dirname, '../../../../utils/fixtures/settings/', 'goodroutes.yaml'), 'utf8');
const result = yamlParser(file);
should.exist(result);
@ -27,7 +27,7 @@ describe('UNIT > Settings Service yaml parser:', function () {
});
it('rejects with clear error when parsing fails', function () {
const file = fs.readFileSync(path.join(__dirname, '../../../utils/fixtures/settings/', 'badroutes.yaml'), 'utf8');
const file = fs.readFileSync(path.join(__dirname, '../../../../utils/fixtures/settings/', 'badroutes.yaml'), 'utf8');
try {
const result = yamlParser(file);

View file

@ -1,18 +1,18 @@
const sinon = require('sinon');
const _ = require('lodash');
const rewire = require('rewire');
const testUtils = require('../../utils');
const configUtils = require('../../utils/configUtils');
const testUtils = require('../../../utils');
const configUtils = require('../../../utils/configUtils');
// Stuff we test
const slack = rewire('../../../core/server/services/slack');
const slack = rewire('../../../../core/server/services/slack');
const events = require('../../../core/server/lib/common/events');
const events = require('../../../../core/server/lib/common/events');
const logging = require('@tryghost/logging');
const imageLib = require('../../../core/server/lib/image');
const urlService = require('../../../core/frontend/services/url');
const schema = require('../../../core/server/data/schema').checks;
const settingsCache = require('../../../core/shared/settings-cache');
const imageLib = require('../../../../core/server/lib/image');
const urlService = require('../../../../core/frontend/services/url');
const schema = require('../../../../core/server/data/schema').checks;
const settingsCache = require('../../../../core/shared/settings-cache');
// Test data
const slackURL = 'https://hooks.slack.com/services/a-b-c-d';

View file

@ -1,7 +1,7 @@
const should = require('should');
const sinon = require('sinon');
const {getConfig} = require('../../../../core/server/services/stripe/config');
const {getConfig} = require('../../../../../core/server/services/stripe/config');
describe('Stripe - config', function () {
it('Uses direct keys when stripeDirect is true, regardles of which keys exist', function () {

View file

@ -1,7 +1,7 @@
const should = require('should');
const sinon = require('sinon');
const _ = require('lodash');
const themeList = require('../../../../core/server/services/themes/list');
const themeList = require('../../../../../core/server/services/themes/list');
describe('Themes', function () {
afterEach(function () {

View file

@ -3,9 +3,9 @@ const sinon = require('sinon');
const fs = require('fs-extra');
const tmp = require('tmp');
const join = require('path').join;
const config = require('../../../../core/shared/config');
const loader = require('../../../../core/server/services/themes/loader');
const themeList = require('../../../../core/server/services/themes/list');
const config = require('../../../../../core/shared/config');
const loader = require('../../../../../core/server/services/themes/loader');
const themeList = require('../../../../../core/server/services/themes/list');
describe('Themes', function () {
afterEach(function () {

View file

@ -2,7 +2,7 @@ const should = require('should');
const sinon = require('sinon');
const _ = require('lodash');
const validate = require('../../../../core/server/services/themes/validate');
const validate = require('../../../../../core/server/services/themes/validate');
const gscan = require('gscan');

View file

@ -2,10 +2,10 @@ const sinon = require('sinon');
const _ = require('lodash');
const nock = require('nock');
const rewire = require('rewire');
const testUtils = require('../../utils');
const configUtils = require('../../utils/configUtils');
const xmlrpc = rewire('../../../core/server/services/xmlrpc');
const events = require('../../../core/server/lib/common/events');
const testUtils = require('../../../utils');
const configUtils = require('../../../utils/configUtils');
const xmlrpc = rewire('../../../../core/server/services/xmlrpc');
const events = require('../../../../core/server/lib/common/events');
const logging = require('@tryghost/logging');
describe('XMLRPC', function () {

View file

@ -1,7 +1,7 @@
require('should');
const sinon = require('sinon');
const configUtils = require('../../../utils/configUtils');
const controller = require('../../../../core/server/web/admin/controller');
const configUtils = require('../../../../utils/configUtils');
const controller = require('../../../../../core/server/web/admin/controller');
describe('Admin App', function () {
describe('controller', function () {

View file

@ -2,7 +2,7 @@ const should = require('should');
const sinon = require('sinon');
// Thing we are testing
const redirectAdminUrls = require('../../../../core/server/web/admin/middleware')[0];
const redirectAdminUrls = require('../../../../../core/server/web/admin/middleware')[0];
describe('Admin App', function () {
afterEach(function () {

View file

@ -1,5 +1,5 @@
const should = require('should');
const middleware = require('../../../../../../core/server/web/api/canary/content/middleware');
const middleware = require('../../../../../../../core/server/web/api/canary/content/middleware');
describe('Content Api canary middleware', function () {
it('exports an authenticatePublic middleware', function () {
@ -9,7 +9,7 @@ describe('Content Api canary middleware', function () {
describe('authenticatePublic', function () {
it('uses brute content api middleware as the first middleware in the chain', function () {
const firstMiddleware = middleware.authenticatePublic[0];
const brute = require('../../../../../../core/server/web/shared/middlewares/brute');
const brute = require('../../../../../../../core/server/web/shared/middlewares/brute');
should.equal(firstMiddleware, brute.contentApiKey);
});

View file

@ -1,9 +1,9 @@
const should = require('should');
const sinon = require('sinon');
const rewire = require('rewire');
const configUtils = require('../../../../utils/configUtils');
const configUtils = require('../../../../../utils/configUtils');
let cors = rewire('../../../../../core/server/web/api/middleware/cors');
let cors = rewire('../../../../../../core/server/web/api/middleware/cors');
describe('cors', function () {
let res;
@ -33,7 +33,7 @@ describe('cors', function () {
afterEach(function () {
sinon.restore();
configUtils.restore();
cors = rewire('../../../../../core/server/web/api/middleware/cors');
cors = rewire('../../../../../../core/server/web/api/middleware/cors');
});
it('should not be enabled without a request origin header', function (done) {

View file

@ -1,9 +1,9 @@
const should = require('should');
const sinon = require('sinon');
const configUtils = require('../../../../utils/configUtils');
const configUtils = require('../../../../../utils/configUtils');
const imageTransform = require('@tryghost/image-transform');
const logging = require('@tryghost/logging');
const normalize = require('../../../../../core/server/web/api/middleware/normalize-image');
const normalize = require('../../../../../../core/server/web/api/middleware/normalize-image');
describe('normalize', function () {
let res;

View file

@ -1,7 +1,7 @@
const should = require('should');
const sinon = require('sinon');
const constants = require('@tryghost/constants');
const updateUserLastSeenMiddleware = require('../../../../../core/server/web/api/middleware/update-user-last-seen');
const updateUserLastSeenMiddleware = require('../../../../../../core/server/web/api/middleware/update-user-last-seen');
describe('updateUserLastSeenMiddleware', function () {
afterEach(function () {

View file

@ -1,5 +1,5 @@
const should = require('should');
const validation = require('../../../../../core/server/web/api/middleware/upload')._test;
const validation = require('../../../../../../core/server/web/api/middleware/upload')._test;
describe('web utils', function () {
describe('checkFileExists', function () {

View file

@ -1,6 +1,6 @@
const should = require('should');
const sinon = require('sinon');
const versionMatch = require('../../../../../core/server/web/api/middleware/version-match');
const versionMatch = require('../../../../../../core/server/web/api/middleware/version-match');
describe('Version Mismatch', function () {
let req;

View file

@ -1,5 +1,5 @@
const should = require('should');
const middleware = require('../../../../../../core/server/web/api/v2/content/middleware');
const middleware = require('../../../../../../../core/server/web/api/v2/content/middleware');
describe('Content Api v2 middleware', function () {
it('exports an authenticatePublic middleware', function () {
@ -9,7 +9,7 @@ describe('Content Api v2 middleware', function () {
describe('authenticatePublic', function () {
it('uses brute content api middleware as the first middleware in the chain', function () {
const firstMiddleware = middleware.authenticatePublic[0];
const brute = require('../../../../../../core/server/web/shared/middlewares/brute');
const brute = require('../../../../../../../core/server/web/shared/middlewares/brute');
should.equal(firstMiddleware, brute.contentApiKey);
});

View file

@ -1,5 +1,5 @@
const should = require('should');
const middleware = require('../../../../../../core/server/web/api/v3/content/middleware');
const middleware = require('../../../../../../../core/server/web/api/v3/content/middleware');
describe('Content Api v3 middleware', function () {
it('exports an authenticatePublic middleware', function () {
@ -9,7 +9,7 @@ describe('Content Api v3 middleware', function () {
describe('authenticatePublic', function () {
it('uses brute content api middleware as the first middleware in the chain', function () {
const firstMiddleware = middleware.authenticatePublic[0];
const brute = require('../../../../../../core/server/web/shared/middlewares/brute');
const brute = require('../../../../../../../core/server/web/shared/middlewares/brute');
should.equal(firstMiddleware, brute.contentApiKey);
});

View file

@ -1,7 +1,7 @@
const should = require('should');
const sinon = require('sinon');
const ghostLocals = require('../../../../../core/server/web/parent/middleware/ghost-locals');
const bridge = require('../../../../../core/bridge');
const ghostLocals = require('../../../../../../core/server/web/parent/middleware/ghost-locals');
const bridge = require('../../../../../../core/bridge');
describe('Theme Handler', function () {
let req;

View file

@ -2,7 +2,7 @@ const should = require('should');
const sinon = require('sinon');
const validator = require('@tryghost/validator');
const requestId = require('../../../../../core/server/web/parent/middleware/request-id');
const requestId = require('../../../../../../core/server/web/parent/middleware/request-id');
describe('Request ID middleware', function () {
let res;

View file

@ -1,7 +1,7 @@
const should = require('should');
const configUtils = require('../../../utils/configUtils');
const configUtils = require('../../../../utils/configUtils');
const vhostUtils = require('../../../../core/server/web/parent/vhost-utils');
const vhostUtils = require('../../../../../core/server/web/parent/vhost-utils');
describe('vhost utils', function () {
beforeEach(function () {

View file

@ -1,5 +1,5 @@
const should = require('should');
const spamPrevention = require('../../../../../../core/server/web/shared/middlewares/api/spam-prevention');
const spamPrevention = require('../../../../../../../core/server/web/shared/middlewares/api/spam-prevention');
describe('Spam Prevention', function () {
it('exports a contentApiKey method', function () {

View file

@ -1,6 +1,6 @@
const should = require('should');
const sinon = require('sinon');
const brute = require('../../../../../core/server/web/shared/middlewares/brute');
const brute = require('../../../../../../core/server/web/shared/middlewares/brute');
describe('brute middleware', function () {
after(function () {
@ -13,7 +13,7 @@ describe('brute middleware', function () {
describe('contentApiKey', function () {
it('calls the contentApiKey method of spam prevention', function () {
const spamPrevention = require('../../../../../core/server/web/shared/middlewares/api/spam-prevention');
const spamPrevention = require('../../../../../../core/server/web/shared/middlewares/api/spam-prevention');
const contentApiKeyStub = sinon.stub(spamPrevention, 'contentApiKey');
// CASE: we don't care about what params it takes

View file

@ -1,6 +1,6 @@
const should = require('should');
const sinon = require('sinon');
const cacheControl = require('../../../../../core/server/web/shared/middlewares/cache-control');
const cacheControl = require('../../../../../../core/server/web/shared/middlewares/cache-control');
describe('Middleware: cacheControl', function () {
let res;

View file

@ -4,7 +4,7 @@ const rewire = require('rewire');
const express = require('express');
const supertest = require('supertest');
const customRedirects = rewire('../../../../../core/server/web/shared/middlewares/custom-redirects');
const customRedirects = rewire('../../../../../../core/server/web/shared/middlewares/custom-redirects');
const registerRoutes = customRedirects.__get__('_private.registerRoutes');
describe('UNIT: custom redirects', function () {

View file

@ -1,6 +1,6 @@
const should = require('should');
const sinon = require('sinon');
const uncapitalise = require('../../../../../core/server/web/shared/middlewares/uncapitalise');
const uncapitalise = require('../../../../../../core/server/web/shared/middlewares/uncapitalise');
// NOTE: all urls will have had trailing slashes added before uncapitalise is called

View file

@ -1,9 +1,9 @@
const should = require('should');
const sinon = require('sinon');
const rewire = require('rewire');
const urlUtils = require('../../../../utils/urlUtils');
const configUtils = require('../../../../utils/configUtils');
const urlRedirects = rewire('../../../../../core/server/web/shared/middlewares/url-redirects');
const urlUtils = require('../../../../../utils/urlUtils');
const configUtils = require('../../../../../utils/configUtils');
const urlRedirects = rewire('../../../../../../core/server/web/shared/middlewares/url-redirects');
const {frontendSSLRedirect, adminSSLAndHostRedirect} = urlRedirects;
const getAdminRedirectUrl = urlRedirects.__get__('_private.getAdminRedirectUrl');
const getFrontendRedirectUrl = urlRedirects.__get__('_private.getFrontendRedirectUrl');

View file

@ -1,8 +1,8 @@
const should = require('should');
const sinon = require('sinon');
const storage = require('../../../../../core/server/adapters/storage');
const activeTheme = require('../../../../../core/frontend/services/theme-engine/active');
const handleImageSizes = require('../../../../../core/server/web/site/middleware/handle-image-sizes.js');
const storage = require('../../../../../../core/server/adapters/storage');
const activeTheme = require('../../../../../../core/frontend/services/theme-engine/active');
const handleImageSizes = require('../../../../../../core/server/web/site/middleware/handle-image-sizes.js');
// @TODO make these tests lovely and non specific to implementation
describe('handleImageSizes middleware', function () {

View file

@ -1,10 +1,10 @@
const should = require('should');
const sinon = require('sinon');
const express = require('../../../../../core/shared/express');
const serveFavicon = require('../../../../../core/server/web/site/middleware/serve-favicon');
const settingsCache = require('../../../../../core/shared/settings-cache');
const storage = require('../../../../../core/server/adapters/storage');
const configUtils = require('../../../../utils/configUtils');
const express = require('../../../../../../core/shared/express');
const serveFavicon = require('../../../../../../core/server/web/site/middleware/serve-favicon');
const settingsCache = require('../../../../../../core/shared/settings-cache');
const storage = require('../../../../../../core/server/adapters/storage');
const configUtils = require('../../../../../utils/configUtils');
const path = require('path');
describe('Serve Favicon', function () {
@ -55,7 +55,7 @@ describe('Serve Favicon', function () {
const middleware = serveFavicon();
req.path = '/favicon.png';
storage.getStorage().storagePath = path.join(__dirname, '../../../../../test/utils/fixtures/images/');
storage.getStorage().storagePath = path.join(__dirname, '../../../../../utils/fixtures/images/');
localSettingsCache.icon = 'favicon.png';
res = {
@ -75,7 +75,7 @@ describe('Serve Favicon', function () {
const middleware = serveFavicon();
req.path = '/favicon.ico';
storage.getStorage().storagePath = path.join(__dirname, '../../../../../test/utils/fixtures/images/');
storage.getStorage().storagePath = path.join(__dirname, '../../../../../utils/fixtures/images/');
localSettingsCache.icon = 'favicon.ico';
res = {
@ -95,7 +95,7 @@ describe('Serve Favicon', function () {
const middleware = serveFavicon();
req.path = '/favicon.ico';
storage.getStorage().storagePath = path.join(__dirname, '../../../../../test/utils/fixtures/images/');
storage.getStorage().storagePath = path.join(__dirname, '../../../../../utils/fixtures/images/');
localSettingsCache.icon = 'myicon.ico';
res = {

View file

@ -1,7 +1,7 @@
const should = require('should');
const sinon = require('sinon');
const fs = require('fs-extra');
const servePublicFile = require('../../../../../core/server/web/site/middleware/serve-public-file');
const servePublicFile = require('../../../../../../core/server/web/site/middleware/serve-public-file');
describe('servePublicFile', function () {
let res;

View file

@ -1,9 +1,9 @@
const should = require('should');
const sinon = require('sinon');
const express = require('../../../../../core/shared/express');
const themeEngine = require('../../../../../core/frontend/services/theme-engine');
const staticTheme = require('../../../../../core/server/web/site/middleware/static-theme');
const express = require('../../../../../../core/shared/express');
const themeEngine = require('../../../../../../core/frontend/services/theme-engine');
const staticTheme = require('../../../../../../core/server/web/site/middleware/static-theme');
describe('staticTheme', function () {
let expressStaticStub;

View file

@ -0,0 +1,101 @@
const should = require('should');
const sinon = require('sinon');
const Promise = require('bluebird');
const rssCache = require('../../../../../core/frontend/services/rss/cache');
const renderer = require('../../../../../core/frontend/services/rss/renderer');
describe('RSS: Renderer', function () {
let rssCacheStub;
let res;
let baseUrl;
beforeEach(function () {
rssCacheStub = sinon.stub(rssCache, 'getXML');
res = {
locals: {},
set: sinon.stub(),
send: sinon.spy()
};
baseUrl = '/rss/';
});
afterEach(function () {
sinon.restore();
});
it('calls the cache and attempts to render, even without data', function (done) {
rssCacheStub.returns(new Promise.resolve('dummyxml'));
renderer.render(res, baseUrl).then(function () {
rssCacheStub.calledOnce.should.be.true();
rssCacheStub.firstCall.args.should.eql(['/rss/', {}]);
res.set.calledOnce.should.be.true();
res.set.calledWith('Content-Type', 'text/xml; charset=UTF-8').should.be.true();
res.send.calledOnce.should.be.true();
res.send.calledWith('dummyxml').should.be.true();
done();
}).catch(done);
});
it('correctly merges locals into empty data before rendering', function (done) {
rssCacheStub.returns(new Promise.resolve('dummyxml'));
res.locals = {foo: 'bar'};
renderer.render(res, baseUrl).then(function () {
rssCacheStub.calledOnce.should.be.true();
rssCacheStub.firstCall.args.should.eql(['/rss/', {foo: 'bar'}]);
res.set.calledOnce.should.be.true();
res.set.calledWith('Content-Type', 'text/xml; charset=UTF-8').should.be.true();
res.send.calledOnce.should.be.true();
res.send.calledWith('dummyxml').should.be.true();
done();
}).catch(done);
});
it('correctly merges locals into non-empty data before rendering', function (done) {
rssCacheStub.returns(new Promise.resolve('dummyxml'));
res.locals = {foo: 'bar'};
const data = {foo: 'baz', fizz: 'buzz'};
renderer.render(res, baseUrl, data).then(function () {
rssCacheStub.calledOnce.should.be.true();
rssCacheStub.firstCall.args.should.eql(['/rss/', {foo: 'baz', fizz: 'buzz'}]);
res.set.calledOnce.should.be.true();
res.set.calledWith('Content-Type', 'text/xml; charset=UTF-8').should.be.true();
res.send.calledOnce.should.be.true();
res.send.calledWith('dummyxml').should.be.true();
done();
}).catch(done);
});
it('does nothing if it gets an error', function (done) {
rssCacheStub.returns(new Promise.reject(new Error('Fake Error')));
renderer.render(res, baseUrl).then(function () {
done('This should have errored');
}).catch(function (err) {
err.message.should.eql('Fake Error');
rssCacheStub.calledOnce.should.be.true();
rssCacheStub.firstCall.args.should.eql(['/rss/', {}]);
res.set.called.should.be.false();
res.send.called.should.be.false();
done();
});
});
});

View file

@ -0,0 +1,124 @@
const should = require('should');
const sinon = require('sinon');
// Stuff we are testing
const events = require('../../../../../core/server/lib/common/events');
const SiteMapManager = require('../../../../../core/frontend/services/sitemap/manager');
const PostGenerator = require('../../../../../core/frontend/services/sitemap/post-generator');
const PageGenerator = require('../../../../../core/frontend/services/sitemap/page-generator');
const TagGenerator = require('../../../../../core/frontend/services/sitemap/tag-generator');
const UserGenerator = require('../../../../../core/frontend/services/sitemap/user-generator');
const IndexGenerator = require('../../../../../core/frontend/services/sitemap/index-generator');
describe('Unit: sitemap/manager', function () {
let eventsToRemember;
const makeStubManager = function () {
let posts;
let pages;
let tags;
let authors;
let index;
index = new IndexGenerator();
posts = new PostGenerator();
pages = new PageGenerator();
tags = new TagGenerator();
authors = new UserGenerator();
return new SiteMapManager({posts: posts, pages: pages, tags: tags, authors: authors});
};
beforeEach(function () {
eventsToRemember = {};
sinon.stub(events, 'on').callsFake(function (eventName, callback) {
eventsToRemember[eventName] = callback;
});
sinon.stub(PostGenerator.prototype, 'getXml');
sinon.stub(PostGenerator.prototype, 'addUrl');
sinon.stub(PostGenerator.prototype, 'removeUrl');
sinon.stub(IndexGenerator.prototype, 'getXml');
});
afterEach(function () {
sinon.restore();
});
describe('SiteMapManager', function () {
let manager;
let fake;
beforeEach(function () {
manager = makeStubManager();
fake = sinon.stub();
});
it('create SiteMapManager with defaults', function () {
const siteMapManager = new SiteMapManager();
should.exist(siteMapManager.posts);
should.exist(siteMapManager.pages);
should.exist(siteMapManager.users);
should.exist(siteMapManager.tags);
});
it('can create a SiteMapManager instance', function () {
should.exist(manager);
Object.keys(eventsToRemember).length.should.eql(4);
should.exist(eventsToRemember['url.added']);
should.exist(eventsToRemember['url.removed']);
should.exist(eventsToRemember['router.created']);
should.exist(eventsToRemember['routers.reset']);
});
describe('trigger url events', function () {
it('url.added', function () {
eventsToRemember['url.added']({
url: {
relative: '/test/',
absolute: 'https://myblog.com/test/'
},
resource: {
config: {
type: 'posts'
},
data: {}
}
});
PostGenerator.prototype.addUrl.calledOnce.should.be.true();
});
it('url.removed', function () {
eventsToRemember['url.removed']({
url: {
relative: '/test/',
absolute: 'https://myblog.com/test/'
},
resource: {
config: {
type: 'posts'
},
data: {}
}
});
PostGenerator.prototype.removeUrl.calledOnce.should.be.true();
});
});
it('fn: getSiteMapXml', function () {
PostGenerator.prototype.getXml.returns('xml');
manager.getSiteMapXml('posts').should.eql('xml');
PostGenerator.prototype.getXml.calledOnce.should.be.true();
});
it('fn: getIndexXml', function () {
IndexGenerator.prototype.getXml.returns('xml');
manager.getIndexXml().should.eql('xml');
IndexGenerator.prototype.getXml.calledOnce.should.be.true();
});
});
});