@@ -41,7 +41,10 @@ mod tests {
4141 let mut bridge = setup_bridge ( ) ;
4242 let accounts = test:: default_accounts :: < DefaultEnvironment > ( ) ;
4343
44+ // Register alice as a validator before signing (issue #203)
4445 test:: set_caller :: < DefaultEnvironment > ( accounts. alice ) ;
46+ bridge. add_validator ( accounts. alice ) . expect ( "admin can add validator" ) ;
47+
4548 let metadata = PropertyMetadata {
4649 location : String :: from ( "Test Property" ) ,
4750 size : 1000 ,
@@ -54,9 +57,71 @@ mod tests {
5457 . initiate_bridge_multisig ( 1 , 2 , accounts. bob , 2 , Some ( 50 ) , metadata)
5558 . expect ( "Bridge initiation should succeed in test" ) ;
5659
60+ test:: set_caller :: < DefaultEnvironment > ( accounts. alice ) ;
61+ let result = bridge. sign_bridge_request ( request_id, true ) ;
62+ assert ! ( result. is_ok( ) ) ;
63+ }
64+
65+ #[ ink:: test]
66+ fn test_non_validator_cannot_sign ( ) {
67+ let mut bridge = setup_bridge ( ) ;
5768 let accounts = test:: default_accounts :: < DefaultEnvironment > ( ) ;
69+
5870 test:: set_caller :: < DefaultEnvironment > ( accounts. alice ) ;
71+ let metadata = PropertyMetadata {
72+ location : String :: from ( "Test Property" ) ,
73+ size : 1000 ,
74+ legal_description : String :: from ( "Test" ) ,
75+ valuation : 100000 ,
76+ documents_url : String :: from ( "ipfs://test" ) ,
77+ } ;
78+ let request_id = bridge
79+ . initiate_bridge_multisig ( 1 , 2 , accounts. bob , 2 , Some ( 50 ) , metadata)
80+ . expect ( "initiation should succeed" ) ;
81+
82+ // bob is a bridge operator but NOT a validator — must be rejected
83+ bridge. add_bridge_operator ( accounts. bob ) . expect ( "admin can add operator" ) ;
84+ test:: set_caller :: < DefaultEnvironment > ( accounts. bob ) ;
5985 let result = bridge. sign_bridge_request ( request_id, true ) ;
86+ assert_eq ! ( result, Err ( Error :: Unauthorized ) ) ;
87+ }
88+
89+ #[ ink:: test]
90+ fn test_threshold_enforced_at_execution ( ) {
91+ let mut bridge = setup_bridge ( ) ;
92+ let accounts = test:: default_accounts :: < DefaultEnvironment > ( ) ;
93+
94+ // Register two validators
95+ test:: set_caller :: < DefaultEnvironment > ( accounts. alice ) ;
96+ bridge. add_validator ( accounts. alice ) . expect ( "add validator alice" ) ;
97+ bridge. add_validator ( accounts. bob ) . expect ( "add validator bob" ) ;
98+ bridge. add_bridge_operator ( accounts. bob ) . expect ( "add operator bob" ) ;
99+
100+ let metadata = PropertyMetadata {
101+ location : String :: from ( "Test Property" ) ,
102+ size : 1000 ,
103+ legal_description : String :: from ( "Test" ) ,
104+ valuation : 100000 ,
105+ documents_url : String :: from ( "ipfs://test" ) ,
106+ } ;
107+ let request_id = bridge
108+ . initiate_bridge_multisig ( 1 , 2 , accounts. charlie , 2 , Some ( 50 ) , metadata)
109+ . expect ( "initiation should succeed" ) ;
110+
111+ // Only one signature — execution must fail
112+ test:: set_caller :: < DefaultEnvironment > ( accounts. alice ) ;
113+ bridge. sign_bridge_request ( request_id, true ) . expect ( "alice signs" ) ;
114+
115+ test:: set_caller :: < DefaultEnvironment > ( accounts. alice ) ;
116+ let result = bridge. execute_bridge ( request_id) ;
117+ assert_eq ! ( result, Err ( Error :: InvalidRequest ) ) ; // status not Locked yet
118+
119+ // Second signature — now threshold met, execution succeeds
120+ test:: set_caller :: < DefaultEnvironment > ( accounts. bob ) ;
121+ bridge. sign_bridge_request ( request_id, true ) . expect ( "bob signs" ) ;
122+
123+ test:: set_caller :: < DefaultEnvironment > ( accounts. alice ) ;
124+ let result = bridge. execute_bridge ( request_id) ;
60125 assert ! ( result. is_ok( ) ) ;
61126 }
62127
0 commit comments