mirror of
https://github.com/TryGhost/Ghost.git
synced 2025-02-10 23:36:14 -05:00
Updated monthly/yearly data in price helper (#13012)
closes https://github.com/TryGhost/Team/issues/761 With multiple products, each product can have an active monthly/yearly price, so we no longer store the monthly/yearly price ids in global settings but instead store them in product table directly. This means we need to update our global `@price` helper to also use the updated schema and use the monthly/yearly prices from product table instead of settings data.
This commit is contained in:
parent
2f1123d6ca
commit
ba9b2ee68f
3 changed files with 13 additions and 29 deletions
|
@ -71,33 +71,18 @@ async function haxGetMembersPriceData() {
|
||||||
|
|
||||||
try {
|
try {
|
||||||
const {products} = await api.canary.products.browse({
|
const {products} = await api.canary.products.browse({
|
||||||
include: 'stripe_prices'
|
include: ['monthly_price','yearly_price']
|
||||||
});
|
});
|
||||||
|
|
||||||
const defaultProduct = products[0];
|
const defaultProduct = products[0];
|
||||||
|
|
||||||
const monthlyPriceId = settingsCache.get('members_monthly_price_id');
|
const monthlyPrice = makePriceObject(defaultProduct.monthly_price || defaultPrice);
|
||||||
const yearlyPriceId = settingsCache.get('members_yearly_price_id');
|
|
||||||
|
|
||||||
const activePrices = defaultProduct.stripe_prices.filter((price) => {
|
const yearlyPrice = makePriceObject(defaultProduct.yearly_price || defaultPrice);
|
||||||
return price.active;
|
|
||||||
});
|
|
||||||
|
|
||||||
const nonZeroPrices = activePrices.filter((price) => {
|
|
||||||
return price.amount !== 0;
|
|
||||||
});
|
|
||||||
|
|
||||||
const monthlyPrice = nonZeroPrices.find((price) => {
|
|
||||||
return price.id === monthlyPriceId;
|
|
||||||
});
|
|
||||||
|
|
||||||
const yearlyPrice = nonZeroPrices.find((price) => {
|
|
||||||
return price.id === yearlyPriceId;
|
|
||||||
});
|
|
||||||
|
|
||||||
const priceData = {
|
const priceData = {
|
||||||
monthly: makePriceObject(monthlyPrice || defaultPrice),
|
monthly: monthlyPrice,
|
||||||
yearly: makePriceObject(yearlyPrice || defaultPrice),
|
yearly: yearlyPrice,
|
||||||
currency: monthlyPrice ? monthlyPrice.currency : defaultPrice.currency
|
currency: monthlyPrice ? monthlyPrice.currency : defaultPrice.currency
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -49,15 +49,6 @@ describe('Front-end members behaviour', function () {
|
||||||
return 'price-data-test-theme';
|
return 'price-data-test-theme';
|
||||||
}
|
}
|
||||||
|
|
||||||
const stripePrices = testUtils.DataGenerator.forKnex.stripe_prices;
|
|
||||||
if (key === 'members_monthly_price_id') {
|
|
||||||
return stripePrices[1].id;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (key === 'members_yearly_price_id') {
|
|
||||||
return stripePrices[2].id;
|
|
||||||
}
|
|
||||||
|
|
||||||
return originalSettingsCacheGetFn(key, options);
|
return originalSettingsCacheGetFn(key, options);
|
||||||
});
|
});
|
||||||
await testUtils.startGhost();
|
await testUtils.startGhost();
|
||||||
|
|
|
@ -496,6 +496,14 @@ const fixtures = {
|
||||||
return Promise.each(_.cloneDeep(DataGenerator.forKnex.stripe_prices), function (stripePrice) {
|
return Promise.each(_.cloneDeep(DataGenerator.forKnex.stripe_prices), function (stripePrice) {
|
||||||
return models.StripePrice.add(stripePrice, context.internal);
|
return models.StripePrice.add(stripePrice, context.internal);
|
||||||
});
|
});
|
||||||
|
}).then(async function () {
|
||||||
|
// Add monthly/yearly prices to default product for testing
|
||||||
|
const defaultProduct = await models.Product.findOne({slug: 'default-product'}, context.internal);
|
||||||
|
return models.Product.edit({
|
||||||
|
...defaultProduct.toJSON(),
|
||||||
|
monthly_price_id: DataGenerator.forKnex.stripe_prices[1].id,
|
||||||
|
yearly_price_id: DataGenerator.forKnex.stripe_prices[2].id
|
||||||
|
}, _.merge({id: defaultProduct.id}, context.internal));
|
||||||
}).then(function () {
|
}).then(function () {
|
||||||
return Promise.each(_.cloneDeep(DataGenerator.forKnex.stripe_customer_subscriptions), function (subscription) {
|
return Promise.each(_.cloneDeep(DataGenerator.forKnex.stripe_customer_subscriptions), function (subscription) {
|
||||||
return models.StripeCustomerSubscription.add(subscription, context.internal);
|
return models.StripeCustomerSubscription.add(subscription, context.internal);
|
||||||
|
|
Loading…
Add table
Reference in a new issue