UNPKG

pricing4ts

Version:

![NPM Version](https://img.shields.io/npm/v/pricing4ts) Pricing4TS is a TypeScript-based toolkit designed to enhance the server-side functionality of a pricing-driven SaaS by enabling the seamless integration of pricing plans into the application logic. T

75 lines (58 loc) 1.98 kB
import { PricingContext, PricingContextManager } from '../../src/server/server'; import { PricingAware } from '../../src/server/decorators/PricingAware'; export class PricingContextImpl extends PricingContext { private static jwtExpirationTime = 86400000; getConfigFilePath(): string { return 'tests/resources/pricing/full/petclinic.yml'; } getJwtSecret(): string { return 'secret'; } getJwtExpiration(): number { return PricingContextImpl.jwtExpirationTime; } getSubscriptionContext(): Record<string, boolean | string | number> { return { username: 'test-user', pets: 2, visits: 2, }; } getUserPlan(): string { return 'GOLD'; } getUserAddOns(): string[] { return []; } static setJwtExpirationTime(time: number): void { this.jwtExpirationTime = time; } } class SampleService { @PricingAware('pets') methodThatRequiresPetsFeature() { return 'This a method that requires the pets feature to be enabled'; } @PricingAware('consultations') methodThatRequiresConsultationsFeature() { return 'This a method that requires the consultations feature to be enabled'; } } describe('PricingAware decorator tests with PricingContextImpl', () => { let sampleService: SampleService; beforeAll(() => { const pricingContext: PricingContext = new PricingContextImpl(); PricingContextManager.registerContext(pricingContext); sampleService = new SampleService(); }); it('should throw an error when calling a method that requires the pets feature', () => { expect(sampleService.methodThatRequiresPetsFeature()).toBe( 'This a method that requires the pets feature to be enabled' ); }); it('should throw an error when calling a method that requires the consultations feature', () => { expect(() => sampleService.methodThatRequiresConsultationsFeature()).toThrow( 'Feature consultations is not enabled for the current user!' ); }); });