Problem
The contract test file (contracts/src/test.rs) covers happy-path creation, deposit, and rebalance, but has no tests for:
set_emergency_stop — no test verifies non-admin callers are rejected, and no test verifies the flag actually blocks deposit and execute_rebalance
- Calling
get_portfolio, check_rebalance_needed, or execute_rebalance with a non-existent portfolio ID
- Creating a portfolio with an empty allocations map (should fail since sum is 0, not 100)
- Depositing to a portfolio the caller does not own
- Rebalancing a portfolio the caller does not own
Proposed Fix
Add the following test cases to contracts/src/test.rs:
Tests for emergency stop
test_set_emergency_stop_unauthorized — non-admin calls set_emergency_stop(true), call is rejected
test_set_emergency_stop_blocks_deposit — admin enables stop, user tries to deposit, gets Error::EmergencyStop
test_set_emergency_stop_blocks_rebalance — admin enables stop, execute_rebalance returns Error::EmergencyStop
Tests for error paths
Tests for ownership checks
test_deposit_wrong_portfolio — user A creates portfolio, user B tries to deposit, rejected
test_execute_rebalance_not_owner — user A creates portfolio, user B tries to rebalance, rejected
Files to modify
contracts/src/test.rs — add new test functions
Acceptance Criteria
Affected Area
Smart Contract (testing only)
Problem
The contract test file (
contracts/src/test.rs) covers happy-path creation, deposit, and rebalance, but has no tests for:set_emergency_stop— no test verifies non-admin callers are rejected, and no test verifies the flag actually blocksdepositandexecute_rebalanceget_portfolio,check_rebalance_needed, orexecute_rebalancewith a non-existent portfolio IDProposed Fix
Add the following test cases to
contracts/src/test.rs:Tests for emergency stop
test_set_emergency_stop_unauthorized— non-admin callsset_emergency_stop(true), call is rejectedtest_set_emergency_stop_blocks_deposit— admin enables stop, user tries to deposit, getsError::EmergencyStoptest_set_emergency_stop_blocks_rebalance— admin enables stop,execute_rebalancereturnsError::EmergencyStopTests for error paths
test_get_portfolio_not_found— callget_portfoliowith non-existent ID, assert error (depends on Issue bug: PostgreSQL service missing from docker-compose.yml — Docker deployment fails on database connection #1)test_create_portfolio_empty_allocations— pass emptyMap, verifyError::InvalidAllocationTests for ownership checks
test_deposit_wrong_portfolio— user A creates portfolio, user B tries to deposit, rejectedtest_execute_rebalance_not_owner— user A creates portfolio, user B tries to rebalance, rejectedFiles to modify
contracts/src/test.rs— add new test functionsAcceptance Criteria
test_set_emergency_stop_unauthorizedpassestest_set_emergency_stop_blocks_depositpassestest_set_emergency_stop_blocks_rebalancepassestest_get_portfolio_not_foundpassestest_create_portfolio_empty_allocationspassestest_deposit_wrong_portfoliopassestest_execute_rebalance_not_ownerpassescargo testpasses with no failuresAffected Area
Smart Contract (testing only)