mirror of
https://github.com/TryGhost/Ghost.git
synced 2025-02-10 23:36:14 -05:00
🐛 Fixed importing Stripe Plans with amount 0 (#12062)
closes #12049 Stripe plans used to default to 0, and our new validation of plan amounts were causing issues when importing from an older version of Ghost, this updates the validation to be skipped when importing. - Added regression test for importing plans
This commit is contained in:
parent
b3aec95230
commit
6232981be7
2 changed files with 41 additions and 8 deletions
|
@ -125,10 +125,10 @@ Settings = ghostBookshelf.Model.extend({
|
||||||
async onValidate(model, attr, options) {
|
async onValidate(model, attr, options) {
|
||||||
await ghostBookshelf.Model.prototype.onValidate.call(this, model, attr, options);
|
await ghostBookshelf.Model.prototype.onValidate.call(this, model, attr, options);
|
||||||
|
|
||||||
await Settings.validators.all(model);
|
await Settings.validators.all(model, options);
|
||||||
|
|
||||||
if (typeof Settings.validators[model.get('key')] === 'function') {
|
if (typeof Settings.validators[model.get('key')] === 'function') {
|
||||||
await Settings.validators[model.get('key')](model);
|
await Settings.validators[model.get('key')](model, options);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
@ -353,14 +353,20 @@ Settings = ghostBookshelf.Model.extend({
|
||||||
throw new errors.ValidationError(validationErrors.join('\n'));
|
throw new errors.ValidationError(validationErrors.join('\n'));
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
async stripe_plans(model) {
|
async stripe_plans(model, options) {
|
||||||
const plans = JSON.parse(model.get('value'));
|
const plans = JSON.parse(model.get('value'));
|
||||||
for (const plan of plans) {
|
for (const plan of plans) {
|
||||||
// We check 100, not 1, because amounts are in fractional units
|
// Stripe plans used to be allowed (and defaulted to!) 0 amount plans
|
||||||
if (plan.amount < 100 && plan.name !== 'Complimentary') {
|
// this causes issues to people importing from older versions of Ghost
|
||||||
throw new errors.ValidationError({
|
// even if they don't use Members/Stripe
|
||||||
message: 'Plans cannot have an amount less than 1'
|
// issue: https://github.com/TryGhost/Ghost/issues/12049
|
||||||
});
|
if (!options.importing) {
|
||||||
|
// We check 100, not 1, because amounts are in fractional units
|
||||||
|
if (plan.amount < 100 && plan.name !== 'Complimentary') {
|
||||||
|
throw new errors.ValidationError({
|
||||||
|
message: 'Plans cannot have an amount less than 1'
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (typeof plan.name !== 'string') {
|
if (typeof plan.name !== 'string') {
|
||||||
|
|
|
@ -1185,6 +1185,33 @@ describe('Integration: Importer', function () {
|
||||||
posts[1].html.should.eql('<figure class="kg-card kg-image-card kg-width-wide"><img src="source" class="kg-image" alt></figure><!--kg-card-begin: markdown--><h1 id="postcontent">Post Content</h1>\n<!--kg-card-end: markdown-->');
|
posts[1].html.should.eql('<figure class="kg-card kg-image-card kg-width-wide"><img src="source" class="kg-image" alt></figure><!--kg-card-begin: markdown--><h1 id="postcontent">Post Content</h1>\n<!--kg-card-end: markdown-->');
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('Can import stripe plans with an "amount" of 0', async function () {
|
||||||
|
const exportData = exportedLatestBody().db[0];
|
||||||
|
|
||||||
|
exportData.data.settings.push({
|
||||||
|
id: 'blahblah',
|
||||||
|
group: 'members',
|
||||||
|
type: 'array',
|
||||||
|
flags: null,
|
||||||
|
created_at: '2020-04-20 16:20:00',
|
||||||
|
updated_at: '2020-04-20 16:20:00',
|
||||||
|
key: 'stripe_plans',
|
||||||
|
value: JSON.stringify([{
|
||||||
|
name: 'Monthly',
|
||||||
|
interval: 'month',
|
||||||
|
currency: 'usd',
|
||||||
|
amount: 0
|
||||||
|
}, {
|
||||||
|
name: 'Yearly',
|
||||||
|
interval: 'year',
|
||||||
|
currency: 'usd',
|
||||||
|
amount: 0
|
||||||
|
}])
|
||||||
|
});
|
||||||
|
|
||||||
|
await dataImporter.doImport(exportData, importOptions);
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('Existing database', function () {
|
describe('Existing database', function () {
|
||||||
|
|
Loading…
Add table
Reference in a new issue