EDI Test Order Generator

This document describes the rake tasks for generating and testing EDI orders across all partner integrations.

Overview

The EDI test order generator creates realistic test orders for all EDI partners using Faker to generate random but valid data. This is useful for:

  • Testing EDI order processing fixes
  • Verifying shipping cost calculations
  • Testing new EDI integrations
  • Load testing the system
  • Training and documentation

Supported Partners

The generator supports 20 active EDI partner configurations:

Note: Only partners with active: true in their orchestrator configuration are included in the generator.

CommerceHub Partners (4)

  • commercehub_thd_us - Home Depot US
  • commercehub_thd_ca - Home Depot Canada
  • commercehub_lowes_ca - Lowe's Canada
  • commercehub_costco_ca - Costco Canada

Amazon Seller Central (3)

  • amazon_seller_central_us - Amazon US
  • amazon_seller_central_ca - Amazon Canada
  • amazon_seller_central_fr - Amazon France

Wayfair (2)

  • wayfair_us - Wayfair US
  • wayfair_ca - Wayfair Canada

MFT Gateway (3)

  • mft_gateway_build_com - Build.com
  • mft_gateway_canadian_tire - Canadian Tire
  • mft_gateway_zoro_tools - Zoro Tools

Mirakl Sellers - European (7)

  • leroymerlin_adeo - Leroy Merlin (France, Spain, Portugal, Italy)
  • bricodepot_es - Bricodepot Spain
  • bricodepot_pt - Bricodepot Portugal
  • bricomarche - Bricomarche
  • castorama - Castorama
  • leclerc - Leclerc
  • maxeda - Maxeda

Houzz (1)

  • houzz / houzz_us - Houzz

Inactive Partners (Not in Generator)

The following partners exist but are not active (active: false) and are excluded from the generator:

  • amazon_seller_central_uk - Amazon UK (inactive)
  • channel_engine_america - ChannelEngine Americas (archived)
  • channel_engine_europe - ChannelEngine Europe (archived)

Active Partners Not Yet Configured

The following partners are active in the system but don't have generator implementations (not needed for testing):

  • European Amazon Seller Central: BE, DE, ES, IT, NL, PL, SE (FR is configured)
  • Amazon Vendor Central: amazon_vc_seller_api_wasn4, amazon_vc_seller_api_wat4d, amazon_vc_seller_api_watof, amazon_vc_seller_api_wax7v
  • MFT Gateway Amazon VC: mft_gateway_amazon_vc_edi_wasn4, mft_gateway_amazon_vc_edi_wat0f
  • Walmart: walmart_seller_us

Rake Tasks

Generate Test Orders

Generate test EDI orders for one or all partners:

# Generate 1 order for a specific partner
bundle exec rake "edi:test_orders:generate[commercehub_thd_us,1]"

# Generate 5 orders for Wayfair US
bundle exec rake "edi:test_orders:generate[wayfair_us,5]"

# Generate 1 order for Amazon France
bundle exec rake "edi:test_orders:generate[amazon_seller_central_fr,1]"

# Generate 1 order for each partner (default count = 1)
bundle exec rake "edi:test_orders:generate[all]"

# Generate 3 orders for each partner
bundle exec rake "edi:test_orders:generate[all,3]"

Note: Orders are created in ready state but NOT automatically processed.

Process Test Orders

Process all test orders that are in ready state:

bundle exec rake edi:test_orders:process

This will:

  • Find all test ECLs in 'ready' state (identified by TEST or FAKE in the data)
  • Process each one
  • Create orders with line items, deliveries, and shipping costs
  • Report success or failures

Clean Up Test Data

Remove all test orders and related data:

bundle exec rake edi:test_orders:cleanup

This will:

  • Find all test ECLs (identified by file_name = 'TEST_EDI_ORDER_GENERATOR')
  • Delete associated orders (cascades to deliveries, line items, payments, etc.)
  • Delete the test ECLs

⚠️ Warning: This is destructive! It will permanently delete test orders.

Note: Only ECLs created by the test generator are marked with the special file_name field and will be cleaned up by this task. Manually created test ECLs will not be affected.

Example Workflow

Full Test Cycle

# 1. Generate test orders for all partners
bundle exec rake "edi:test_orders:generate[all,2]"

# 2. Process all test orders
bundle exec rake edi:test_orders:process

# 3. Verify results (optional - manual check in CRM)
# Visit the CRM and check that orders were created with deliveries

# 4. Clean up
bundle exec rake edi:test_orders:cleanup

Testing a Specific Partner

# 1. Generate test order
bundle exec rake "edi:test_orders:generate[commercehub_thd_us,1]"

