const fs = require('fs'); const path = require('path'); const vm = require('vm'); const assert = require('assert/strict'); const fixtures = require('./fixtures.cjs'); const context = { console, Date, Math, Number, String, Object, RegExp }; vm.createContext(context); for (const file of ['Config.gs', 'Parsers.gs', 'Code.gs']) { const source = fs.readFileSync(path.join(__dirname, '..', 'src', file), 'utf8') .replace(/^const /gm, 'var '); vm.runInContext(source, context, { filename: file }); } const fieldNation = context.parseWorkOrderMessage_(fixtures.fieldNationNew); assert.equal(fieldNation.ok, true); assert.equal(fieldNation.record.platform, 'Field Nation'); assert.equal(fieldNation.record.workOrderId, '19660234'); assert.equal(fieldNation.record.payTotal, 225); assert.equal(fieldNation.record.effectiveRate, 75); assert.equal(fieldNation.record.city, 'Raleigh'); const workMarket = context.parseWorkOrderMessage_(fixtures.workMarketRouted); assert.equal(workMarket.ok, true); assert.equal(workMarket.record.platform, 'WorkMarket'); assert.equal(workMarket.record.notificationType, 'Routed'); assert.equal(workMarket.record.workOrderId, 'WM-884221'); assert.equal(workMarket.record.payType, 'Fixed Rate'); const unknown = context.parseWorkOrderMessage_(fixtures.unknown); assert.equal(unknown.ok, false); assert.equal(context.isSupportedPlatformSender_('Field Nation '), true); assert.equal(context.isSupportedPlatformSender_('WorkMarket '), true); assert.equal(context.isSupportedPlatformSender_('Unrelated sender '), false); assert.equal( context.buildPlatformInboxQuery_({ lookbackDays: 7 }, { getName: () => 'WO Parser/Processed' }), 'in:inbox {from:fieldnation from:workmarket} -label:"WO Parser/Processed" newer_than:7d' ); assert.equal(context.isPublicTemplate_({ getId: () => context.WO_PARSER.TEMPLATE_SPREADSHEET_ID }), true); assert.equal(context.isPublicTemplate_({ getId: () => 'recipient-copy-id' }), false); console.log('Parser fixtures passed.');