159 lines
5.3 KiB
Markdown
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.
|