xpeditis2.0/docs/testing/MANUAL_TEST_INSTRUCTIONS.md
David c19af3b119
Some checks failed
CI/CD Pipeline / Backend - Build, Test & Push (push) Failing after 58s
CI/CD Pipeline / Frontend - Build, Test & Push (push) Failing after 5m55s
CI/CD Pipeline / Integration Tests (push) Has been skipped
CI/CD Pipeline / Deployment Summary (push) Has been skipped
CI/CD Pipeline / Deploy to Portainer (push) Has been skipped
CI/CD Pipeline / Discord Notification (Success) (push) Has been skipped
CI/CD Pipeline / Discord Notification (Failure) (push) Has been skipped
docs: reorganiser completement la documentation dans docs/
Reorganisation majeure de toute la documentation du projet pour
ameliorer la navigation et la maintenance.

## Changements principaux

### Organisation (80 -> 4 fichiers .md a la racine)
- Deplace 82 fichiers .md dans docs/ organises en 11 categories
- Conserve uniquement 4 fichiers essentiels a la racine:
  * README.md, CLAUDE.md, PRD.md, TODO.md

### Structure docs/ creee
- installation/ (5 fichiers) - Guides d'installation
- deployment/ (25 fichiers) - Deploiement et infrastructure
- phases/ (21 fichiers) - Historique du developpement
- testing/ (5 fichiers) - Tests et qualite
- architecture/ (6 fichiers) - Documentation technique
- carrier-portal/ (2 fichiers) - Portail transporteur
- csv-system/ (5 fichiers) - Systeme CSV
- debug/ (4 fichiers) - Debug et troubleshooting
- backend/ (1 fichier) - Documentation backend
- frontend/ (1 fichier) - Documentation frontend
- legacy/ (vide) - Pour archives futures

### Documentation nouvelle
- docs/README.md - Index complet de toute la documentation (367 lignes)
  * Guide de navigation par scenario
  * Recherche rapide par theme
  * FAQ et commandes rapides
- docs/CLEANUP-REPORT-2025-12-22.md - Rapport detaille du nettoyage

### Scripts reorganises
- add-email-to-csv.py -> scripts/
- deploy-to-portainer.sh -> docker/

### Fichiers supprimes
- 1536w default.svg (11MB) - Fichier non utilise

### References mises a jour
- CLAUDE.md - Section Documentation completement reecrite
- docs/architecture/EMAIL_IMPLEMENTATION_STATUS.md - Chemin script Python
- docs/deployment/REGISTRY_PUSH_GUIDE.md - Chemins script deploiement

## Metriques
- 87 fichiers modifies/deplaces
- 82 fichiers .md organises dans docs/
- 11MB d'espace libere
- Temps de recherche reduit de ~5min a ~30s (-90%)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-22 15:45:51 +01:00

