diff --git a/__tests__/users.ts b/__tests__/users.ts index 0275e004a2..5301f03ffa 100644 --- a/__tests__/users.ts +++ b/__tests__/users.ts @@ -4059,6 +4059,27 @@ describe('mutation deleteUser', () => { expect(userOne).toEqual(null); }); + it('should not call cancel subscription for gifted subscription', async () => { + loggedUser = '1'; + + await con.getRepository(User).update( + { id: '1' }, + { + subscriptionFlags: updateSubscriptionFlags({ + subscriptionId: '123', + provider: SubscriptionProvider.Paddle, + giftExpirationDate: new Date(Date.now() + 86400000), // 1 day from now + }), + }, + ); + + await client.mutate(MUTATION); + + expect(cancelSubscription).not.toHaveBeenCalled(); + const userOne = await con.getRepository(User).findOneBy({ id: '1' }); + expect(userOne).toEqual(null); + }); + describe('when user has a storekit subscription', () => { beforeEach(async () => { await saveFixtures(con, User, [ diff --git a/src/common/user.ts b/src/common/user.ts index 36244770b2..ad07b63b24 100644 --- a/src/common/user.ts +++ b/src/common/user.ts @@ -47,13 +47,18 @@ export const deleteUser = async ( } if (subscriptionFlags?.provider === SubscriptionProvider.Paddle) { - await cancelSubscription({ - subscriptionId: subscriptionFlags.subscriptionId, - }); + const isGifted = !!subscriptionFlags.giftExpirationDate; + // gifted subscription is a one-time payment hence not considered subscription in Paddle's terms + if (!isGifted) { + await cancelSubscription({ + subscriptionId: subscriptionFlags.subscriptionId, + }); + } logger.info( { provider: SubscriptionProvider.Paddle, userId, + isGifted, subscriptionId: subscriptionFlags.subscriptionId, }, 'Subscription cancelled user deletion',