Skip to content

Commit

Permalink
feat: return future subscription info too
Browse files Browse the repository at this point in the history
  • Loading branch information
stfsy committed Oct 9, 2022
1 parent f16162c commit e6b1803
Show file tree
Hide file tree
Showing 2 changed files with 13 additions and 12 deletions.
23 changes: 12 additions & 11 deletions lib/subscription-info.js
Original file line number Diff line number Diff line change
Expand Up @@ -24,23 +24,24 @@ class SubscriptionInfo {
*/

/**
* Reads and returns subscription related information
* Reads and returns subscription related information. This method returns also future subscription info.
*
* @property {Array<String>} ids ids necessary to lookup possibly nested subscription object
* @property {Number} [validBeforeMillis=new Date(2099, 0)] timestamp indicating until which time info should be included. Defaults to year 2099.
*
* @returns {SubscriptionInfos}
*/
async getSubscriptionInfo(ids) {
async getSubscriptionInfo(ids, validBeforeMillis = new Date(2099, 0)) {
const result = await this._storage.get(ids)
const { subscription } = result

const status = await this.getStartAndEndDates(subscription)
const statusTrail = await this.getStatusTrail(subscription)
const paymentsTrail = await this.getPaymentsTrail(subscription)
const statusTrail = await this.getStatusTrail(subscription, validBeforeMillis)
const paymentsTrail = await this.getPaymentsTrail(subscription, validBeforeMillis)

return Object.keys(status).reduce((context, subscriptionPlanId) => {
const subscriptionPlanInfo = Object.assign(status[subscriptionPlanId], {
status_trail: statusTrail[subscriptionPlanId],
status_trail: statusTrail[subscriptionPlanId] || [],
payments_trail: paymentsTrail[subscriptionPlanId] || []
})

Expand Down Expand Up @@ -83,8 +84,8 @@ class SubscriptionInfo {
* @param {Object} subscription
* @returns {StartAndEndDateBySubscription} containing the start and end date
*/
async getStartAndEndDates(subscription) {
const statusByPlanId = this._bySubscriptionId(subscription.status, new Date(2099, 1).getTime())
async getStartAndEndDates(subscription, validBeforeMillis = Date.now()) {
const statusByPlanId = this._bySubscriptionId(subscription.status, validBeforeMillis)

return Object.entries(statusByPlanId).reduce((context, [subscriptionPlanId, status]) => {
context[subscriptionPlanId] = this._getStartAndEndDates(status)
Expand Down Expand Up @@ -131,8 +132,8 @@ class SubscriptionInfo {
* @param {Object} subscription
* @returns {Object}
*/
async getPaymentsTrail(subscription) {
const paymentsByPlanId = this._bySubscriptionId(subscription.payments)
async getPaymentsTrail(subscription, validBeforeMillis = Date.now()) {
const paymentsByPlanId = this._bySubscriptionId(subscription.payments, validBeforeMillis)

return Object.entries(paymentsByPlanId).reduce((context, [subscriptionPlanId, payments]) => {
context[subscriptionPlanId] = this._getPaymentsTrail(payments)
Expand Down Expand Up @@ -232,8 +233,8 @@ class SubscriptionInfo {
* @param {Object} subscription
* @returns {Object}
*/
async getStatusTrail(subscription) {
const statusByPlanId = this._bySubscriptionId(subscription.status)
async getStatusTrail(subscription, validBeforeMillis = Date.now()) {
const statusByPlanId = this._bySubscriptionId(subscription.status, validBeforeMillis)

return Object.entries(statusByPlanId).reduce((context, [subscriptionPlanId, status]) => {
context[subscriptionPlanId] = this._getStatusTrail(status)
Expand Down
2 changes: 1 addition & 1 deletion test/spec/subscription-info.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -377,7 +377,7 @@ describe('SubscriptionInfo', () => {
await subscriptions.addSubscriptionCancelledStatus(payload)

const { subscription: sub } = await storage.get(ids)
const { [createPayload.subscription_plan_id]: { start, end } } = await subscriptionInfo.getStartAndEndDates(sub)
const { [createPayload.subscription_plan_id]: { start, end } } = await subscriptionInfo.getStartAndEndDates(sub, new Date(2099, 1))
expect(start).to.equal(startTimeString)
expect(end).to.equal(endTimeString)
})
Expand Down

0 comments on commit e6b1803

Please sign in to comment.