Test environments are hard to get in the CW world — so teams test in prod. Push back: the test company, version-controlled fixtures, and the replay harness that turns every failure into a regression test.

"Never test in production" sounds too obvious to print. It isn't — testing against production CargoWise is common in this world, because test environments are hard to get and easy to postpone. Push back: ask WiseTech for a test company with its own eAdapter endpoints, and route all integration development through it.
Then move changes through four stages, each catching a class of bug the previous one can't: development (mock CW responses, runs in CI), integration (the CW test environment — real schema validation, real quirks), staging (production-like data in the test environment), production (monitoring on, rollback ready). The staging row earns its keep: mock data is polite; production data is not. The bugs that survive are data-shaped — a company with an ampersand in its name, an address two characters over a limit.
Five artefact types belong in your repo: the CW XSD schema files (UniversalShipment.xsd, Consol.xsd, Forward.xsd), success-case XML payloads, error-case payloads (the valuable ones), XSLT transforms, and expected outputs. When CargoWise updates its schemas, you diff the new XSDs against git and read exactly what changed — instead of discovering it as a production rejection.
Schema-valid is necessary, not sufficient. The eAdapter is, in the words of the Steele library's own docs, "picky about how you compress, wrap, and send your XML." Your error fixtures should encode the real production war stories:
& — "JUICE & WORLD, S.L." produced malformed XML that CW silently rejected. Every string goes through one escape function.DataTargetCollection. Violating it causes duplicate jobs.Build a tool that can replay any saved XML message through your pipeline, compare actual vs expected output, and run the whole fixture library in CI. Feed it from failure handling: every failed message saves its raw XML with a reason code — pre-made fixtures with the bug still inside.
Then the rule that is the entire testing philosophy in one sentence: when you fix a bug, add the failing message as a test case. The fix and the proof travel together, permanently.
Chapter 8 of eAdapter in Production adds the Training-environment cleanup runbook (deactivation order, the IsForwardRegistered invoicing-header gotcha) and the go-live checklist per message type. Get Vol 2 →
Join freight forwarders saving hours every week with CargoMode.
Start for free