declastruct-stripe-sdk
Version:
declarative control of stripe constructs, via declastruct
188 lines • 9.45 kB
JavaScript
"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