# 2. Get the ECL ID from output (e.g., "Created ECL #2898561")

# 3. Process it manually with more control
bundle exec rails runner 'ecl = EdiCommunicationLog.find(2898561); ecl.process'

# 4. Inspect the results
bundle exec rails runner '
  ecl = EdiCommunicationLog.find(2898561)
  order = ecl.orders.first
  puts "Order: #{order.reference_number}"
  puts "Deliveries: #{order.deliveries.count}"
  puts "Shipping costs: #{order.deliveries.first&.shipping_costs&.count}"
'

# 5. Clean up when done
bundle exec rake edi:test_orders:cleanup

Generated Data

The test order generator creates realistic data using Faker:

Product Data

  • Uses actual active catalog items from Home Depot USA catalog
  • Includes real SKUs, UPCs, and prices
  • Random quantity (currently fixed at 1)

Address Data

  • Random US addresses with valid format
  • Faker-generated names
  • Valid US states and zip codes
  • Random phone numbers (10 digits)

Order Identifiers

  • Transaction IDs prefixed with "TEST-" for easy identification
  • PO numbers prefixed with "TEST"
  • Customer order numbers prefixed with "TESTCUST"
  • Unique IDs to prevent collisions

Shipping Information

  • Standard ground shipping (UNSP_CG for Home Depot)
  • Ship dates set to tomorrow
  • Proper personPlace mappings in XML

Verification Checklist

After processing test orders, verify:

  • Order created successfully
  • Order has correct state (usually in_cr_hold)
  • Order has shipping method set
  • Delivery created (state: quoting)
  • Shipping costs calculated (check count > 0)
  • Line items created with correct prices
  • Payment created
  • No errors in logs

Quick Verification Script

bundle exec rails runner '
  ecl_id = ARGV[0] || EdiCommunicationLog.where("data LIKE ?", "%TEST%").where(state: "processed").last&.id
  ecl = EdiCommunicationLog.find(ecl_id)
  order = ecl.orders.first
  delivery = order.deliveries.first
  
  puts "\n=== Verification Report ==="
  puts "ECL ##{ecl.id}: #{ecl.state}"
  puts "Order ##{order.id}: #{order.reference_number} (#{order.state})"
  puts "Shipping method: #{order.shipping_method}"
  puts "Total: $#{order.total}"
  puts "Delivery ##{delivery.id}: #{delivery.state}"
  puts "Shipping costs: #{delivery.shipping_costs.count}"
  puts "Top 3 costs:"
  delivery.shipping_costs.limit(3).each do |sc|
    puts "  - #{sc.shipping_option.name}: $#{sc.cost}"
  end
  puts "✅ All checks passed!" if delivery.shipping_costs.any?
' 2898561

Troubleshooting

Orders Not Creating Deliveries

If test orders are created but have no deliveries:

  1. Check if order.retrieve_shipping_costs was called in the processor
  2. Verify the shipping address is valid
  3. Check logs for shipping cost calculation errors

Invalid Address Errors

If you get "Country must exist" or similar errors:

  • This indicates a mismatch in the XML personPlace references
  • The generator should handle this correctly, but if not, report it as a bug

No Shipping Costs

If delivery exists but has no shipping costs:

  1. Check if the address is in a supported region
  2. Verify the item has valid dimensions/weight
  3. Check carrier service availability

Test Orders in Production

⚠️ NEVER run test order generation in production!

Test orders are marked with TEST/FAKE identifiers, but they will still:

  • Create real order records
  • Reserve inventory
  • Send notifications
  • Potentially be processed for fulfillment

Always use test orders in development or staging environments only.

Development Notes

Adding New Partners

To add a new EDI partner to the generator:

  1. Add the partner to the PARTNERS hash in lib/tasks/edi_test_orders.rake
  2. Create a generate_PARTNER method
  3. Follow the existing pattern for data structure
  4. Test thoroughly before committing

Modifying Generated Data

The find_valid_catalog_item method selects random active items from the Home Depot USA catalog. To use different items:

  • Modify the catalog selection
  • Update product filtering criteria
  • Adjust quantity logic as needed

Data Format Notes

  • XML partners (CommerceHub): Use proper XML structure with personPlace mappings
  • JSON partners (All others): Use nested JSON structures matching their API specs
  • All partners should use realistic data that matches their actual message formats

Related Documentation

Support

For issues with the test order generator:

  1. Check the rake task output for error messages
  2. Review the generated ECL data in the database
  3. Check application logs for processing errors
  4. Verify all EDI processors have the order.retrieve_shipping_costs fix applied

Change Log

2025-10-15

  • Initial release
  • Support for all 8 EDI partners
  • Faker-based data generation
  • Cleanup and processing tasks added