declastruct-stripe-sdk
Version:
declarative control of stripe constructs, via declastruct
137 lines • 7.05 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 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