UNPKG

6-mils

Version:

A JS library for sending, receiving, and parsing cXML messages.

183 lines (151 loc) 5.16 kB
/* eslint-env mocha */ const fs = require('fs') const path = require('path') const testsForAllCxmlMessages = require(path.join(__dirname, '../test/shared-unit/cxml.js')) const testsForInboundMessages = require(path.join(__dirname, '../test/shared-unit/inbound.js')) /** * Code under test. * @type {any} */ const T = require('./PunchOutOrderMessage.js') const SAMPLE_CXML = fs.readFileSync(path.join(__dirname, '../test/samples/PunchOutOrderMessage.xml')).toString() function getNewInstance (src) { switch (src) { case 'undefined': return new T() case 'empty-string': return new T('') default: return new T(src || SAMPLE_CXML) } } describe('the "PunchOutOrderMessage" module', function () { describe('the common elements for all cXML messages', function () { testsForAllCxmlMessages(getNewInstance) }) describe('the common elements for all inbound messages', function () { testsForInboundMessages(getNewInstance) }) describe('the instance members specific for this class', function () { /** * To reduce boilerplate code, a shared instance is used for each test, * which gets reset before each one. * @type {Object} */ let instance = null beforeEach(function () { instance = getNewInstance(SAMPLE_CXML) }) describe('supplierInfo', function () { it('must match the values provided in the "<From>" element', function () { const expected = { domain: 'DUNS', id: '83528721' } const actual = instance.supplierInfo expect(actual).to.deep.equal(expected) }) }) describe('buyerInfo', function () { it('must match the values provided in the "<To>" element', function () { const expected = { domain: 'DUNS', id: '65652314' } const actual = instance.buyerInfo expect(actual).to.deep.equal(expected) }) }) describe('senderInfo', function () { it('must match the values provided in the "<Sender>" element', function () { const expected = { domain: 'workchairs.com', id: 'website 1', ua: 'Workchairs cXML Application' } const actual = instance.senderInfo expect(actual).to.deep.equal(expected) }) }) describe('buyerCookie', function () { it('must match the values provided in the "<BuyerCookie>" element', function () { const expected = '1CX3L4843PPZO' const actual = instance.buyerCookie expect(actual).to.equal(expected) }) }) context('when the PunchOutOrderMessage contains "ItemIn" elements', function () { describe('items', function () { it('must match the values provided in the "<ItemIn>" element', function () { const expected = [ { classification: { UNSPSC: '5136030000' }, currency: 'USD', description: 'Leather Reclining Desk Chair with Padded Arms', name: 'Excelsior Desk Chair', quantity: 1, supplierPartId: '5555', supplierPartAuxId: 'E000028901', unitPrice: 254.4, uom: 'EA' }, { classification: { UNSPSC: '5136030000' }, currency: 'USD', description: 'Leather Reclining Desk Chair with Padded Arms', name: 'Leather Reclining Desk Chair with Padded Arms', quantity: 2, supplierPartId: '5555', supplierPartAuxId: 'E000028901', unitPrice: 254.4, uom: 'EA' } ] const actual = instance.items expect(actual).to.deep.equal(expected) }) }) describe('total', function () { it('must match the values provided in the "<ItemIn>" element', function () { const expected = { cost: 763.2, currency: 'USD', items: 2, units: 3 } const actual = instance.total expect(actual).to.deep.equal(expected) }) }) }) context('when the PunchOutOrderMessage does not contain any "ItemIn" elements', function () { const modifiedCxml = SAMPLE_CXML .replace(/<ItemIn quantity="\d+">[^]+<\/ItemIn>/, '') .replace(/<PunchOutOrderMessageHeader[^>]+>[^]+<\/PunchOutOrderMessageHeader>/, '') const newInstance = getNewInstance(modifiedCxml) describe('items', function () { it('must be an empty array', function () { const expected = [] const actual = newInstance.items expect(actual).to.deep.equal(expected) }) }) describe('total', function () { it('must have zero values', function () { const expected = { cost: 0, currency: '', items: 0, units: 0 } const actual = newInstance.total expect(actual).to.deep.equal(expected) }) }) }) }) })