diff --git a/contracts/identity-registry-contract/src/contract.rs b/contracts/identity-registry-contract/src/contract.rs index 9e82c45..2c462ae 100644 --- a/contracts/identity-registry-contract/src/contract.rs +++ b/contracts/identity-registry-contract/src/contract.rs @@ -88,3 +88,9 @@ pub fn ban_expert(env: &Env, expert: &Address) -> Result<(), RegistryError> { pub fn get_expert_status(env: &Env, expert: &Address) -> ExpertStatus { storage::get_expert_status(env, expert) } + +/// Check if an expert is verified +/// Returns true only if the expert's status is Verified +pub fn is_verified(env: &Env, expert: &Address) -> bool { + storage::get_expert_status(env, expert) == ExpertStatus::Verified +} diff --git a/contracts/identity-registry-contract/src/lib.rs b/contracts/identity-registry-contract/src/lib.rs index 0e82929..8ac00bb 100644 --- a/contracts/identity-registry-contract/src/lib.rs +++ b/contracts/identity-registry-contract/src/lib.rs @@ -41,4 +41,10 @@ impl IdentityRegistryContract { pub fn get_status(env: Env, expert: Address) -> ExpertStatus { contract::get_expert_status(&env, &expert) } + + /// Check if an expert is verified + /// Returns true only if the expert's status is Verified + pub fn is_verified(env: Env, expert: Address) -> bool { + contract::is_verified(&env, &expert) + } } diff --git a/contracts/identity-registry-contract/src/test.rs b/contracts/identity-registry-contract/src/test.rs index 451e808..9f2a118 100644 --- a/contracts/identity-registry-contract/src/test.rs +++ b/contracts/identity-registry-contract/src/test.rs @@ -330,3 +330,31 @@ fn test_complete_expert_lifecycle() { client.ban_expert(&expert); assert_eq!(client.get_status(&expert), ExpertStatus::Banned); } + +#[test] +fn test_getters() { + let env = Env::default(); + env.mock_all_auths(); + + let contract_id = env.register(IdentityRegistryContract, ()); + let client = IdentityRegistryContractClient::new(&env, &contract_id); + + let admin = Address::generate(&env); + client.init(&admin); + + // Test 1: Check is_verified on a random address (should be false) + let random_address = Address::generate(&env); + assert_eq!(client.is_verified(&random_address), false); + assert_eq!(client.get_status(&random_address), ExpertStatus::Unverified); + + // Test 2: Verify an expert and check is_verified (should be true) + let expert = Address::generate(&env); + client.add_expert(&expert); + assert_eq!(client.is_verified(&expert), true); + assert_eq!(client.get_status(&expert), ExpertStatus::Verified); + + // Test 3: Ban the expert and check is_verified (should be false) + client.ban_expert(&expert); + assert_eq!(client.is_verified(&expert), false); + assert_eq!(client.get_status(&expert), ExpertStatus::Banned); +}