agmission/Development/server/docs/archived/TEST_FIXES_APPLIED.md

159 lines
5.3 KiB
Markdown

# 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 <args>`
### 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.