feature/IO-3357-Reynolds-and-Reynolds-DMS-API-Integration - Checkpoint
This commit is contained in:
127
server/rr/rr-test.js
Normal file
127
server/rr/rr-test.js
Normal 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);
|
||||
}
|
||||
})();
|
||||
Reference in New Issue
Block a user