Ghost/ghost/stripe/test/unit/lib/Migrations.test.js
Fabien 'egg' O'Carroll 633dc08c11 Added migration to update Stripe Product names (#376)
refs https://github.com/TryGhost/Team/issues/1289

We had a bug where Tiers would have a name of 'Default Product', and a
Stripe Product would be created with the same name. This migration will
fixes those broken Stripe Products
2022-03-09 14:41:59 +00:00

107 lines
3.4 KiB
JavaScript

const assert = require('assert');
const sinon = require('sinon');
const Migrations = require('../../../lib/Migrations');
describe('Migrations', function () {
describe('updateStripeProductNamesFromDefaultProduct', function () {
it('Does not update Stripe product if name is not "Default Product"', async function () {
const api = {
getProduct: sinon.stub().resolves({
id: 'prod_123',
name: 'Bronze'
}),
updateProduct: sinon.stub().resolves()
};
const models = {
Product: {
transaction: fn => fn()
},
StripeProduct: {
findPage: sinon.stub().resolves({
data: [{
get(key) {
return key;
}
}],
meta: {}
})
},
Settings: {
findOne: sinon.stub().resolves({
key: 'title',
value: 'Site Title'
})
}
};
const migrations = new Migrations({
models,
api
});
await migrations.updateStripeProductNamesFromDefaultProduct();
assert(
api.updateProduct.called === false,
'Stripe product should not be updated if name is not "Default Product"'
);
});
it('Updates the Stripe Product name if it is Default Product', async function () {
const api = {
getProduct: sinon.stub().resolves({
id: 'prod_123',
name: 'Default Product'
}),
updateProduct: sinon.stub().resolves()
};
const models = {
Product: {
transaction: fn => fn()
},
StripeProduct: {
findPage: sinon.stub().resolves({
data: [{
get(key) {
return key;
}
}],
meta: {}
})
},
Settings: {
findOne: sinon.stub().resolves({
get(key) {
if (key === 'key') {
return 'title';
}
if (key === 'value') {
return 'Site Title';
}
return key;
}
})
}
};
const migrations = new Migrations({
models,
api
});
await migrations.updateStripeProductNamesFromDefaultProduct();
assert(
api.updateProduct.calledOnce,
'Stripe product should be updated if name is "Default Product"'
);
assert(
api.updateProduct.calledWith('prod_123', {
name: 'Site Title'
}),
'Stripe product should have been updated with the site title as name'
);
});
});
});