UNPKG

declastruct-stripe-sdk

Version:

declarative control of stripe constructs, via declastruct

137 lines 7.05 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const domain_glossary_price_1 = require("domain-glossary-price"); const test_fns_1 = require("test-fns"); const uuid_fns_1 = require("uuid-fns"); const getStripeCredentials_1 = require("../../__test_assets__/getStripeCredentials"); const DeclaredStripeDiscountCoupon_1 = require("../../domain/objects/DeclaredStripeDiscountCoupon"); const DeclaredStripeInvoiceItem_1 = require("../../domain/objects/DeclaredStripeInvoiceItem"); const DeclaredStripeProduct_1 = require("../../domain/objects/DeclaredStripeProduct"); const getStripe_1 = require("../auth/getStripe"); const setCustomer_1 = require("../customer/setCustomer"); const genInvoiceDraft_1 = require("../invoice/genInvoiceDraft"); const setProduct_1 = require("../product/setProduct"); const setInvoiceItem_1 = require("./setInvoiceItem"); const log = console; describe('setInvoiceItem', () => { (0, test_fns_1.given)('a customer, invoice, and product', () => { let customer; let invoice; let product; beforeAll(async () => { customer = await (0, setCustomer_1.setCustomer)({ finsert: { email: 'svc-protools.test.items@ahbode.dev', name: 'svc-protools.test.items', description: 'test', metadata: null, phone: null, }, }, { stripe: await (0, getStripe_1.getStripe)((0, getStripeCredentials_1.getStripeCredentials)()), log }); invoice = await (0, genInvoiceDraft_1.genInvoiceDraft)({ invoice: { customerRef: customer, exid: (0, uuid_fns_1.getUuid)(), config: { autoAdvance: false, collectionMethod: 'charge_automatically', }, description: null, metadata: null, dueDate: null, }, }, { stripe: await (0, getStripe_1.getStripe)((0, getStripeCredentials_1.getStripeCredentials)()), log }); product = await (0, setProduct_1.setProduct)({ finsert: new DeclaredStripeProduct_1.DeclaredStripeProduct({ id: `test_${(0, uuid_fns_1.getUuid)()}`, active: true, name: 'Ads Lead: Junk Removal, Jul 31 at 11:03am', description: null, price: new domain_glossary_price_1.Price({ amount: 19700, currency: 'USD', }), metadata: null, url: null, }), }, { stripe: await (0, getStripe_1.getStripe)((0, getStripeCredentials_1.getStripeCredentials)()), log }); }); (0, test_fns_1.when)('we attempt to .finsert a new item', () => { let itemDesired; beforeAll(() => { itemDesired = new DeclaredStripeInvoiceItem_1.DeclaredStripeInvoiceItem({ invoiceRef: { id: invoice.id }, productRef: { id: product.id }, description: null, discounts: null, exid: `cnc.${(0, uuid_fns_1.getUuid)()}`, metadata: null, }); }); (0, test_fns_1.then)('it should be able to add the item to the invoice', async () => { const itemCreated = await (0, setInvoiceItem_1.setInvoiceItem)({ finsert: itemDesired, }, { stripe: await (0, getStripe_1.getStripe)((0, getStripeCredentials_1.getStripeCredentials)()), log }); expect(itemCreated).toEqual(expect.objectContaining({ ...itemDesired, description: product.name, // !: stripe sets the item.description === product.name by default! })); }); (0, test_fns_1.then)('it should not update the item on subsequent attempts', async () => { const newDescription = 'some other description'; const itemCreated = await (0, setInvoiceItem_1.setInvoiceItem)({ finsert: { ...itemDesired, description: newDescription, }, }, { stripe: await (0, getStripe_1.getStripe)((0, getStripeCredentials_1.getStripeCredentials)()), log }); expect(itemCreated.description).not.toEqual(newDescription); expect(itemCreated).toEqual(expect.objectContaining({ ...itemDesired, description: product.name, // retained the original description })); }); }); (0, test_fns_1.when)('we attempt to .upsert a new item', () => { let itemDesired; beforeAll(() => { itemDesired = new DeclaredStripeInvoiceItem_1.DeclaredStripeInvoiceItem({ invoiceRef: { id: invoice.id }, productRef: { id: product.id }, description: null, discounts: null, exid: `cnc.${(0, uuid_fns_1.getUuid)()}`, metadata: null, }); }); (0, test_fns_1.then)('it should be able to add the item to the invoice', async () => { const itemCreated = await (0, setInvoiceItem_1.setInvoiceItem)({ upsert: itemDesired, }, { stripe: await (0, getStripe_1.getStripe)((0, getStripeCredentials_1.getStripeCredentials)()), log }); expect(itemCreated).toEqual(expect.objectContaining({ ...itemDesired, description: product.name, // !: stripe sets the item.description === product.name by default! })); }); (0, test_fns_1.then)('it should update the item on subsequent attempts', async () => { const itemCreated = await (0, setInvoiceItem_1.setInvoiceItem)({ upsert: { ...itemDesired, discounts: [ new DeclaredStripeDiscountCoupon_1.DeclaredStripeDiscountCoupon({ percentOff: 100, duration: 'once', amountOff: null, metadata: null, name: 'Customer was unreachable', }), ], }, }, { stripe: await (0, getStripe_1.getStripe)((0, getStripeCredentials_1.getStripeCredentials)()), log }); console.log(itemCreated); expect(itemCreated.discounts?.length).toEqual(1); }); }); }); }); //# sourceMappingURL=setInvoiceItem.integration.test.js.map