tests/backfill-stripe-subscription-end-dates.unit.test.ts
Rama main · réplica de lectura del repositorio original.
import type Stripe from 'stripe'
import { describe, expect, it } from 'vitest'
import { getStripeSubscriptionEndSnapshot } from '../scripts/backfill_stripe_subscription_end_dates.ts'
function subscription(overrides: Partial<Stripe.Subscription>): Stripe.Subscription {
return {
id: 'sub_test',
object: 'subscription',
cancel_at: null,
cancel_at_period_end: false,
customer: 'cus_test',
ended_at: null,
items: {
data: [
{
current_period_end: 1_777_766_400,
current_period_start: 1_775_174_400,
plan: {
usage_type: 'licensed',
},
} as Stripe.SubscriptionItem,
],
},
...overrides,
} as Stripe.Subscription
}
describe('stripe subscription end-date backfill helpers', () => {
it.concurrent('uses Stripe ended_at as the final subscription end date', () => {
const snapshot = getStripeSubscriptionEndSnapshot(subscription({
ended_at: 1_777_507_200,
}))
expect(snapshot.canceled_at).toBe('2026-04-30T00:00:00.000Z')
})
it.concurrent('uses current period end for cancel-at-period-end subscriptions', () => {
const snapshot = getStripeSubscriptionEndSnapshot(subscription({
cancel_at_period_end: true,
}))
expect(snapshot.canceled_at).toBe('2026-05-03T00:00:00.000Z')
expect(snapshot.subscription_anchor_start).toBe('2026-04-03T00:00:00.000Z')
expect(snapshot.subscription_anchor_end).toBe('2026-05-03T00:00:00.000Z')
})
it.concurrent('clears subscription end date for active subscriptions without a scheduled cancellation', () => {
const snapshot = getStripeSubscriptionEndSnapshot(subscription({}))
expect(snapshot.canceled_at).toBeNull()
})
})