Files
bodyshop/server/rr/rr-test.js

128 lines
4.7 KiB
JavaScript
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
// node server/rr/rr-test.js
/**
* @file rr-test.js
* @description Diagnostic test script for Reynolds & Reynolds (R&R) integration.
* Run with: NODE_ENV=development node server/rr/rr-test.js
*/
const path = require("path");
require("dotenv").config({
path: path.resolve(__dirname, "../../", `.env.${process.env.NODE_ENV || "development"}`)
});
const fs = require("fs/promises");
const mustache = require("mustache");
const { getBaseRRConfig } = require("./rr-constants");
const { RRActions, MakeRRCall } = require("./rr-helpers");
const RRLogger = require("./rr-logger");
// --- Mock socket + redis helpers for standalone test
const socket = {
bodyshopId: process.env.TEST_BODYSHOP_ID || null,
user: { email: "test@romeonline.io" },
emit: (event, data) => console.log(`[SOCKET EVENT] ${event}`, data),
logger: console
};
const redisHelpers = {
setSessionData: async () => {},
getSessionData: async () => {},
setSessionTransactionData: async () => {},
getSessionTransactionData: async () => {},
clearSessionTransactionData: async () => {}
};
(async () => {
try {
console.log("=== Reynolds & Reynolds Integration Test ===");
console.log("NODE_ENV:", process.env.NODE_ENV);
const baseCfg = getBaseRRConfig();
console.log("Base R&R Config (from env):", {
baseUrl: baseCfg.baseUrl,
hasUser: !!baseCfg.username || !!process.env.RR_API_USER || !!process.env.RR_USERNAME,
hasPass: !!baseCfg.password || !!process.env.RR_API_PASS || !!process.env.RR_PASSWORD,
timeout: baseCfg.timeout
});
// ---- test variables for GetAdvisors
const templateVars = {
DealerCode: process.env.RR_DEALER_NAME || "ROME",
DealerName: "Rome Collision Test",
SearchCriteria: {
Department: "Body Shop",
Status: "ACTIVE"
}
};
// Dealer/Store/Branch/PPSysId can come from rr_configuration or env; for test we override:
const dealerConfigOverride = {
// baseUrl can also be overridden here if you want
ppsysid: process.env.RR_PPSYSID || process.env.RR_PP_SYS_ID || process.env.RR_PP_SYSID || "TEST-PPSYSID",
dealer_number: process.env.RR_DEALER_NUMBER || "12345",
store_number: process.env.RR_STORE_NUMBER || "01",
branch_number: process.env.RR_BRANCH_NUMBER || "001",
// creds (optional here; MakeRRCall will fallback to env if omitted)
username: process.env.RR_API_USER || process.env.RR_USERNAME || "Rome",
password: process.env.RR_API_PASS || process.env.RR_PASSWORD || "secret"
};
// Show the first ~600 chars of the envelope we will send (by rendering the template + header)
// NOTE: This is just for printing; MakeRRCall will rebuild with proper header internally.
const templatePath = path.join(__dirname, "xml-templates", "GetAdvisors.xml");
const tpl = await fs.readFile(templatePath, "utf8");
const renderedBody = mustache.render(tpl, templateVars);
// Build a preview envelope using the same helper used by MakeRRCall
const { renderXmlTemplate } = require("./rr-helpers");
const headerPreview = await renderXmlTemplate("_EnvelopeHeader", {
PPSysId: dealerConfigOverride.ppsysid,
DealerNumber: dealerConfigOverride.dealer_number,
StoreNumber: dealerConfigOverride.store_number,
BranchNumber: dealerConfigOverride.branch_number,
Username: dealerConfigOverride.username,
Password: dealerConfigOverride.password,
CorrelationId: "preview-correlation"
});
const previewEnvelope = `
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:rr="http://reynoldsandrey.com/">
<soapenv:Header>
${headerPreview}
</soapenv:Header>
<soapenv:Body>
${renderedBody}
</soapenv:Body>
</soapenv:Envelope>`.trim();
console.log("\n--- Rendered SOAP Envelope (first 600 chars) ---\n");
console.log(previewEnvelope.slice(0, 600));
console.log("... [truncated]\n");
// If we don't have a base URL, skip the live call
if (!baseCfg.baseUrl) {
console.warn("\n⚠ No RR baseUrl defined. Skipping live call.\n");
return;
}
console.log(`--- Sending SOAP Request: ${RRActions.GetAdvisors.action} ---\n`);
const responseXml = await MakeRRCall({
action: "GetAdvisors",
baseUrl: process.env.RR_API_BASE_URL,
body: { template: "GetAdvisors", data: templateVars },
dealerConfig: dealerConfigOverride,
redisHelpers,
socket,
jobid: "test-job",
retries: 1
});
RRLogger(socket, "info", "RR test successful", { bytes: Buffer.byteLength(responseXml, "utf8") });
console.log("\n✅ Test completed successfully.\n");
} catch (error) {
console.error("\n❌ Test failed:", error.message);
console.error(error.stack);
}
})();