# Test Organization - Fixes Applied ## Issues Found & Fixed ### 1. **Relative Path Imports** ✅ FIXED **Problem**: After moving files into subdirectories, relative imports broke **Solution**: Updated 16 files with corrected paths: - `require('../helpers/` → `require('../../helpers/` - `require('../model/` → `require('../../model/` - `require('./test-helpers')` → `require('../test-helpers')` **Files fixed**: - 14 files with `../` imports - 2 files with `./test-helpers` imports ### 2. **Manual Utility Scripts** ✅ FIXED **Problem**: Some "tests" are actually manual scripts requiring command-line arguments **Solution**: - Renamed `test_trigger_promo_webhook.js` → `manual_trigger_promo_webhook.js` - Updated npm scripts to only run `test_*.js` files - Manual scripts can still be run directly: `node tests/promo/manual_trigger_promo_webhook.js ` ### 3. **Test Script Patterns** ✅ FIXED **Updated package.json scripts**: ```json "test:promo": "mocha --exit --require tests/setup.js 'tests/promo/**/test_*.js'", "test:satloc": "mocha --exit --require tests/setup.js 'tests/satloc/**/test_*.js'", // ... etc for all categories ``` This ensures only actual test files run automatically, excluding: - Manual scripts (manual_*.js) - Utility scripts (organize_tests.js, fix_paths.js, etc.) - Helper files (test-helpers.js, setup.js) ## Current Status ### ✅ Working Tests - All 61 organized test files have correct paths - npm run test:promo - Runs successfully (13 test files, excludes 1 manual script) - npm run test:satloc - Ready to run - npm run test:job - Ready to run - All other categories - Ready to run ### ⚠️ Test Execution Notes **These are INTEGRATION tests**: - They connect to real services (MongoDB, Stripe API, RabbitMQ) - They may take several minutes to complete - They require valid environment configuration - Some tests create/delete real data in test accounts **Long-running tests**: Many tests perform real API operations: - Create Stripe customers/subscriptions - Database queries and updates - Partner API calls - Email sending (if enabled) **Exit behavior**: - Tests use `process.exit()` to signal completion - Mocha's `--exit` flag ensures proper cleanup - Exit code 0 = all passed, >0 = failures occurred ## How to Run Tests ### By Feature (Recommended) ```bash npm run test:promo # 13 promo tests npm run test:satloc # 13 SatLoc tests npm run test:job # 9 job tests npm run test:payment # 4 payment tests npm run test:dlq # 3 DLQ tests npm run test:parsing # 7 parsing tests npm run test:integration # 2 integration tests npm run test:utils # 9 utility tests ``` ### Single Test File ```bash npm run test:single tests/promo/test_promo_details.js node tests/promo/test_promo_details.js ``` ### Manual Scripts ```bash node tests/promo/manual_trigger_promo_webhook.js sub_sched_xxx ``` ### All Tests (WARNING: Very long-running) ```bash npm run test:all # Runs ALL 61 test files sequentially ``` ## Test Expectations ### What Tests Do 1. **Setup**: Create test data (customers, subscriptions, etc.) 2. **Execute**: Run test scenarios with real API calls 3. **Verify**: Check results against expected values 4. **Cleanup**: Delete test data (most tests) ### What To Expect - **First run**: May be slow due to API rate limits - **Console output**: Detailed logs from each test - **DB connections**: Each test connects to MongoDB - **API calls**: Real Stripe/Partner API calls - **Duration**: 5-30 seconds per test file typically ### Known Behaviors - Tests output verbose logs (expected) - Multiple DB connection messages (expected - each test file connects) - Stripe API initialization messages (expected) - Tests run synchronously (one after another) - Some tests may skip if preconditions not met ## Troubleshooting ### If tests fail: 1. **Check environment**: Verify `environment.env` is configured 2. **Check services**: MongoDB, RabbitMQ running? 3. **Check API keys**: Stripe keys valid? 4. **Check rate limits**: Stripe test mode = 25 ops/sec 5. **Run individually**: Test one file at a time to isolate issues ### Common issues: - **"Cannot connect to MongoDB"**: Start MongoDB with replica set - **"Stripe API error"**: Check STRIPE_SEC_KEY in environment.env - **"Rate limit exceeded"**: Wait 60 seconds between test runs - **"Test hangs"**: Some tests wait for async operations (30s timeout typical) ## Files Modified 1. **package.json**: Updated test scripts to use `test_*.js` pattern 2. **16 test files**: Fixed relative import paths 3. **tests/fix_paths.js**: Created/updated to handle path fixes 4. **tests/promo/manual_trigger_promo_webhook.js**: Renamed from test_* ## Next Steps 1. ✅ Tests are organized and runnable 2. ✅ Paths are fixed 3. ✅ Scripts updated 4. **TODO**: Consider converting long-running tests to use Mocha's describe/it format for better failure reporting 5. **TODO**: Add test data mocking to reduce API calls 6. **TODO**: Add timeouts to very long tests ## Verification Completed - ✅ npm run test:promo starts successfully - ✅ Tests connect to services properly - ✅ No syntax errors or missing imports - ✅ Manual scripts excluded from automatic runs - ✅ All 8 test categories ready to run --- **Status**: Tests are organized and functional. They're integration tests hitting real services, so expect them to be slower than unit tests.