Skip to content

Commit 0b228e5

Browse files
authored
Merge pull request Xoulomon#511 from whiteghost0001/Smart-Contract]-Add-Multi-Token-Support
feat: add multi-token support (SEP-41) to Stellar-Save contract
2 parents 366e9f9 + c1c5782 commit 0b228e5

1 file changed

Lines changed: 51 additions & 3 deletions

File tree

  • contracts/stellar-save/src

contracts/stellar-save/src/lib.rs

Lines changed: 51 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9201,7 +9201,8 @@ mod tests {
92019201
let client = StellarSaveContractClient::new(&env, &contract_id);
92029202

92039203
let creator = Address::generate(&env);
9204-
let group_id = client.create_group(&creator, &100, &3600, &3);
9204+
let token_address = env.register_stellar_asset_contract_v2(Address::generate(&env)).address();
9205+
let group_id = client.create_group(&creator, &100, &3600, &3, &token_address);
92059206

92069207
// Group is in Pending state by default, should fail
92079208
let result = client.try_transfer_payout(&group_id, &creator, &100, &0);
@@ -9678,7 +9679,8 @@ mod tests {
96789679
let client = StellarSaveContractClient::new(&env, &contract_id);
96799680

96809681
let creator = Address::generate(&env);
9681-
let group_id = client.create_group(&creator, &100, &3600, &3);
9682+
let token_address = env.register_stellar_asset_contract_v2(Address::generate(&env)).address();
9683+
let group_id = client.create_group(&creator, &100, &3600, &3, &token_address);
96829684

96839685
client.join_group(&group_id, &creator);
96849686

@@ -9705,7 +9707,8 @@ mod tests {
97059707
let client = StellarSaveContractClient::new(&env, &contract_id);
97069708

97079709
let creator = Address::generate(&env);
9708-
let group_id = client.create_group(&creator, &100, &3600, &3);
9710+
let token_address = env.register_stellar_asset_contract_v2(Address::generate(&env)).address();
9711+
let group_id = client.create_group(&creator, &100, &3600, &3, &token_address);
97099712

97109713
client.join_group(&group_id, &creator);
97119714

@@ -11146,4 +11149,49 @@ mod tests {
1114611149
// Query a group_id that was never created
1114711150
client.get_token_config(&9999);
1114811151
}
11152+
11153+
// Task 5.1: Unit tests for get_token_config (Requirements 2.3, 2.4)
11154+
11155+
/// Verifies that get_token_config returns the correct TokenConfig after a group is created
11156+
/// with a mock token. Requirements 2.3.
11157+
#[test]
11158+
fn test_get_token_config_success() {
11159+
let env = Env::default();
11160+
env.mock_all_auths();
11161+
11162+
let contract_id = env.register(StellarSaveContract, ());
11163+
let client = StellarSaveContractClient::new(&env, &contract_id);
11164+
11165+
// Deploy a mock SEP-41 token (Stellar Asset Contract)
11166+
let token_admin = Address::generate(&env);
11167+
let token_address = env
11168+
.register_stellar_asset_contract_v2(token_admin)
11169+
.address();
11170+
11171+
let creator = Address::generate(&env);
11172+
11173+
// Create a group with the mock token
11174+
let group_id = client.create_group(&creator, &100, &3600, &5, &token_address);
11175+
11176+
// Retrieve the token config
11177+
let token_config = client.get_token_config(&group_id);
11178+
11179+
// Verify the stored token address matches what was provided
11180+
assert_eq!(token_config.token_address, token_address);
11181+
// Stellar Asset Contracts report 7 decimals
11182+
assert_eq!(token_config.token_decimals, 7);
11183+
}
11184+
11185+
/// Verifies that get_token_config returns GroupNotFound for an unknown group_id.
11186+
/// Requirements 2.4.
11187+
#[test]
11188+
#[should_panic(expected = "Error(Contract, #1001)")]
11189+
fn test_get_token_config_not_found() {
11190+
let env = Env::default();
11191+
let contract_id = env.register(StellarSaveContract, ());
11192+
let client = StellarSaveContractClient::new(&env, &contract_id);
11193+
11194+
// Query a group_id that was never created
11195+
client.get_token_config(&9999);
11196+
}
1114911197
}

0 commit comments

Comments
 (0)