UNPKG

declastruct-stripe-sdk

Version:

declarative control of stripe constructs, via declastruct

188 lines 9.45 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 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 getInvoiceItems_1 = require("./getInvoiceItems"); const setInvoiceItems_1 = require("./setInvoiceItems"); const log = console; describe('setInvoiceItems', () => { (0, test_fns_1.given)('a customer, invoice, and a few products', () => { let customer; let invoice; let productOne; let productTwo; let productThree; beforeAll(async () => { customer = await (0, setCustomer_1.setCustomer)({ finsert: { email: 'svc-protools.test.items@ehmpathy.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 }); productOne = 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 30 at 9:36pm', description: null, price: new domain_glossary_price_1.Price({ amount: 1369, currency: 'USD', }), metadata: null, url: null, }), }, { stripe: await (0, getStripe_1.getStripe)((0, getStripeCredentials_1.getStripeCredentials)()), log }); productTwo = 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 }); productThree = 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 3:21pm', description: null, price: new domain_glossary_price_1.Price({ amount: 1721, currency: 'USD', }), metadata: null, url: null, }), }, { stripe: await (0, getStripe_1.getStripe)((0, getStripeCredentials_1.getStripeCredentials)()), log }); }); const itemExidToRetain = `cnc.${(0, uuid_fns_1.getUuid)()}`; (0, test_fns_1.when)('we want to set multiple items on a new invoice', () => { let itemsDesired; beforeAll(() => { itemsDesired = [ new DeclaredStripeInvoiceItem_1.DeclaredStripeInvoiceItem({ invoiceRef: { id: invoice.id }, productRef: { id: productOne.id }, description: null, discounts: null, exid: itemExidToRetain, metadata: null, }), new DeclaredStripeInvoiceItem_1.DeclaredStripeInvoiceItem({ invoiceRef: { id: invoice.id }, productRef: { id: productTwo.id }, description: null, discounts: null, exid: `cnc.${(0, uuid_fns_1.getUuid)()}`, metadata: null, }), new DeclaredStripeInvoiceItem_1.DeclaredStripeInvoiceItem({ invoiceRef: { id: invoice.id }, productRef: { id: productThree.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 items to the invoice', async () => { // set the items await (0, setInvoiceItems_1.setInvoiceItems)({ to: { invoiceRef: invoice, }, items: itemsDesired, }, { stripe: await (0, getStripe_1.getStripe)((0, getStripeCredentials_1.getStripeCredentials)()), log }); // verify they were all added const itemsFound = await (0, getInvoiceItems_1.getInvoiceItems)({ by: { invoice: { by: { ref: invoice } } }, }, { stripe: await (0, getStripe_1.getStripe)((0, getStripeCredentials_1.getStripeCredentials)()), log }); expect(itemsFound.length).toEqual(3); }); (0, test_fns_1.then)('it should be idempotent', async () => { // set the items await (0, setInvoiceItems_1.setInvoiceItems)({ to: { invoiceRef: invoice, }, items: itemsDesired, }, { stripe: await (0, getStripe_1.getStripe)((0, getStripeCredentials_1.getStripeCredentials)()), log }); // verify they were all added const itemsFound = await (0, getInvoiceItems_1.getInvoiceItems)({ by: { invoice: { by: { ref: invoice } } }, }, { stripe: await (0, getStripe_1.getStripe)((0, getStripeCredentials_1.getStripeCredentials)()), log }); expect(itemsFound.length).toEqual(3); }); }); (0, test_fns_1.when)('we want to add and remove items on an existing invoice', () => { let itemsDesired; beforeAll(() => { itemsDesired = [ new DeclaredStripeInvoiceItem_1.DeclaredStripeInvoiceItem({ invoiceRef: { id: invoice.id }, productRef: { id: productOne.id }, description: null, discounts: null, exid: itemExidToRetain, metadata: null, }), new DeclaredStripeInvoiceItem_1.DeclaredStripeInvoiceItem({ invoiceRef: { id: invoice.id }, productRef: { id: productTwo.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 and remove items on the invoice', async () => { // set the items await (0, setInvoiceItems_1.setInvoiceItems)({ to: { invoiceRef: invoice, }, items: itemsDesired, }, { stripe: await (0, getStripe_1.getStripe)((0, getStripeCredentials_1.getStripeCredentials)()), log }); // verify they were added and removed const itemsFound = await (0, getInvoiceItems_1.getInvoiceItems)({ by: { invoice: { by: { ref: invoice } } }, }, { stripe: await (0, getStripe_1.getStripe)((0, getStripeCredentials_1.getStripeCredentials)()), log }); expect(itemsFound.length).toEqual(2); }); }); }); }); //# sourceMappingURL=setInvoiceItems.integration.test.js.map