@@ -130,6 +130,206 @@ describe("purchaseTeamOrOrgSubscription", () => {
130
130
} )
131
131
) ;
132
132
} ) ;
133
+ it ( "Should create a monthly subscription if billing period is set to monthly" , async ( ) => {
134
+ const FAKE_PAYMENT_ID = "FAKE_PAYMENT_ID" ;
135
+ const user = await prismock . user . create ( {
136
+ data : {
137
+ name : "test" ,
138
+ email : "test@email.com" ,
139
+ } ,
140
+ } ) ;
141
+
142
+ const checkoutSessionsCreate = mockStripeCheckoutSessionsCreate ( {
143
+ url : "SESSION_URL" ,
144
+ } ) ;
145
+
146
+ mockStripeCheckoutSessionRetrieve (
147
+ {
148
+ currency : "USD" ,
149
+ product : {
150
+ id : "PRODUCT_ID" ,
151
+ } ,
152
+ } ,
153
+ [ FAKE_PAYMENT_ID ]
154
+ ) ;
155
+
156
+ mockStripeCheckoutPricesRetrieve ( {
157
+ id : "PRICE_ID" ,
158
+ product : {
159
+ id : "PRODUCT_ID" ,
160
+ } ,
161
+ } ) ;
162
+
163
+ const checkoutPricesCreate = mockStripePricesCreate ( {
164
+ id : "PRICE_ID" ,
165
+ } ) ;
166
+
167
+ const team = await prismock . team . create ( {
168
+ data : {
169
+ name : "test" ,
170
+ metadata : {
171
+ paymentId : FAKE_PAYMENT_ID ,
172
+ } ,
173
+ } ,
174
+ } ) ;
175
+
176
+ const seatsToChargeFor = 1000 ;
177
+ expect (
178
+ await purchaseTeamOrOrgSubscription ( {
179
+ teamId : team . id ,
180
+ seatsUsed : 10 ,
181
+ seatsToChargeFor,
182
+ userId : user . id ,
183
+ isOrg : true ,
184
+ pricePerSeat : 100 ,
185
+ billingPeriod : "MONTHLY" ,
186
+ } )
187
+ ) . toEqual ( { url : "SESSION_URL" } ) ;
188
+
189
+ expect ( checkoutPricesCreate ) . toHaveBeenCalledWith (
190
+ expect . objectContaining ( { recurring : { interval : "month" } } )
191
+ ) ;
192
+
193
+ expect ( checkoutSessionsCreate ) . toHaveBeenCalledWith (
194
+ expect . objectContaining ( {
195
+ line_items : [
196
+ {
197
+ price : "PRICE_ID" ,
198
+ quantity : seatsToChargeFor ,
199
+ } ,
200
+ ] ,
201
+ } )
202
+ ) ;
203
+ } ) ;
204
+ it ( "Should create a annual subscription if billing period is set to annual" , async ( ) => {
205
+ const FAKE_PAYMENT_ID = "FAKE_PAYMENT_ID" ;
206
+ const user = await prismock . user . create ( {
207
+ data : {
208
+ name : "test" ,
209
+ email : "test@email.com" ,
210
+ } ,
211
+ } ) ;
212
+
213
+ const checkoutSessionsCreate = mockStripeCheckoutSessionsCreate ( {
214
+ url : "SESSION_URL" ,
215
+ } ) ;
216
+
217
+ mockStripeCheckoutSessionRetrieve (
218
+ {
219
+ currency : "USD" ,
220
+ product : {
221
+ id : "PRODUCT_ID" ,
222
+ } ,
223
+ } ,
224
+ [ FAKE_PAYMENT_ID ]
225
+ ) ;
226
+
227
+ mockStripeCheckoutPricesRetrieve ( {
228
+ id : "PRICE_ID" ,
229
+ product : {
230
+ id : "PRODUCT_ID" ,
231
+ } ,
232
+ } ) ;
233
+
234
+ const checkoutPricesCreate = mockStripePricesCreate ( {
235
+ id : "PRICE_ID" ,
236
+ } ) ;
237
+
238
+ const team = await prismock . team . create ( {
239
+ data : {
240
+ name : "test" ,
241
+ metadata : {
242
+ paymentId : FAKE_PAYMENT_ID ,
243
+ } ,
244
+ } ,
245
+ } ) ;
246
+
247
+ const seatsToChargeFor = 1000 ;
248
+ expect (
249
+ await purchaseTeamOrOrgSubscription ( {
250
+ teamId : team . id ,
251
+ seatsUsed : 10 ,
252
+ seatsToChargeFor,
253
+ userId : user . id ,
254
+ isOrg : true ,
255
+ pricePerSeat : 100 ,
256
+ billingPeriod : "ANNUALLY" ,
257
+ } )
258
+ ) . toEqual ( { url : "SESSION_URL" } ) ;
259
+
260
+ expect ( checkoutPricesCreate ) . toHaveBeenCalledWith (
261
+ expect . objectContaining ( { recurring : { interval : "year" } } )
262
+ ) ;
263
+
264
+ expect ( checkoutSessionsCreate ) . toHaveBeenCalledWith (
265
+ expect . objectContaining ( {
266
+ line_items : [
267
+ {
268
+ price : "PRICE_ID" ,
269
+ quantity : seatsToChargeFor ,
270
+ } ,
271
+ ] ,
272
+ } )
273
+ ) ;
274
+ } ) ;
275
+
276
+ it ( "It should not create a custom price if price_per_seat is not set" , async ( ) => {
277
+ const FAKE_PAYMENT_ID = "FAKE_PAYMENT_ID" ;
278
+ const user = await prismock . user . create ( {
279
+ data : {
280
+ name : "test" ,
281
+ email : "test@email.com" ,
282
+ } ,
283
+ } ) ;
284
+
285
+ mockStripeCheckoutSessionsCreate ( {
286
+ url : "SESSION_URL" ,
287
+ } ) ;
288
+
289
+ mockStripeCheckoutSessionRetrieve (
290
+ {
291
+ currency : "USD" ,
292
+ product : {
293
+ id : "PRODUCT_ID" ,
294
+ } ,
295
+ } ,
296
+ [ FAKE_PAYMENT_ID ]
297
+ ) ;
298
+
299
+ mockStripeCheckoutPricesRetrieve ( {
300
+ id : "PRICE_ID" ,
301
+ product : {
302
+ id : "PRODUCT_ID" ,
303
+ } ,
304
+ } ) ;
305
+
306
+ const checkoutPricesCreate = mockStripePricesCreate ( {
307
+ id : "PRICE_ID" ,
308
+ } ) ;
309
+
310
+ const team = await prismock . team . create ( {
311
+ data : {
312
+ name : "test" ,
313
+ metadata : {
314
+ paymentId : FAKE_PAYMENT_ID ,
315
+ } ,
316
+ } ,
317
+ } ) ;
318
+
319
+ const seatsToChargeFor = 1000 ;
320
+ expect (
321
+ await purchaseTeamOrOrgSubscription ( {
322
+ teamId : team . id ,
323
+ seatsUsed : 10 ,
324
+ seatsToChargeFor,
325
+ userId : user . id ,
326
+ isOrg : true ,
327
+ billingPeriod : "ANNUALLY" ,
328
+ } )
329
+ ) . toEqual ( { url : "SESSION_URL" } ) ;
330
+
331
+ expect ( checkoutPricesCreate ) . not . toHaveBeenCalled ( ) ;
332
+ } ) ;
133
333
} ) ;
134
334
135
335
describe ( "updateQuantitySubscriptionFromStripe" , ( ) => {
0 commit comments