@skillsmith/core 0.6.3 → 0.7.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (130) hide show
  1. package/CHANGELOG.md +22 -1
  2. package/README.md +18 -0
  3. package/dist/.tsbuildinfo +1 -1
  4. package/dist/src/api/client.d.ts.map +1 -1
  5. package/dist/src/api/client.events.d.ts.map +1 -1
  6. package/dist/src/api/client.events.js +10 -1
  7. package/dist/src/api/client.events.js.map +1 -1
  8. package/dist/src/api/client.health.d.ts.map +1 -1
  9. package/dist/src/api/client.health.js +7 -1
  10. package/dist/src/api/client.health.js.map +1 -1
  11. package/dist/src/api/client.js +11 -1
  12. package/dist/src/api/client.js.map +1 -1
  13. package/dist/src/api/utils.d.ts +14 -3
  14. package/dist/src/api/utils.d.ts.map +1 -1
  15. package/dist/src/api/utils.js +14 -4
  16. package/dist/src/api/utils.js.map +1 -1
  17. package/dist/src/exports/services.d.ts +0 -1
  18. package/dist/src/exports/services.d.ts.map +1 -1
  19. package/dist/src/exports/services.js +14 -3
  20. package/dist/src/exports/services.js.map +1 -1
  21. package/dist/src/index.d.ts +2 -1
  22. package/dist/src/index.d.ts.map +1 -1
  23. package/dist/src/index.js +4 -1
  24. package/dist/src/index.js.map +1 -1
  25. package/dist/src/types.d.ts +12 -0
  26. package/dist/src/types.d.ts.map +1 -1
  27. package/dist/tests/api/client.auth.test.js +50 -0
  28. package/dist/tests/api/client.auth.test.js.map +1 -1
  29. package/dist/tests/api/utils.test.js +7 -3
  30. package/dist/tests/api/utils.test.js.map +1 -1
  31. package/dist/tests/{billing/stripe-validators.test.d.ts → security/sanitization-stripe-ids.test.d.ts} +1 -1
  32. package/dist/tests/security/sanitization-stripe-ids.test.d.ts.map +1 -0
  33. package/dist/tests/{billing/stripe-validators.test.js → security/sanitization-stripe-ids.test.js} +1 -1
  34. package/dist/tests/security/sanitization-stripe-ids.test.js.map +1 -0
  35. package/dist/tests/shared.test.js.map +1 -1
  36. package/package.json +2 -8
  37. package/dist/src/billing/BillingService.d.ts +0 -101
  38. package/dist/src/billing/BillingService.d.ts.map +0 -1
  39. package/dist/src/billing/BillingService.helpers.d.ts +0 -15
  40. package/dist/src/billing/BillingService.helpers.d.ts.map +0 -1
  41. package/dist/src/billing/BillingService.helpers.js +0 -45
  42. package/dist/src/billing/BillingService.helpers.js.map +0 -1
  43. package/dist/src/billing/BillingService.js +0 -263
  44. package/dist/src/billing/BillingService.js.map +0 -1
  45. package/dist/src/billing/BillingService.types.d.ts +0 -52
  46. package/dist/src/billing/BillingService.types.d.ts.map +0 -1
  47. package/dist/src/billing/BillingService.types.js +0 -6
  48. package/dist/src/billing/BillingService.types.js.map +0 -1
  49. package/dist/src/billing/GDPRComplianceService.d.ts +0 -81
  50. package/dist/src/billing/GDPRComplianceService.d.ts.map +0 -1
  51. package/dist/src/billing/GDPRComplianceService.js +0 -361
  52. package/dist/src/billing/GDPRComplianceService.js.map +0 -1
  53. package/dist/src/billing/StripeClient.d.ts +0 -119
  54. package/dist/src/billing/StripeClient.d.ts.map +0 -1
  55. package/dist/src/billing/StripeClient.js +0 -405
  56. package/dist/src/billing/StripeClient.js.map +0 -1
  57. package/dist/src/billing/StripeReconciliationJob.d.ts +0 -50
  58. package/dist/src/billing/StripeReconciliationJob.d.ts.map +0 -1
  59. package/dist/src/billing/StripeReconciliationJob.js +0 -365
  60. package/dist/src/billing/StripeReconciliationJob.js.map +0 -1
  61. package/dist/src/billing/StripeWebhookHandler.d.ts +0 -49
  62. package/dist/src/billing/StripeWebhookHandler.d.ts.map +0 -1
  63. package/dist/src/billing/StripeWebhookHandler.js +0 -162
  64. package/dist/src/billing/StripeWebhookHandler.js.map +0 -1
  65. package/dist/src/billing/gdpr-types.d.ts +0 -103
  66. package/dist/src/billing/gdpr-types.d.ts.map +0 -1
  67. package/dist/src/billing/gdpr-types.js +0 -7
  68. package/dist/src/billing/gdpr-types.js.map +0 -1
  69. package/dist/src/billing/index.d.ts +0 -18
  70. package/dist/src/billing/index.d.ts.map +0 -1
  71. package/dist/src/billing/index.js +0 -19
  72. package/dist/src/billing/index.js.map +0 -1
  73. package/dist/src/billing/reconciliation-helpers.d.ts +0 -16
  74. package/dist/src/billing/reconciliation-helpers.d.ts.map +0 -1
  75. package/dist/src/billing/reconciliation-helpers.js +0 -53
  76. package/dist/src/billing/reconciliation-helpers.js.map +0 -1
  77. package/dist/src/billing/reconciliation-types.d.ts +0 -71
  78. package/dist/src/billing/reconciliation-types.d.ts.map +0 -1
  79. package/dist/src/billing/reconciliation-types.js +0 -7
  80. package/dist/src/billing/reconciliation-types.js.map +0 -1
  81. package/dist/src/billing/stripe-client-types.d.ts +0 -45
  82. package/dist/src/billing/stripe-client-types.d.ts.map +0 -1
  83. package/dist/src/billing/stripe-client-types.js +0 -7
  84. package/dist/src/billing/stripe-client-types.js.map +0 -1
  85. package/dist/src/billing/stripe-helpers.d.ts +0 -17
  86. package/dist/src/billing/stripe-helpers.d.ts.map +0 -1
  87. package/dist/src/billing/stripe-helpers.js +0 -50
  88. package/dist/src/billing/stripe-helpers.js.map +0 -1
  89. package/dist/src/billing/types.d.ts +0 -266
  90. package/dist/src/billing/types.d.ts.map +0 -1
  91. package/dist/src/billing/types.js +0 -23
  92. package/dist/src/billing/types.js.map +0 -1
  93. package/dist/src/billing/webhook-handlers.d.ts +0 -56
  94. package/dist/src/billing/webhook-handlers.d.ts.map +0 -1
  95. package/dist/src/billing/webhook-handlers.js +0 -303
  96. package/dist/src/billing/webhook-handlers.js.map +0 -1
  97. package/dist/src/billing/webhook-types.d.ts +0 -42
  98. package/dist/src/billing/webhook-types.d.ts.map +0 -1
  99. package/dist/src/billing/webhook-types.js +0 -7
  100. package/dist/src/billing/webhook-types.js.map +0 -1
  101. package/dist/tests/billing/BillingService.test.d.ts +0 -7
  102. package/dist/tests/billing/BillingService.test.d.ts.map +0 -1
  103. package/dist/tests/billing/BillingService.test.js +0 -168
  104. package/dist/tests/billing/BillingService.test.js.map +0 -1
  105. package/dist/tests/billing/GDPRCompliance.test.d.ts +0 -7
  106. package/dist/tests/billing/GDPRCompliance.test.d.ts.map +0 -1
  107. package/dist/tests/billing/GDPRCompliance.test.js +0 -380
  108. package/dist/tests/billing/GDPRCompliance.test.js.map +0 -1
  109. package/dist/tests/billing/StripeClient.test.d.ts +0 -18
  110. package/dist/tests/billing/StripeClient.test.d.ts.map +0 -1
  111. package/dist/tests/billing/StripeClient.test.js +0 -566
  112. package/dist/tests/billing/StripeClient.test.js.map +0 -1
  113. package/dist/tests/billing/StripeReconciliation.test.d.ts +0 -7
  114. package/dist/tests/billing/StripeReconciliation.test.d.ts.map +0 -1
  115. package/dist/tests/billing/StripeReconciliation.test.js +0 -266
  116. package/dist/tests/billing/StripeReconciliation.test.js.map +0 -1
  117. package/dist/tests/billing/StripeWebhookHandler.test.d.ts +0 -16
  118. package/dist/tests/billing/StripeWebhookHandler.test.d.ts.map +0 -1
  119. package/dist/tests/billing/StripeWebhookHandler.test.js +0 -240
  120. package/dist/tests/billing/StripeWebhookHandler.test.js.map +0 -1
  121. package/dist/tests/billing/stripe-helpers.test.d.ts +0 -7
  122. package/dist/tests/billing/stripe-helpers.test.d.ts.map +0 -1
  123. package/dist/tests/billing/stripe-helpers.test.js +0 -91
  124. package/dist/tests/billing/stripe-helpers.test.js.map +0 -1
  125. package/dist/tests/billing/stripe-validators.test.d.ts.map +0 -1
  126. package/dist/tests/billing/stripe-validators.test.js.map +0 -1
  127. package/dist/tests/billing/webhook-handlers.test.d.ts +0 -16
  128. package/dist/tests/billing/webhook-handlers.test.d.ts.map +0 -1
  129. package/dist/tests/billing/webhook-handlers.test.js +0 -519
  130. package/dist/tests/billing/webhook-handlers.test.js.map +0 -1