496 lines
12 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Manual Test Instructions for CSV Rate System
## Prerequisites
Before running tests, ensure you have:
1. ✅ PostgreSQL running (port 5432)
2. ✅ Redis running (port 6379)
3. ✅ Backend API started (port 4000)
4. ✅ A user account with credentials
5. ✅ An admin account (optional, for admin tests)
## Step 1: Start Infrastructure
```bash
cd /Users/david/Documents/xpeditis/dev/xpeditis2.0
# Start PostgreSQL and Redis
docker-compose up -d
# Verify services are running
docker ps
```
Expected output should show `postgres` and `redis` containers running.
## Step 2: Run Database Migration
```bash
cd apps/backend
# Run migrations to create csv_rate_configs table
npm run migration:run
```
This will:
- Create `csv_rate_configs` table
- Seed 5 companies: SSC Consolidation, ECU Worldwide, TCC Logistics, NVO Consolidation, **Test Maritime Express**
## Step 3: Start Backend API
```bash
cd apps/backend
# Start development server
npm run dev
```
Expected output:
```
[Nest] INFO [NestFactory] Starting Nest application...
[Nest] INFO [InstanceLoader] AppModule dependencies initialized
[Nest] INFO Application is running on: http://localhost:4000
```
Keep this terminal open and running.
## Step 4: Get JWT Token
Open a new terminal and run:
```bash
# Login to get JWT token
curl -X POST http://localhost:4000/api/v1/auth/login \
-H "Content-Type: application/json" \
-d '{
"email": "test4@xpeditis.com",
"password": "SecurePassword123"
}'
```
**Copy the `accessToken` from the response** and save it for later tests.
Example response:
```json
{
"accessToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
"user": {
"id": "...",
"email": "test4@xpeditis.com"
}
}
```
## Step 5: Test Public Endpoints
### Test 1: Get Available Companies
```bash
curl -X GET http://localhost:4000/api/v1/rates/companies \
-H "Authorization: Bearer YOUR_TOKEN_HERE"
```
**Expected Result:**
```json
{
"companies": [
"SSC Consolidation",
"ECU Worldwide",
"TCC Logistics",
"NVO Consolidation",
"Test Maritime Express"
],
"total": 5
}
```
**Verify:** You should see 5 companies including "Test Maritime Express"
### Test 2: Get Filter Options
```bash
curl -X GET http://localhost:4000/api/v1/rates/filters/options \
-H "Authorization: Bearer YOUR_TOKEN_HERE"
```
**Expected Result:**
```json
{
"companies": ["SSC Consolidation", "ECU Worldwide", "TCC Logistics", "NVO Consolidation", "Test Maritime Express"],
"containerTypes": ["LCL"],
"currencies": ["USD", "EUR"]
}
```
### Test 3: Basic Rate Search (NLRTM → USNYC)
```bash
curl -X POST http://localhost:4000/api/v1/rates/search-csv \
-H "Content-Type: application/json" \
-H "Authorization: Bearer YOUR_TOKEN_HERE" \
-d '{
"origin": "NLRTM",
"destination": "USNYC",
"volumeCBM": 25.5,
"weightKG": 3500,
"palletCount": 10,
"containerType": "LCL"
}'
```
**Expected Result:**
- Multiple results from different companies
- Total price calculated based on max(volume × pricePerCBM, weight × pricePerKG)
- Match scores (0-100%) indicating relevance
**Example response:**
```json
{
"results": [
{
"companyName": "Test Maritime Express",
"origin": "NLRTM",
"destination": "USNYC",
"totalPrice": {
"amount": 950.00,
"currency": "USD"
},
"transitDays": 22,
"matchScore": 95,
"hasSurcharges": false
},
{
"companyName": "SSC Consolidation",
"origin": "NLRTM",
"destination": "USNYC",
"totalPrice": {
"amount": 1100.00,
"currency": "USD"
},
"transitDays": 22,
"matchScore": 92,
"hasSurcharges": true
}
// ... more results
],
"totalResults": 15,
"matchedCompanies": 5
}
```
**Verify:**
1. Results from multiple companies appear
2. Test Maritime Express has lower price than others (~$950 vs ~$1100+)
3. Match scores are calculated
4. Both "all-in" (no surcharges) and surcharged rates appear
### Test 4: Filter by Company
```bash
curl -X POST http://localhost:4000/api/v1/rates/search-csv \
-H "Content-Type: application/json" \
-H "Authorization: Bearer YOUR_TOKEN_HERE" \
-d '{
"origin": "NLRTM",
"destination": "USNYC",
"volumeCBM": 25.5,
"weightKG": 3500,
"palletCount": 10,
"containerType": "LCL",
"filters": {
"companies": ["Test Maritime Express"]
}
}'
```
**Verify:** Only Test Maritime Express results appear
### Test 5: Filter by Price Range
```bash
curl -X POST http://localhost:4000/api/v1/rates/search-csv \
-H "Content-Type: application/json" \
-H "Authorization: Bearer YOUR_TOKEN_HERE" \
-d '{
"origin": "NLRTM",
"destination": "USNYC",
"volumeCBM": 25.5,
"weightKG": 3500,
"palletCount": 10,
"containerType": "LCL",
"filters": {
"minPrice": 900,
"maxPrice": 1200,
"currency": "USD"
}
}'
```
**Verify:** All results have price between $900-$1200
### Test 6: Filter by Transit Days
```bash
curl -X POST http://localhost:4000/api/v1/rates/search-csv \
-H "Content-Type: application/json" \
-H "Authorization: Bearer YOUR_TOKEN_HERE" \
-d '{
"origin": "NLRTM",
"destination": "USNYC",
"volumeCBM": 25.5,
"weightKG": 3500,
"containerType": "LCL",
"filters": {
"maxTransitDays": 23
}
}'
```
**Verify:** All results have transit ≤ 23 days
### Test 7: Filter by Surcharges (All-in Prices Only)
```bash
curl -X POST http://localhost:4000/api/v1/rates/search-csv \
-H "Content-Type: application/json" \
-H "Authorization: Bearer YOUR_TOKEN_HERE" \
-d '{
"origin": "NLRTM",
"destination": "USNYC",
"volumeCBM": 25.5,
"weightKG": 3500,
"containerType": "LCL",
"filters": {
"withoutSurcharges": true
}
}'
```
**Verify:** All results have `hasSurcharges: false`
## Step 6: Comparator Verification Test
This is the **MAIN TEST** to verify multiple companies appear with different prices.
```bash
curl -X POST http://localhost:4000/api/v1/rates/search-csv \
-H "Content-Type: application/json" \
-H "Authorization: Bearer YOUR_TOKEN_HERE" \
-d '{
"origin": "NLRTM",
"destination": "USNYC",
"volumeCBM": 25,
"weightKG": 3500,
"palletCount": 10,
"containerType": "LCL"
}' | jq '.results[] | {company: .companyName, price: .totalPrice.amount, transit: .transitDays, match: .matchScore}'
```
**Expected Output (sorted by price):**
```json
{
"company": "Test Maritime Express",
"price": 950.00,
"transit": 22,
"match": 95
}
{
"company": "SSC Consolidation",
"price": 1100.00,
"transit": 22,
"match": 92
}
{
"company": "TCC Logistics",
"price": 1120.00,
"transit": 22,
"match": 90
}
{
"company": "NVO Consolidation",
"price": 1130.00,
"transit": 22,
"match": 88
}
{
"company": "ECU Worldwide",
"price": 1150.00,
"transit": 23,
"match": 86
}
```
### ✅ Verification Checklist
- [ ] All 5 companies appear in results
- [ ] Test Maritime Express has lowest price (~$950)
- [ ] Other companies have higher prices (~$1100-$1200)
- [ ] Price difference is clearly visible (10-20% cheaper)
- [ ] Each company has different pricing
- [ ] Match scores are calculated
- [ ] Transit days are displayed
- [ ] Comparator shows multiple offers correctly ✓
## Step 7: Alternative Routes Test
Test other routes to verify CSV data is loaded:
### DEHAM → USNYC
```bash
curl -X POST http://localhost:4000/api/v1/rates/search-csv \
-H "Content-Type: application/json" \
-H "Authorization: Bearer YOUR_TOKEN_HERE" \
-d '{
"origin": "DEHAM",
"destination": "USNYC",
"volumeCBM": 30,
"weightKG": 4000,
"containerType": "LCL"
}'
```
### FRLEH → CNSHG
```bash
curl -X POST http://localhost:4000/api/v1/rates/search-csv \
-H "Content-Type: application/json" \
-H "Authorization: Bearer YOUR_TOKEN_HERE" \
-d '{
"origin": "FRLEH",
"destination": "CNSHG",
"volumeCBM": 50,
"weightKG": 8000,
"containerType": "LCL"
}'
```
## Step 8: Admin Endpoints (Optional)
**Note:** These endpoints require ADMIN role.
### Get All CSV Configurations
```bash
curl -X GET http://localhost:4000/api/v1/admin/csv-rates/config \
-H "Authorization: Bearer YOUR_ADMIN_TOKEN"
```
### Validate CSV File
```bash
curl -X POST http://localhost:4000/api/v1/admin/csv-rates/validate/Test%20Maritime%20Express \
-H "Authorization: Bearer YOUR_ADMIN_TOKEN"
```
### Upload New CSV File
```bash
curl -X POST http://localhost:4000/api/v1/admin/csv-rates/upload \
-H "Authorization: Bearer YOUR_ADMIN_TOKEN" \
-F "file=@/Users/david/Documents/xpeditis/dev/xpeditis2.0/apps/backend/src/infrastructure/storage/csv-storage/rates/test-maritime-express.csv" \
-F "companyName=Test Maritime Express Updated" \
-F "fileDescription=Updated fictional carrier rates"
```
## Alternative: Use Automated Test Scripts
Instead of manual curl commands, you can use the automated test scripts:
### Option 1: Bash Script
```bash
cd apps/backend
chmod +x test-csv-api.sh
./test-csv-api.sh
```
### Option 2: Node.js Script
```bash
cd apps/backend
node test-csv-api.js
```
Both scripts will:
1. Authenticate automatically
2. Run all 9 test scenarios
3. Display results with color-coded output
4. Verify comparator functionality
## Troubleshooting
### Error: "Cannot connect to database"
```bash
# Check PostgreSQL is running
docker ps | grep postgres
# Restart PostgreSQL
docker-compose restart postgres
```
### Error: "Unauthorized"
- Verify JWT token is valid (tokens expire after 15 minutes)
- Get a new token using the login endpoint
- Ensure token is correctly copied (no extra spaces)
### Error: "CSV file not found"
- Verify CSV files exist in `apps/backend/src/infrastructure/storage/csv-storage/rates/`
- Check migration was run successfully
- Verify `csv_rate_configs` table has 5 records
### No Results in Search
- Check that origin/destination match CSV data (e.g., NLRTM, USNYC)
- Verify containerType is "LCL"
- Check volume/weight ranges are within CSV limits
- Try without filters first
### Test Maritime Express Not Appearing
- Run migration again: `npm run migration:run`
- Check database: `SELECT company_name FROM csv_rate_configs;`
- Verify CSV file exists: `ls src/infrastructure/storage/csv-storage/rates/test-maritime-express.csv`
## Expected Results Summary
| Test | Expected Result | Verification |
|------|----------------|--------------|
| Get Companies | 5 companies including Test Maritime Express | ✓ Count = 5 |
| Filter Options | Companies, container types, currencies | ✓ Data returned |
| Basic Search | Multiple results from different companies | ✓ Multiple companies |
| Company Filter | Only filtered company appears | ✓ Filter works |
| Price Filter | All results in price range | ✓ Range correct |
| Transit Filter | All results ≤ max transit days | ✓ Range correct |
| Surcharge Filter | Only all-in rates | ✓ No surcharges |
| Comparator | All 5 companies with different prices | ✓ Test Maritime Express cheapest |
| Alternative Routes | Results for DEHAM, FRLEH routes | ✓ CSV data loaded |
## Success Criteria
The CSV rate system is working correctly if:
1. ✅ All 5 companies are available
2. ✅ Search returns results from multiple companies simultaneously
3. ✅ Test Maritime Express appears with lower prices (10-20% cheaper)
4. ✅ All filters work correctly (company, price, transit, surcharges)
5. ✅ Match scores are calculated (0-100%)
6. ✅ Total price includes freight + surcharges
7. ✅ Comparator shows clear price differences between companies
8. ✅ Results can be sorted by different criteria
## Next Steps After Testing
Once all tests pass:
1. **Frontend Integration**: Test the Next.js frontend at http://localhost:3000/rates/csv-search
2. **Admin Interface**: Test CSV upload at http://localhost:3000/admin/csv-rates
3. **Performance**: Run load tests with k6
4. **Documentation**: Update API documentation
5. **Deployment**: Deploy to staging environment