CIA/e-voting-system/.claude/BLOCKCHAIN_DASHBOARD_TEST_GUIDE.md
E-Voting Developer 3efdabdbbd fix: Implement vote check endpoint in frontend API proxy
- 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.
2025-11-10 02:56:47 +01:00

8.0 KiB

Testing the Blockchain Dashboard Fixes

Verification Checklist

Pre-Test Setup

  • Backend running: docker-compose up -d or docker-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

  1. Navigate to http://localhost:3000/dashboard/blockchain
  2. Wait for page to load completely
  3. 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

  1. Click on an election in the dropdown (e.g., "Election Présidentielle 2025")
  2. 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

  1. From blockchain dashboard, locate the verify button (French: "Vérifier l'intégrité de la chaîne")
  2. Click the button
  3. 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:

  1. Genesis Block (index 0)

    • Displays without error
    • Shows "N/A" for empty encrypted_vote
    • Shows "N/A" for empty signature
    • prev_hash shows correctly
  2. Vote Blocks (index 1+, if present)

    • transaction_id displays
    • block_hash displays
    • encrypted_vote displays (truncated)
    • signature displays (truncated)
    • timestamp shows formatted date
  3. Empty Blockchain

    • Shows "Aucun vote enregistré" message
    • No console errors
    • UI renders gracefully

Test 6: Refresh and Re-Select

Steps

  1. Select election A
  2. Wait for load
  3. Select election B
  4. Wait for load
  5. Select election A again
  6. 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:

  1. Dashboard loads → No truncateHash errors in console
  2. Select election → Blockchain displays with "N/A" for empty fields
  3. Click verify → No "Field required" error
  4. Check Network tab → POST has ?election_id=1 in URL
  5. 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