0
Fork 0
mirror of https://github.com/TryGhost/Ghost.git synced 2025-02-03 23:00:14 -05:00
ghost/test/regression/exporter/exporter.test.js
Fabien 'egg' O'Carroll 2f33292600
Added members_product_events table (#13236)
refs https://github.com/TryGhost/Team/issues/873

This table is to track events related to members be given or having
removed access to products. It will allow us to provide start dates for
access for complimentary members, as well as being able to track access
to products over time, either for individual members or for aggregates.
2021-08-23 16:29:15 +02:00

124 lines
4.3 KiB
JavaScript

const should = require('should');
const sinon = require('sinon');
const testUtils = require('../../utils');
const _ = require('lodash');
const ghostVersion = require('@tryghost/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_products',
'members_status_events',
'members_product_events',
'members_stripe_customers',
'members_stripe_customers_subscriptions',
'members_subscribe_events',
'migrations',
'migrations_lock',
'mobiledoc_revisions',
'oauth',
'permissions',
'permissions_roles',
'permissions_users',
'posts',
'posts_authors',
'posts_meta',
'posts_tags',
'products',
'benefits',
'products_benefits',
'stripe_products',
'stripe_prices',
'roles',
'roles_users',
'sessions',
'settings',
'snippets',
'tags',
'tokens',
'users',
'webhooks'
];
should.exist(exportData);
should.exist(exportData.meta);
should.exist(exportData.data);
// NOTE: using `Object.keys` here instead of `should.have.only.keys` assertion
// because when `have.only.keys` fails there's no useful diff
Object.keys(exportData.data).sort().should.eql(tables.sort());
Object.keys(exportData.data).sort().should.containDeep(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);
});
});