# Test Failures Analysis - Gaps and Missing Code

**Date**: 2025-12-24  
**Status**: ⚠️ **38 FAILING TESTS IDENTIFIED**

---

## 🔴 Critical Issues: Missing Code or Implementation Gaps

### 1. **Error Message Mismatches (Custom Errors vs String Errors)**

**Problem**: Contracts use custom errors, but tests expect string error messages.

#### **DebtRegistry** (4 failing tests)
- **Contract uses**: Custom errors (`DebtZeroDebtor()`, `DebtZeroAmount()`, `DebtLienNotActive()`, `DebtReduceByExceedsAmount()`)
- **Tests expect**: String errors like `"DebtRegistry: zero amount"`, `"DebtRegistry: zero debtor"`, etc.
- **Files affected**:
  - `test/emoney/unit/DebtRegistryTest.t.sol`
  - `test/emoney/fuzz/DebtRegistryFuzz.t.sol`

**Fix Required**: Update tests to use `vm.expectRevert(abi.encodeWithSelector(DebtZeroAmount.selector))` instead of string errors.

#### **PolicyManager** (1 failing test)
- **Contract uses**: Custom error `PolicyInvalidLienMode(uint8 mode)`
- **Test expects**: String error `"PolicyManager: invalid lien mode"`
- **File affected**: `test/emoney/unit/PolicyManagerTest.t.sol`

**Fix Required**: Update test to use custom error selector.

#### **TokenFactory138** (2 failing tests)
- **Contract uses**: Custom error `ZeroIssuer()` from `FactoryErrors.sol`
- **Tests expect**: String error `"TokenFactory138: zero issuer"`
- **File affected**: `test/emoney/unit/TokenFactoryTest.t.sol`

**Fix Required**: Update tests to use custom error selector.

#### **eMoneyToken** (1 failing test)
- **Contract uses**: Custom error `ToNotCompliant(address account)`
- **Test expects**: String error `"eMoneyToken: to not compliant"`
- **File affected**: `test/emoney/unit/eMoneyTokenTest.t.sol`

**Fix Required**: Update test to use custom error selector.

---

### 2. **Missing Validation Logic**

#### **RailTriggerRegistry** - Duplicate InstructionId Check
- **Issue**: Test `test_createTrigger_duplicateInstructionId()` expects revert, but contract **DOES** check for duplicates (line 43: `require(!instructionIdExists(t.instructionId), ...)`)
- **Problem**: Test may be incorrectly structured or `instructionIdExists()` function may have a bug
- **Files affected**:
  - `test/emoney/unit/RailTriggerRegistryTest.t.sol`
  - `test/emoney/fuzz/RailTriggerFuzz.t.sol`

**Action Required**: Review `instructionIdExists()` implementation and test logic.

---

### 3. **Test Setup Issues (Missing Configuration)**

#### **CCIPReceiver Tests** (2 failing tests)
- **Error**: `"CCIPReceiver: zero aggregator address"`
- **Problem**: Tests don't set up `ORACLE_AGGREGATOR_ADDRESS` in setUp
- **Files affected**:
  - `test/ccip/CCIPErrorHandling.t.sol`
  - `test/ccip/CCIPIntegration.t.sol`

**Fix Required**: Add oracle aggregator address setup in test setUp functions.

#### **CCIPSender Tests** (5 failing tests)
- **Error**: `"CCIPSender: destination not enabled"`
- **Problem**: Tests don't configure CCIP destinations before testing
- **File affected**: `test/ccip/CCIPFees.t.sol`

**Fix Required**: Add destination configuration in test setup.

#### **ReserveSystem Test** (1 failing test)
- **Error**: `AccessControlUnauthorizedAccount` in setUp
- **Problem**: Test doesn't grant required roles before setup
- **File affected**: `test/reserve/ReserveSystemTest.t.sol`

**Fix Required**: Grant necessary roles in setUp function.

#### **SettlementOrchestrator Tests** (3 failing tests)
- **Error**: `AccessControlUnauthorizedAccount` and log mismatches
- **Problem**: Missing role grants or incorrect event expectations
- **File affected**: `test/emoney/unit/SettlementOrchestratorTest.t.sol`

**Fix Required**: Review role grants and event helper definitions.

---

### 4. **Test Logic Errors**

