Ghost/test/regression/exporter/exporter_spec.js
Naz d30ecf70c0 Added latest export body generator
refs https://github.com/TryGhost/Team/issues/555

- Export/Import test suite clean up ctd. See previous commits for context
- Main goal here was to update latest JSON export data. Also hardened tests to make sure this fixture is updated whenever the endpoint changes structure
2021-03-23 00:42:22 +13:00

115 lines
3.9 KiB
JavaScript

const should = require('should');
const sinon = require('sinon');
const testUtils = require('../../utils');
const _ = require('lodash');
const ghostVersion = require('../../../core/server/lib/ghost-version');
const {exportedBodyLatest} = require('../../utils/fixtures/export/body-generator');
// Stuff we are testing
const exporter = require('../../../core/server/data/exporter');
describe('Exporter', function () {
before(testUtils.teardownDb);
afterEach(testUtils.teardownDb);
afterEach(function () {
sinon.restore();
});
beforeEach(testUtils.setup('default', 'settings'));
should.exist(exporter);
it('exports expected table data', function (done) {
exporter.doExport().then(function (exportData) {
const tables = [
'actions',
'api_keys',
'brute',
'email_batches',
'email_recipients',
'emails',
'integrations',
'invites',
'labels',
'members',
'members_email_change_events',
'members_labels',
'members_login_events',
'members_paid_subscription_events',
'members_payment_events',
'members_status_events',
'members_stripe_customers',
'members_stripe_customers_subscriptions',
'members_subscribe_events',
'migrations',
'migrations_lock',
'mobiledoc_revisions',
'permissions',
'permissions_roles',
'permissions_users',
'posts',
'posts_authors',
'posts_meta',
'posts_tags',
'roles',
'roles_users',
'sessions',
'settings',
'snippets',
'tags',
'tokens',
'users',
'webhooks'
];
should.exist(exportData);
should.exist(exportData.meta);
should.exist(exportData.data);
exportData.data.should.have.only.keys(...tables);
exportData.data.should.have.keys(...Object.keys(exportedBodyLatest().db[0].data));
exportData.meta.version.should.equal(ghostVersion.full);
// excludes table should contain no data
const excludedTables = [
'sessions',
'mobiledoc_revisions',
'email_batches',
'email_recipients',
'members_payment_events',
'members_login_events',
'members_email_change_events',
'members_status_events',
'members_paid_subscription_events',
'members_subscribe_events'
];
excludedTables.forEach((tableName) => {
// NOTE: why is this undefined? The key should probably not even be present
should.equal(exportData.data[tableName], undefined);
});
// excludes settings with sensitive data
const excludedSettings = [
'stripe_connect_publishable_key',
'stripe_connect_secret_key',
'stripe_connect_account_id',
'stripe_secret_key',
'stripe_publishable_key',
'members_stripe_webhook_id',
'members_stripe_webhook_secret'
];
excludedSettings.forEach((settingKey) => {
should.not.exist(_.find(exportData.data.settings, {key: settingKey}));
});
should.not.exist(_.find(exportData.data.settings, {key: 'permalinks'}));
// should not export sqlite data
should.not.exist(exportData.data.sqlite_sequence);
done();
}).catch(done);
});
});