@@ -1,566 +0,0 @@
1
- /**
2
- * SMI-3415: StripeClient Tests
3
- *
4
- * Tests for StripeClient wrapper including:
5
- * - Constructor initialization
6
- * - Customer management (create, get, update)
7
- * - Checkout session creation
8
- * - Subscription management (get, list, update, cancel, reactivate)
9
- * - Portal session creation
10
- * - Invoice management (list, get, upcoming)
11
- * - Webhook signature verification
12
- * - Price ID resolution
13
- * - Static mapSubscriptionStatus delegation
14
- *
15
- * All Stripe SDK calls are mocked — no real API calls.
16
- */
17
- import { describe, it, expect, vi, beforeEach } from 'vitest';
18
- // ============================================================================
19
- // Mock Stripe SDK before importing StripeClient
20
- // ============================================================================
21
- const mockCustomerCreate = vi.fn();
22
- const mockCustomerRetrieve = vi.fn();
23
- const mockCustomerUpdate = vi.fn();
24
- const mockSubRetrieve = vi.fn();
25
- const mockSubList = vi.fn();
26
- const mockSubUpdate = vi.fn();
27
- const mockSubCancel = vi.fn();
28
- const mockConstructEvent = vi.fn();
29
- const mockSessionCreate = vi.fn();
30
- const mockSessionRetrieve = vi.fn();
31
- const mockPortalCreate = vi.fn();
32
- const mockInvoiceList = vi.fn();
33
- const mockInvoiceRetrieve = vi.fn();
34
- const mockInvoiceCreatePreview = vi.fn();
35
- vi.mock('stripe', () => {
36
- class MockStripeError extends Error {
37
- code;
38
- constructor(message, code) {
39
- super(message);
40
- this.code = code;
41
- }
42
- }
43
- class MockStripe {
44
- customers = {
45
- create: mockCustomerCreate,
46
- retrieve: mockCustomerRetrieve,
47
- update: mockCustomerUpdate,
48
- };
49
- checkout = {
50
- sessions: {
51
- create: mockSessionCreate,
52
- retrieve: mockSessionRetrieve,
53
- },
54
- };
55
- subscriptions = {
56
- retrieve: mockSubRetrieve,
57
- list: mockSubList,
58
- update: mockSubUpdate,
59
- cancel: mockSubCancel,
60
- };
61
- billingPortal = {
62
- sessions: {
63
- create: mockPortalCreate,
64
- },
65
- };
66
- invoices = {
67
- list: mockInvoiceList,
68
- retrieve: mockInvoiceRetrieve,
69
- createPreview: mockInvoiceCreatePreview,
70
- };
71
- webhooks = {
72
- constructEvent: mockConstructEvent,
73
- };
74
- static errors = {
75
- StripeError: MockStripeError,
76
- };
77
- }
78
- return { default: MockStripe };
79
- });
80
- // Import after mock
81
- import { StripeClient } from '../../src/billing/StripeClient.js';
82
- // ============================================================================
83
- // Test Fixtures
84
- // ============================================================================
85
- function createTestPrices() {
86
- return {
87
- individual: {
88
- monthly: 'price_ind_monthly',
89
- annual: 'price_ind_annual',
90
- },
91
- team: {
92
- monthly: 'price_team_monthly',
93
- annual: 'price_team_annual',
94
- },
95
- enterprise: {
96
- monthly: 'price_ent_monthly',
97
- annual: 'price_ent_annual',
98
- },
99
- };
100
- }
101
- function createClient() {
102
- return new StripeClient({
103
- secretKey: 'sk_test_fake',
104
- webhookSecret: 'whsec_test_fake',
105
- prices: createTestPrices(),
106
- appUrl: 'https://test.skillsmith.app',
107
- });
108
- }
109
- // ============================================================================
110
- // Tests
111
- // ============================================================================
112
- describe('StripeClient', () => {
113
- let client;
114
- beforeEach(() => {
115
- vi.clearAllMocks();
116
- client = createClient();
117
- });
118
- // --------------------------------------------------------------------------
119
- // Constructor
120
- // --------------------------------------------------------------------------
121
- describe('constructor', () => {
122
- it('should initialize with provided config', () => {
123
- expect(client).toBeDefined();
124
- });
125
- it('should default appUrl to skillsmith.app', () => {
126
- const c = new StripeClient({
127
- secretKey: 'sk_test_fake',
128
- webhookSecret: 'whsec_test_fake',
129
- prices: createTestPrices(),
130
- });
131
- expect(c).toBeDefined();
132
- });
133
- });
134
- // --------------------------------------------------------------------------
135
- // Customer Management
136
- // --------------------------------------------------------------------------
137
- describe('createCustomer', () => {
138
- it('should create a customer and return ID', async () => {
139
- mockCustomerCreate.mockResolvedValueOnce({ id: 'cus_test123' });
140
- const result = await client.createCustomer({
141
- email: 'test@example.com',
142
- name: 'Test User',
143
- });
144
- expect(result).toBe('cus_test123');
145
- expect(mockCustomerCreate).toHaveBeenCalledWith(expect.objectContaining({
146
- email: 'test@example.com',
147
- name: 'Test User',
148
- metadata: expect.objectContaining({ source: 'skillsmith' }),
149
- }));
150
- });
151
- it('should merge custom metadata with source', async () => {
152
- mockCustomerCreate.mockResolvedValueOnce({ id: 'cus_test456' });
153
- await client.createCustomer({
154
- email: 'test@example.com',
155
- metadata: { org: 'acme' },
156
- });
157
- expect(mockCustomerCreate).toHaveBeenCalledWith(expect.objectContaining({
158
- metadata: { org: 'acme', source: 'skillsmith' },
159
- }));
160
- });
161
- it('should throw BillingError on API failure', async () => {
162
- mockCustomerCreate.mockRejectedValueOnce(new Error('Stripe API down'));
163
- await expect(client.createCustomer({ email: 'fail@example.com' })).rejects.toThrow('Failed to create customer');
164
- });
165
- });
166
- describe('getCustomer', () => {
167
- it('should return customer when found', async () => {
168
- const customer = { id: 'cus_test', email: 'a@b.com', deleted: false };
169
- mockCustomerRetrieve.mockResolvedValueOnce(customer);
170
- const result = await client.getCustomer('cus_test');
171
- expect(result).toEqual(customer);
172
- });
173
- it('should return null for deleted customer', async () => {
174
- mockCustomerRetrieve.mockResolvedValueOnce({ id: 'cus_del', deleted: true });
175
- const result = await client.getCustomer('cus_del');
176
- expect(result).toBeNull();
177
- });
178
- it('should return null for resource_missing error', async () => {
179
- const Stripe = (await import('stripe')).default;
180
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
181
- const stripeErr = new Stripe.errors.StripeError('Not found', 'resource_missing');
182
- mockCustomerRetrieve.mockRejectedValueOnce(stripeErr);
183
- const result = await client.getCustomer('cus_missing');
184
- expect(result).toBeNull();
185
- });
186
- });
187
- describe('updateCustomer', () => {
188
- it('should update and return customer', async () => {
189
- const updated = { id: 'cus_test', email: 'new@b.com' };
190
- mockCustomerUpdate.mockResolvedValueOnce(updated);
191
- const result = await client.updateCustomer('cus_test', {
192
- email: 'new@b.com',
193
- });
194
- expect(result).toEqual(updated);
195
- });
196
- });
197
- // --------------------------------------------------------------------------
198
- // Checkout
199
- // --------------------------------------------------------------------------
200
- describe('createCheckoutSession', () => {
201
- it('should create a checkout session for individual tier', async () => {
202
- mockSessionCreate.mockResolvedValueOnce({
203
- id: 'cs_test_123',
204
- url: 'https://checkout.stripe.com/session',
205
- });
206
- const result = await client.createCheckoutSession({
207
- tier: 'individual',
208
- billingPeriod: 'monthly',
209
- successUrl: 'https://test.com/success',
210
- cancelUrl: 'https://test.com/cancel',
211
- email: 'user@example.com',
212
- });
213
- expect(result.sessionId).toBe('cs_test_123');
214
- expect(result.url).toBe('https://checkout.stripe.com/session');
215
- });
216
- it('should enable adjustable quantity for team tier', async () => {
217
- mockSessionCreate.mockResolvedValueOnce({
218
- id: 'cs_team',
219
- url: 'https://checkout.stripe.com/team',
220
- });
221
- await client.createCheckoutSession({
222
- tier: 'team',
223
- billingPeriod: 'monthly',
224
- seatCount: 5,
225
- successUrl: 'https://test.com/success',
226
- cancelUrl: 'https://test.com/cancel',
227
- });
228
- expect(mockSessionCreate).toHaveBeenCalledWith(expect.objectContaining({
229
- line_items: expect.arrayContaining([
230
- expect.objectContaining({
231
- adjustable_quantity: { enabled: true, minimum: 1, maximum: 1000 },
232
- }),
233
- ]),
234
- }));
235
- });
236
- it('should enable adjustable quantity for enterprise tier', async () => {
237
- mockSessionCreate.mockResolvedValueOnce({
238
- id: 'cs_ent',
239
- url: 'https://checkout.stripe.com/ent',
240
- });
241
- await client.createCheckoutSession({
242
- tier: 'enterprise',
243
- billingPeriod: 'annual',
244
- successUrl: 'https://test.com/success',
245
- cancelUrl: 'https://test.com/cancel',
246
- });
247
- expect(mockSessionCreate).toHaveBeenCalledWith(expect.objectContaining({
248
- line_items: expect.arrayContaining([
249
- expect.objectContaining({
250
- adjustable_quantity: expect.objectContaining({ enabled: true }),
251
- }),
252
- ]),
253
- }));
254
- });
255
- it('should attach customerId when provided', async () => {
256
- mockSessionCreate.mockResolvedValueOnce({ id: 'cs_cust', url: 'url' });
257
- await client.createCheckoutSession({
258
- tier: 'individual',
259
- billingPeriod: 'monthly',
260
- customerId: 'cus_existing',
261
- successUrl: 'https://test.com/success',
262
- cancelUrl: 'https://test.com/cancel',
263
- });
264
- expect(mockSessionCreate).toHaveBeenCalledWith(expect.objectContaining({ customer: 'cus_existing' }));
265
- });
266
- it('should throw BillingError for community tier (no price)', async () => {
267
- await expect(client.createCheckoutSession({
268
- tier: 'community',
269
- billingPeriod: 'monthly',
270
- successUrl: 'https://test.com/success',
271
- cancelUrl: 'https://test.com/cancel',
272
- })).rejects.toThrow('No price configured for tier: community');
273
- });
274
- it('should throw BillingError on Stripe API failure', async () => {
275
- mockSessionCreate.mockRejectedValueOnce(new Error('API error'));
276
- await expect(client.createCheckoutSession({
277
- tier: 'individual',
278
- billingPeriod: 'monthly',
279
- successUrl: 'https://test.com/success',
280
- cancelUrl: 'https://test.com/cancel',
281
- })).rejects.toThrow('Failed to create checkout session');
282
- });
283
- });
284
- describe('getCheckoutSession', () => {
285
- it('should retrieve session with expanded fields', async () => {
286
- const session = { id: 'cs_test', customer: 'cus_1', subscription: 'sub_1' };
287
- mockSessionRetrieve.mockResolvedValueOnce(session);
288
- const result = await client.getCheckoutSession('cs_test');
289
- expect(result).toEqual(session);
290
- expect(mockSessionRetrieve).toHaveBeenCalledWith('cs_test', {
291
- expand: ['subscription', 'customer'],
292
- });
293
- });
294
- });
295
- // --------------------------------------------------------------------------
296
- // Subscription Management
297
- // --------------------------------------------------------------------------
298
- describe('getSubscription', () => {
299
- it('should return subscription when found', async () => {
300
- const sub = { id: 'sub_test', status: 'active' };
301
- mockSubRetrieve.mockResolvedValueOnce(sub);
302
- const result = await client.getSubscription('sub_test');
303
- expect(result).toEqual(sub);
304
- });
305
- it('should return null for resource_missing', async () => {
306
- const Stripe = (await import('stripe')).default;
307
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
308
- const err = new Stripe.errors.StripeError('Not found', 'resource_missing');
309
- mockSubRetrieve.mockRejectedValueOnce(err);
310
- const result = await client.getSubscription('sub_missing');
311
- expect(result).toBeNull();
312
- });
313
- });
314
- describe('listSubscriptions', () => {
315
- it('should list subscriptions for a customer', async () => {
316
- const subs = { data: [{ id: 'sub_1' }, { id: 'sub_2' }] };
317
- mockSubList.mockResolvedValueOnce(subs);
318
- const result = await client.listSubscriptions('cus_test');
319
- expect(result).toHaveLength(2);
320
- expect(mockSubList).toHaveBeenCalledWith(expect.objectContaining({
321
- customer: 'cus_test',
322
- status: 'all',
323
- }));
324
- });
325
- });
326
- describe('updateSubscription', () => {
327
- it('should update tier and billing period', async () => {
328
- const existingSub = {
329
- id: 'sub_test',
330
- items: { data: [{ id: 'si_1', quantity: 1 }] },
331
- metadata: {},
332
- };
333
- mockSubRetrieve.mockResolvedValueOnce(existingSub);
334
- mockSubUpdate.mockResolvedValueOnce({ ...existingSub, status: 'active' });
335
- const result = await client.updateSubscription('sub_test', {
336
- tier: 'team',
337
- billingPeriod: 'annual',
338
- seatCount: 10,
339
- });
340
- expect(result).toBeDefined();
341
- expect(mockSubUpdate).toHaveBeenCalled();
342
- });
343
- it('should update seat count only', async () => {
344
- const existingSub = {
345
- id: 'sub_test',
346
- items: { data: [{ id: 'si_1', quantity: 5 }] },
347
- metadata: {},
348
- };
349
- mockSubRetrieve.mockResolvedValueOnce(existingSub);
350
- mockSubUpdate.mockResolvedValueOnce({ ...existingSub });
351
- await client.updateSubscription('sub_test', {
352
- seatCount: 10,
353
- });
354
- expect(mockSubUpdate).toHaveBeenCalledWith('sub_test', expect.objectContaining({
355
- items: [{ id: 'si_1', quantity: 10 }],
356
- }));
357
- });
358
- it('should throw when subscription not found', async () => {
359
- const Stripe = (await import('stripe')).default;
360
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
361
- const err = new Stripe.errors.StripeError('Not found', 'resource_missing');
362
- mockSubRetrieve.mockRejectedValueOnce(err);
363
- await expect(client.updateSubscription('sub_missing', { seatCount: 5 })).rejects.toThrow('Subscription not found');
364
- });
365
- it('should throw BillingError on update API failure', async () => {
366
- const existingSub = {
367
- id: 'sub_test',
368
- items: { data: [{ id: 'si_1', quantity: 1 }] },
369
- metadata: {},
370
- };
371
- mockSubRetrieve.mockResolvedValueOnce(existingSub);
372
- mockSubUpdate.mockRejectedValueOnce(new Error('API error'));
373
- await expect(client.updateSubscription('sub_test', { seatCount: 5 })).rejects.toThrow('Failed to update subscription');
374
- });
375
- it('should disable proration when prorate=false', async () => {
376
- const existingSub = {
377
- id: 'sub_test',
378
- items: { data: [{ id: 'si_1', quantity: 1 }] },
379
- metadata: {},
380
- };
381
- mockSubRetrieve.mockResolvedValueOnce(existingSub);
382
- mockSubUpdate.mockResolvedValueOnce({ ...existingSub });
383
- await client.updateSubscription('sub_test', {
384
- seatCount: 3,
385
- prorate: false,
386
- });
387
- expect(mockSubUpdate).toHaveBeenCalledWith('sub_test', expect.objectContaining({ proration_behavior: 'none' }));
388
- });
389
- });
390
- describe('cancelSubscription', () => {
391
- it('should cancel immediately when option set', async () => {
392
- mockSubCancel.mockResolvedValueOnce({ id: 'sub_test', status: 'canceled' });
393
- await client.cancelSubscription('sub_test', {
394
- immediately: true,
395
- feedback: 'Too expensive',
396
- });
397
- expect(mockSubCancel).toHaveBeenCalledWith('sub_test', {
398
- cancellation_details: { comment: 'Too expensive' },
399
- });
400
- });
401
- it('should cancel at period end by default', async () => {
402
- mockSubUpdate.mockResolvedValueOnce({ id: 'sub_test', cancel_at_period_end: true });
403
- await client.cancelSubscription('sub_test', {
404
- feedback: 'Switching providers',
405
- });
406
- expect(mockSubUpdate).toHaveBeenCalledWith('sub_test', {
407
- cancel_at_period_end: true,
408
- cancellation_details: { comment: 'Switching providers' },
409
- });
410
- });
411
- it('should cancel at period end with no options', async () => {
412
- mockSubUpdate.mockResolvedValueOnce({ id: 'sub_test', cancel_at_period_end: true });
413
- await client.cancelSubscription('sub_test');
414
- expect(mockSubUpdate).toHaveBeenCalledWith('sub_test', {
415
- cancel_at_period_end: true,
416
- cancellation_details: { comment: undefined },
417
- });
418
- });
419
- it('should throw BillingError on cancellation failure', async () => {
420
- mockSubUpdate.mockRejectedValueOnce(new Error('API error'));
421
- await expect(client.cancelSubscription('sub_test')).rejects.toThrow('Failed to cancel subscription');
422
- });
423
- });
424
- describe('reactivateSubscription', () => {
425
- it('should set cancel_at_period_end to false', async () => {
426
- mockSubUpdate.mockResolvedValueOnce({ id: 'sub_test', cancel_at_period_end: false });
427
- await client.reactivateSubscription('sub_test');
428
- expect(mockSubUpdate).toHaveBeenCalledWith('sub_test', {
429
- cancel_at_period_end: false,
430
- });
431
- });
432
- });
433
- // --------------------------------------------------------------------------
434
- // Customer Portal
435
- // --------------------------------------------------------------------------
436
- describe('createPortalSession', () => {
437
- it('should create a portal session', async () => {
438
- mockPortalCreate.mockResolvedValueOnce({ url: 'https://billing.stripe.com/portal' });
439
- const result = await client.createPortalSession({
440
- customerId: 'cus_test',
441
- returnUrl: 'https://test.com/account',
442
- });
443
- expect(result.url).toBe('https://billing.stripe.com/portal');
444
- });
445
- it('should throw BillingError on failure', async () => {
446
- mockPortalCreate.mockRejectedValueOnce(new Error('API error'));
447
- await expect(client.createPortalSession({
448
- customerId: 'cus_test',
449
- returnUrl: 'https://test.com/account',
450
- })).rejects.toThrow('Failed to create portal session');
451
- });
452
- });
453
- // --------------------------------------------------------------------------
454
- // Invoice Management
455
- // --------------------------------------------------------------------------
456
- describe('listInvoices', () => {
457
- it('should list invoices with defaults', async () => {
458
- mockInvoiceList.mockResolvedValueOnce({
459
- data: [{ id: 'in_1' }],
460
- has_more: false,
461
- });
462
- const result = await client.listInvoices('cus_test');
463
- expect(result.invoices).toHaveLength(1);
464
- expect(result.hasMore).toBe(false);
465
- expect(mockInvoiceList).toHaveBeenCalledWith(expect.objectContaining({ customer: 'cus_test', limit: 10 }));
466
- });
467
- it('should pass custom limit and startingAfter', async () => {
468
- mockInvoiceList.mockResolvedValueOnce({
469
- data: [],
470
- has_more: false,
471
- });
472
- await client.listInvoices('cus_test', {
473
- limit: 5,
474
- startingAfter: 'in_prev',
475
- });
476
- expect(mockInvoiceList).toHaveBeenCalledWith(expect.objectContaining({ limit: 5, starting_after: 'in_prev' }));
477
- });
478
- });
479
- describe('getInvoice', () => {
480
- it('should return invoice when found', async () => {
481
- const invoice = { id: 'in_test', amount_paid: 999 };
482
- mockInvoiceRetrieve.mockResolvedValueOnce(invoice);
483
- const result = await client.getInvoice('in_test');
484
- expect(result).toEqual(invoice);
485
- });
486
- it('should return null for resource_missing', async () => {
487
- const Stripe = (await import('stripe')).default;
488
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
489
- const err = new Stripe.errors.StripeError('Not found', 'resource_missing');
490
- mockInvoiceRetrieve.mockRejectedValueOnce(err);
491
- const result = await client.getInvoice('in_missing');
492
- expect(result).toBeNull();
493
- });
494
- });
495
- describe('getUpcomingInvoice', () => {
496
- it('should return upcoming invoice preview', async () => {
497
- const preview = { id: 'in_upcoming', amount_due: 2500 };
498
- mockInvoiceCreatePreview.mockResolvedValueOnce(preview);
499
- const result = await client.getUpcomingInvoice('cus_test');
500
- expect(result).toEqual(preview);
501
- });
502
- it('should return null when no upcoming invoice', async () => {
503
- const Stripe = (await import('stripe')).default;
504
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
505
- const err = new Stripe.errors.StripeError('No upcoming', 'invoice_upcoming_none');
506
- mockInvoiceCreatePreview.mockRejectedValueOnce(err);
507
- const result = await client.getUpcomingInvoice('cus_test');
508
- expect(result).toBeNull();
509
- });
510
- });
511
- // --------------------------------------------------------------------------
512
- // Webhook Signature
513
- // --------------------------------------------------------------------------
514
- describe('verifyWebhookSignature', () => {
515
- it('should return event on valid signature', () => {
516
- const fakeEvent = { id: 'evt_test', type: 'customer.subscription.created' };
517
- mockConstructEvent.mockReturnValueOnce(fakeEvent);
518
- const result = client.verifyWebhookSignature('payload', 'sig_header');
519
- expect(result).toEqual(fakeEvent);
520
- });
521
- it('should throw BillingError on invalid signature', () => {
522
- mockConstructEvent.mockImplementationOnce(() => {
523
- throw new Error('Signature mismatch');
524
- });
525
- expect(() => client.verifyWebhookSignature('bad', 'bad_sig')).toThrow('Invalid webhook signature');
526
- });
527
- });
528
- // --------------------------------------------------------------------------
529
- // Price ID Resolution
530
- // --------------------------------------------------------------------------
531
- describe('getPriceId', () => {
532
- it('should return null for community tier', () => {
533
- expect(client.getPriceId('community', 'monthly')).toBeNull();
534
- });
535
- it('should return correct price for individual monthly', () => {
536
- expect(client.getPriceId('individual', 'monthly')).toBe('price_ind_monthly');
537
- });
538
- it('should return correct price for team annual', () => {
539
- expect(client.getPriceId('team', 'annual')).toBe('price_team_annual');
540
- });
541
- it('should return null for unknown tier', () => {
542
- expect(client.getPriceId('unknown', 'monthly')).toBeNull();
543
- });
544
- });
545
- // --------------------------------------------------------------------------
546
- // Static Methods
547
- // --------------------------------------------------------------------------
548
- describe('mapSubscriptionStatus (static)', () => {
549
- it('should delegate to stripe-helpers', () => {
550
- expect(StripeClient.mapSubscriptionStatus('active')).toBe('active');
551
- expect(StripeClient.mapSubscriptionStatus('canceled')).toBe('canceled');
552
- expect(StripeClient.mapSubscriptionStatus('past_due')).toBe('past_due');
553
- });
554
- });
555
- // --------------------------------------------------------------------------
556
- // getStripeInstance
557
- // --------------------------------------------------------------------------
558
- describe('getStripeInstance', () => {
559
- it('should return the underlying Stripe instance', () => {
560
- const instance = client.getStripeInstance();
561
- expect(instance).toBeDefined();
562
- expect(instance.customers).toBeDefined();
563
- });
564
- });
565
- });
566
- //# sourceMappingURL=StripeClient.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"StripeClient.test.js","sourceRoot":"","sources":["../../../tests/billing/StripeClient.test.ts"],"names":[],"mappings":"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"}
@@ -1,7 +0,0 @@
1
- /**
2
- * SMI-1069: Stripe Reconciliation Job Tests
3
- *
4
- * Tests for data reconciliation between local database and Stripe.
5
- */
6
- export {};
7
- //# sourceMappingURL=StripeReconciliation.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"StripeReconciliation.test.d.ts","sourceRoot":"","sources":["../../../tests/billing/StripeReconciliation.test.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}