#### **CompliantUSDT Burn Test** (1 failing test)
- **Error**: `assertion failed: 999000000000 != 1000000000000`
- **Problem**: Test transfers 1000 * 10^6 to user1, then burns it, but assertion checks wrong balance
- **File affected**: `test/compliance/CompliantUSDTTest.t.sol`
- **Line 79**: `assertEq(usdt.totalSupply(), 1000000 * 10**6 - amount);` - This is correct
- **Line 80**: `assertEq(usdt.balanceOf(user1), 0);` - This should pass if burn worked

**Action Required**: Review test logic - the assertion may be checking the wrong value.

---

### 5. **Missing Functionality or Implementation Gaps**

#### **WETH/WETH10 Withdraw Tests** (3 failing tests)
- **Error**: `EvmError: Revert` in `testWithdraw()`
- **Problem**: Withdraw functionality may be missing or incorrectly implemented
- **Files affected**:
  - `test/WETH.t.sol`
  - `test/WETH10.t.sol`

**Action Required**: Review WETH/WETH10 withdraw implementation.

#### **Bridge Cross-Chain Tests** (2 failing tests)
- **Error**: `EvmError: Revert` in `testSendCrossChain()`
- **Problem**: Bridge may not be properly configured or missing functionality
- **Files affected**:
  - `test/CCIPWETH9Bridge.t.sol`
  - `test/CCIPWETH10Bridge.t.sol`

**Action Required**: Review bridge configuration and cross-chain send functionality.

#### **Payment Rails Flow Tests** (4 failing tests)
- **Errors**: Various state and validation errors
- **Problem**: Integration tests may have incorrect state setup or missing validations
- **File affected**: `test/emoney/integration/PaymentRailsFlowTest.t.sol`

**Action Required**: Review integration test setup and state management.

---

### 6. **Fuzz Test Edge Cases**

#### **AggregatorFuzz Test** (1 failing test)
- **Error**: `assertion failed: 25100000000 != 25000000000`
- **Problem**: Fuzz test found edge case where price deviation logic may not work as expected
- **File affected**: `test/AggregatorFuzz.t.sol`

**Action Required**: Review price deviation threshold logic in Aggregator contract.

#### **NetworkResilience Test** (1 failing test)
- **Error**: `Oracle should recover after unpause: 25000000000 != 25100000000`
- **Problem**: Oracle may not properly recover state after unpause
- **File affected**: `test/e2e/NetworkResilience.t.sol`

**Action Required**: Review oracle pause/unpause state recovery logic.

---

## ✅ Summary of Issues by Category

| Category | Count | Severity | Action Required |
|----------|-------|----------|-----------------|
| **Error Message Mismatches** | 8 | 🔴 High | Update tests to use custom error selectors |
| **Missing Test Setup** | 11 | 🟡 Medium | Add proper configuration in setUp functions |
| **Missing Validation Logic** | 2 | 🟡 Medium | Review validation implementations |
| **Test Logic Errors** | 1 | 🟢 Low | Fix test assertions |
| **Missing Functionality** | 9 | 🔴 High | Review contract implementations |
| **Fuzz Test Edge Cases** | 2 | 🟡 Medium | Review edge case handling |
| **Other** | 5 | 🟡 Medium | Various issues |

---

## 🎯 Priority Fixes

### **Immediate (High Priority)**
1. **Fix error message mismatches** - Update all tests to use custom error selectors (8 tests)
2. **Review missing functionality** - WETH withdraw, bridge cross-chain, payment rails (9 tests)
3. **Fix test setup issues** - CCIPReceiver, CCIPSender, ReserveSystem, SettlementOrchestrator (11 tests)

### **Short Term (Medium Priority)**
4. **Review validation logic** - RailTriggerRegistry duplicate check (2 tests)
5. **Fix fuzz test edge cases** - Aggregator and NetworkResilience (2 tests)

### **Low Priority**
6. **Fix test logic errors** - CompliantUSDT burn test (1 test)

---

## 📝 Notes

- **165 tests passing** - Good coverage overall
- **38 tests failing** - Mostly test setup and error message mismatches
- **No compilation errors** - All contracts compile successfully
- **Most issues are test-related** - Not necessarily missing code, but missing test configuration

---

**Last Updated**: 2025-12-24

