feature/IO-3357-Reynolds-and-Reynolds-DMS-API-Integration - Checkpoint

This commit is contained in:
Dave
2025-10-07 16:45:06 -04:00
parent c149d457e7
commit 2ffc4b81f4
28 changed files with 2594 additions and 1642 deletions

127
server/rr/rr-test.js Normal file
View File

@@ -0,0 +1,127 @@
// 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);
}
})();