@@ -269,36 +269,58 @@ describe('PromoCodeService', () => {
269269 } ) ;
270270
271271 describe ( 'createUsage()' , ( ) => {
272+ it ( 'should resolve pricing by promo id and create usage record' , async ( ) => {
273+ const plan = createPlan ( { monthlyCharge : 1000 } ) ;
274+ const promoCode = createPromoCode ( {
275+ type : 'percent_discount' ,
276+ percent : 25 ,
277+ } ) ;
278+ const service = createService ( promoCode , { plan } ) ;
279+
280+ const usage = await service . createUsage ( {
281+ promoCodeId : promoCode . _id . toString ( ) ,
282+ userId : new ObjectId ( ) . toString ( ) ,
283+ workspaceId : new ObjectId ( ) ,
284+ plan,
285+ } ) ;
286+
287+ expect ( usage ) . toMatchObject ( { _id : expect . any ( ObjectId ) } ) ;
288+ } ) ;
289+
272290 it ( 'should map duplicate usage creation to limit exceeded error' , async ( ) => {
291+ const plan = createPlan ( { monthlyCharge : 1000 } ) ;
273292 const promoCode = createPromoCode ( {
274293 type : 'fixed_price' ,
275294 amount : 100 ,
276295 } ) ;
277296 const service = new PromoCodeService ( {
297+ promoCodesFactory : {
298+ findOne : jest . fn ( ) . mockResolvedValue ( promoCode ) ,
299+ } ,
278300 promoCodeUsagesFactory : {
279301 countByPromoCodeId : jest . fn ( ) . mockResolvedValue ( 0 ) ,
280302 findByPromoCodeAndUser : jest . fn ( ) . mockResolvedValue ( null ) ,
281303 findByPromoCodeAndWorkspace : jest . fn ( ) . mockResolvedValue ( null ) ,
282304 create : jest . fn ( ) . mockRejectedValue ( { code : 11000 } ) ,
283305 } ,
306+ plansFactory : {
307+ findById : jest . fn ( ) . mockResolvedValue ( plan ) ,
308+ } ,
284309 } as any ) ;
285310
286311 await expectPromoError (
287312 service . createUsage ( {
288- promoCode,
313+ promoCodeId : promoCode . _id . toString ( ) ,
289314 userId : new ObjectId ( ) . toString ( ) ,
290315 workspaceId : new ObjectId ( ) ,
291- planId : new ObjectId ( ) ,
292- benefitType : 'fixed_price' ,
293- originalAmount : 1000 ,
294- finalAmount : 100 ,
295- discountAmount : 900 ,
316+ plan,
296317 } ) ,
297318 PromoCodeErrorCode . LimitExceeded
298319 ) ;
299320 } ) ;
300321
301322 it ( 'should reject second createUsage when insert returns duplicate key' , async ( ) => {
323+ const plan = createPlan ( { monthlyCharge : 1000 } ) ;
302324 const promoCode = createPromoCode ( {
303325 type : 'fixed_price' ,
304326 amount : 100 ,
@@ -307,22 +329,24 @@ describe('PromoCodeService', () => {
307329 . mockResolvedValueOnce ( { _id : new ObjectId ( ) } )
308330 . mockRejectedValueOnce ( { code : 11000 } ) ;
309331 const service = new PromoCodeService ( {
332+ promoCodesFactory : {
333+ findOne : jest . fn ( ) . mockResolvedValue ( promoCode ) ,
334+ } ,
310335 promoCodeUsagesFactory : {
311336 countByPromoCodeId : jest . fn ( ) . mockResolvedValue ( 0 ) ,
312337 findByPromoCodeAndUser : jest . fn ( ) . mockResolvedValue ( null ) ,
313338 findByPromoCodeAndWorkspace : jest . fn ( ) . mockResolvedValue ( null ) ,
314339 create,
315340 } ,
341+ plansFactory : {
342+ findById : jest . fn ( ) . mockResolvedValue ( plan ) ,
343+ } ,
316344 } as any ) ;
317345 const usageParams = {
318- promoCode,
346+ promoCodeId : promoCode . _id . toString ( ) ,
319347 userId : new ObjectId ( ) . toString ( ) ,
320348 workspaceId : new ObjectId ( ) ,
321- planId : new ObjectId ( ) ,
322- benefitType : 'fixed_price' as const ,
323- originalAmount : 1000 ,
324- finalAmount : 100 ,
325- discountAmount : 900 ,
349+ plan,
326350 } ;
327351
328352 await service . createUsage ( usageParams ) ;
0 commit comments