- Created `/frontend/app/api/votes/check/route.ts` to handle GET requests for checking if a user has voted in a specific election. - Added error handling for unauthorized access and missing election ID. - Forwarded requests to the backend API and returned appropriate responses. - Updated `/frontend/app/api/votes/history/route.ts` to fetch user's voting history with error handling. - Ensured both endpoints utilize the authorization token for secure access.
8.0 KiB
8.0 KiB
Testing the Blockchain Dashboard Fixes
✅ Verification Checklist
Pre-Test Setup
- Backend running:
docker-compose up -dordocker-compose -f docker-compose.multinode.yml up -d - Frontend accessible: http://localhost:3000
- Database initialized with test election
- Browser developer console open (F12)
Test 1: Load Blockchain Dashboard Without Errors
Steps
- Navigate to http://localhost:3000/dashboard/blockchain
- Wait for page to load completely
- Check browser console (F12 → Console tab)
Expected Results
✅ Page loads successfully
✅ No "truncateHash: invalid hash parameter: undefined" errors
✅ No JavaScript errors in console
✅ Election selector dropdown populated
Actual Result
- PASS
- FAIL - Description: _______________
Test 2: Select an Election
Steps
- Click on an election in the dropdown (e.g., "Election Présidentielle 2025")
- Wait for blockchain to load
Expected Results
✅ Election is highlighted
✅ Blockchain blocks load
✅ No console errors
✅ Hash values display as:
- Full hash or truncated (e.g., "7f3e9c2b...")
- OR "N/A" for empty fields
- NOT "undefined" or "null"
Network Request Check
In DevTools → Network tab:
✅ GET /api/votes/blockchain?election_id=1
Status: 200
Response: { blocks: [...], verification: {...} }
Actual Result
- PASS
- FAIL - Description: _______________
Test 3: Click "Vérifier l'intégrité de la chaîne" Button
Steps
- From blockchain dashboard, locate the verify button (French: "Vérifier l'intégrité de la chaîne")
- Click the button
- Wait for verification to complete
Expected Results
✅ Button shows loading state
✅ No error message appears
✅ Verification completes within 5 seconds
✅ Result updates (chain_valid: true or false)
✅ No "Field required" error
Network Request Check
In DevTools → Network tab:
✅ POST /api/votes/verify-blockchain
Query Parameters: ?election_id=1
Status: 200
Response: {
"election_id": 1,
"chain_valid": true,
"total_blocks": X,
"total_votes": X,
"status": "valid",
"source": "poa_validators" or "local"
}
Actual Result
- PASS
- FAIL - Description: _______________
Test 4: Console Error Analysis
Check 1: truncateHash Errors
# In browser console, search for:
"truncateHash: invalid hash parameter"
Expected: 0 occurrences
Actual: _______ occurrences
Check 2: Network Errors
# In browser console, search for:
"POST .../verify-blockchain"
"400" or "Field required"
"missing" and "election_id"
Expected: 0 occurrences
Actual: _______ occurrences
Check 3: JavaScript Errors
Expected: 0 errors in console
Actual: _______ errors
Test 5: Blockchain Data Display
Display Check
When blockchain is loaded, verify:
-
Genesis Block (index 0)
- Displays without error
- Shows "N/A" for empty encrypted_vote
- Shows "N/A" for empty signature
- prev_hash shows correctly
-
Vote Blocks (index 1+, if present)
- transaction_id displays
- block_hash displays
- encrypted_vote displays (truncated)
- signature displays (truncated)
- timestamp shows formatted date
-
Empty Blockchain
- Shows "Aucun vote enregistré" message
- No console errors
- UI renders gracefully
Test 6: Refresh and Re-Select
Steps
- Select election A
- Wait for load
- Select election B
- Wait for load
- Select election A again
- Verify button works
Expected Results
✅ All selections load without errors
✅ No memory leaks or console errors
✅ Hash truncation works each time
✅ Verify button works consistently
Actual Result
- PASS
- FAIL - Description: _______________
Test 7: API Request Chain
Frontend Request Flow
POST /api/votes/verify-blockchain
↓ (Body: { election_id: 1 })
NextJS Proxy Processing
✅ Reads request body
✅ Extracts election_id
✅ Adds to query parameters
✅ URL becomes: /api/votes/verify-blockchain?election_id=1
Backend Processing
GET query parameter: election_id=1
✅ Finds election
✅ Verifies blockchain
✅ Returns verification result
Verification
In DevTools, check POST request:
- Query string includes
?election_id=1(or correct ID) - Status: 200
- Response contains valid JSON
Test 8: Error Scenarios
Scenario A: Invalid Election ID
Steps:
1. Manually modify URL to non-existent election
2. Try to verify blockchain
Expected:
- ✅ Error message displays gracefully
- ✅ No console errors
Scenario B: No Authentication Token
Steps:
1. Clear authentication token
2. Try to load blockchain
Expected:
- ✅ Redirects to login page
- ✅ No console errors about undefined hash
Scenario C: Empty Hash Fields
Steps:
1. Load blockchain with genesis block
2. Check display
Expected:
- ✅ Empty fields show "N/A"
- ✅ No "truncateHash: invalid" errors
Summary Report Template
## Blockchain Dashboard Fix - Test Results
Date: [DATE]
Tester: [NAME]
Environment: [LOCAL/STAGING]
### Overall Status: [✅ PASS / ❌ FAIL]
### Test Results Summary
- Test 1 (Load without errors): [✅/❌]
- Test 2 (Select election): [✅/❌]
- Test 3 (Verify blockchain): [✅/❌]
- Test 4 (No console errors): [✅/❌]
- Test 5 (Data display): [✅/❌]
- Test 6 (Refresh & re-select): [✅/❌]
- Test 7 (API request chain): [✅/❌]
- Test 8 (Error scenarios): [✅/❌]
### Issues Found
- [ ] No issues
- [ ] Issue 1: [Description]
- [ ] Issue 2: [Description]
### Console Errors Count
- truncateHash errors: [0]
- Network errors: [0]
- JavaScript errors: [0]
### Network Requests
- GET /api/elections/active: [200]
- GET /api/votes/blockchain: [200]
- POST /api/votes/verify-blockchain: [200]
### Notes
[Any additional observations]
### Approved By
Name: ___________
Date: ___________
Quick Regression Check (5 min)
If you just want to verify the fixes work:
- ✅ Dashboard loads → No truncateHash errors in console
- ✅ Select election → Blockchain displays with "N/A" for empty fields
- ✅ Click verify → No "Field required" error
- ✅ Check Network tab → POST has
?election_id=1in URL - ✅ Browser console → 0 errors about truncateHash or missing fields
Result: If all 5 checks pass ✅, the fixes are working!
Debugging Tips
If truncateHash errors still appear
// Check in browser console:
console.log("blockchain-visualizer truncateHash fix applied")
// Check function:
// Go to blockchain-visualizer.tsx line 86-91
// Verify: if (!hash || typeof hash !== "string") { return "N/A" }
If verify button still fails
// Check in Network tab:
// 1. Select election
// 2. Click verify button
// 3. Look at POST request to /api/votes/verify-blockchain
// 4. Check if URL shows: ?election_id=1
// If missing, the NextJS route fix wasn't applied
// File: /frontend/app/api/votes/verify-blockchain/route.ts
// Line: url.searchParams.append('election_id', body.election_id.toString())
If data still shows undefined
// Check in Network tab:
// GET /api/votes/blockchain?election_id=1
// Response should show valid block structure:
{
"blocks": [{
"index": 0,
"prev_hash": "000...",
"timestamp": 1234567890,
"encrypted_vote": "", // Empty string, not undefined
"transaction_id": "genesis",
"block_hash": "abc...",
"signature": "" // Empty string, not undefined
}]
}
// If you see null or undefined, backend needs fixing
Files Modified
✅ /frontend/app/api/votes/verify-blockchain/route.ts
- Added:
const body = await request.json() - Added:
url.searchParams.append('election_id', body.election_id.toString())
✅ /frontend/components/blockchain-viewer.tsx
- Changed:
if (!hash || typeof hash !== "string") { return "N/A" }
Last Updated: 2025-11-10
Test Document Version: 1.0