1+ #![ cfg( test) ]
2+ use soroban_sdk:: { testutils:: Address as _, Address , Env } ;
3+ use crate :: { BridgeletCore , BridgeletCoreClient } ;
4+
5+ mod mock_v2 {
6+ soroban_sdk:: contractimport!(
7+ file = "./test_fixtures/mock_v2/target/wasm32v1-none/release/mock_v2.wasm"
8+ ) ;
9+ }
10+
11+ #[ test]
12+ fn test_contract_upgrade_preserves_state_and_adds_feature ( ) {
13+ let env = Env :: default ( ) ;
14+ env. mock_all_auths ( ) ;
15+
16+ let admin = Address :: generate ( & env) ;
17+ let contract_id = env. register ( BridgeletCore , ( ) ) ;
18+ let client = BridgeletCoreClient :: new ( & env, & contract_id) ;
19+
20+ client. initialize ( & admin) ;
21+ client. set_base_reserve ( & 5000 ) ;
22+
23+ let reserve_before = client. get_base_reserve ( ) ;
24+ assert_eq ! ( reserve_before, 5000 , "V1 state should be set correctly" ) ;
25+
26+ let v2_wasm_hash = env. deployer ( ) . upload_contract_wasm ( mock_v2:: WASM ) ;
27+
28+ client. upgrade ( & v2_wasm_hash) ;
29+
30+ let v2_client = mock_v2:: Client :: new ( & env, & contract_id) ;
31+
32+ let reserve_after = v2_client. get_base_reserve ( ) ;
33+ assert_eq ! ( reserve_after, 5000 , "V2 must retain V1 state" ) ;
34+
35+ let new_val = v2_client. v2_exclusive_feature ( ) ;
36+ assert_eq ! ( new_val, 100 , "V2 exclusive feature must be accessible" ) ;
37+ }
0 commit comments