Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
52 changes: 18 additions & 34 deletions creator-keys/tests/key_decimals.rs
Original file line number Diff line number Diff line change
@@ -1,45 +1,29 @@
//! Tests for get_key_decimals read-only method.
//! Unit tests for creator key decimals consistency with token standard.

use creator_keys::{CreatorKeysContract, CreatorKeysContractClient};
use soroban_sdk::{testutils::Address as _, Address, Env, String};
mod contract_test_env;

#[test]
fn test_get_key_decimals_returns_expected_value() {
let env = Env::default();
let contract_id = env.register(CreatorKeysContract, ());
let client = CreatorKeysContractClient::new(&env, &contract_id);
use contract_test_env::{register_creator_keys, register_test_creator, test_env_with_auths};

assert_eq!(client.get_key_decimals(), 7);
}
/// The expected decimals value conforming to the Soroban token standard.
const EXPECTED_DECIMALS: u32 = 7;

#[test]
fn test_get_key_decimals_is_read_only() {
let env = Env::default();
let contract_id = env.register(CreatorKeysContract, ());
let client = CreatorKeysContractClient::new(&env, &contract_id);

let d1 = client.get_key_decimals();
let d2 = client.get_key_decimals();
assert_eq!(d1, d2);
assert_eq!(d1, 7);
fn test_get_key_decimals_matches_token_standard() {
let env = test_env_with_auths();
let (client, _) = register_creator_keys(&env);

let decimals = client.get_key_decimals();
assert_eq!(decimals, EXPECTED_DECIMALS);
}

#[test]
fn test_get_key_decimals_stable_after_state_changes() {
let env = Env::default();
env.mock_all_auths();

let contract_id = env.register(CreatorKeysContract, ());
let client = CreatorKeysContractClient::new(&env, &contract_id);

let admin = Address::generate(&env);
let creator = Address::generate(&env);
let buyer = Address::generate(&env);
fn test_get_key_decimals_consistent_across_creator_instances() {
let env = test_env_with_auths();
let (client, _) = register_creator_keys(&env);

client.set_fee_config(&admin, &9000u32, &1000u32);
client.set_key_price(&admin, &100i128);
client.register_creator(&creator, &String::from_str(&env, "alice"));
client.buy_key(&creator, &buyer, &100i128);
register_test_creator(&env, &client, "alice");
assert_eq!(client.get_key_decimals(), EXPECTED_DECIMALS);

assert_eq!(client.get_key_decimals(), 7);
register_test_creator(&env, &client, "bob");
assert_eq!(client.get_key_decimals(), EXPECTED_DECIMALS);
}
44 changes: 44 additions & 0 deletions creator-keys/tests/test_register_creator.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
mod contract_test_env;

use contract_test_env::{register_creator_keys, test_env_with_auths};
use creator_keys::{ContractError, HANDLE_LEN_MIN};
use soroban_sdk::{testutils::Address as _, Address, String};

#[test]
fn test_register_creator_minimum_handle_length_success() {
let env = test_env_with_auths();
let (client, _) = register_creator_keys(&env);
let creator = Address::generate(&env);

let min_handle = "a".repeat(HANDLE_LEN_MIN as usize);
let handle = String::from_str(&env, &min_handle);

let result = client.try_register_creator(&creator, &handle);

// Happy path: the function succeeds
assert_eq!(result, Ok(Ok(())));

// State assertion: after a successful call, storage and derived views match expectations
assert!(client.is_creator_registered(&creator));
let profile = client.get_creator(&creator);
assert_eq!(profile.handle, handle);
assert_eq!(profile.creator, creator);
}

#[test]
fn test_register_creator_below_minimum_handle_length_fails() {
let env = test_env_with_auths();
let (client, _) = register_creator_keys(&env);
let creator = Address::generate(&env);

let short_handle = "a".repeat((HANDLE_LEN_MIN - 1) as usize);
let handle = String::from_str(&env, &short_handle);

let result = client.try_register_creator(&creator, &handle);

// Error case: expected failure
assert_eq!(result, Err(Ok(ContractError::HandleTooShort)));

// State assertion: failed calls do not leave partial state behind
assert!(!client.is_creator_registered(&creator));
}
Loading