diff --git a/creator-keys/tests/buy_key.rs b/creator-keys/tests/buy_key.rs index bf894c1..d326d26 100644 --- a/creator-keys/tests/buy_key.rs +++ b/creator-keys/tests/buy_key.rs @@ -3,7 +3,7 @@ mod contract_test_env; use contract_test_env::{ - compute_expected_buy_price, register_creator_keys, register_test_creator, + capture_snapshot, compute_expected_buy_price, register_creator_keys, register_test_creator, set_key_price_for_tests, set_protocol_fee_bps, test_env_with_auths, }; use creator_keys::ContractError; @@ -52,6 +52,32 @@ fn test_buy_key_insufficient_payment_fails() { assert_eq!(result, Err(Ok(ContractError::InsufficientPayment))); } +#[test] +fn test_buy_key_unregistered_creator_no_state_mutation() { + let env = test_env_with_auths(); + let (client, _) = register_creator_keys(&env); + let base_price = 100i128; + set_key_price_for_tests(&env, &client, base_price); + set_protocol_fee_bps(&env, &client, 9000u32, 1000u32); + + let registered = register_test_creator(&env, &client, "alice"); + let buyer = Address::generate(&env); + client.buy_key(®istered, &buyer, &base_price, &None); + + let snapshot_before = capture_snapshot(&client, ®istered, &buyer); + + let unregistered = Address::generate(&env); + let result = client.try_buy_key(&unregistered, &buyer, &base_price, &None); + assert_eq!(result, Err(Ok(ContractError::NotRegistered))); + + let snapshot_after = capture_snapshot(&client, ®istered, &buyer); + snapshot_before.assert_unchanged(&snapshot_after); + + assert_eq!(client.get_total_key_supply(&unregistered), 0); + assert_eq!(client.get_key_balance(&unregistered, &buyer), 0); + assert_eq!(client.get_creator_holder_count(&unregistered), 0); +} + #[test] fn test_buy_key_sufficient_payment_succeeds() { let env = test_env_with_auths(); diff --git a/creator-keys/tests/key_supply.rs b/creator-keys/tests/key_supply.rs index 471393b..7af0181 100644 --- a/creator-keys/tests/key_supply.rs +++ b/creator-keys/tests/key_supply.rs @@ -67,6 +67,36 @@ fn test_get_total_key_supply_increments_after_buy() { assert_eq!(client.get_total_key_supply(&creator), 2); } +#[test] +fn test_get_total_key_supply_increments_after_three_sequential_buys() { + let env = Env::default(); + env.mock_all_auths(); + let (client, _) = setup(&env); + + let creator = Address::generate(&env); + let buyer1 = Address::generate(&env); + let buyer2 = Address::generate(&env); + let buyer3 = Address::generate(&env); + client.register_creator( + &creator, + &String::from_str(&env, "alice"), + &None, + &None, + &None, + ); + + assert_eq!(client.get_total_key_supply(&creator), 0); + + client.buy_key(&creator, &buyer1, &100_i128, &None); + assert_eq!(client.get_total_key_supply(&creator), 1); + + client.buy_key(&creator, &buyer2, &100_i128, &None); + assert_eq!(client.get_total_key_supply(&creator), 2); + + client.buy_key(&creator, &buyer3, &100_i128, &None); + assert_eq!(client.get_total_key_supply(&creator), 3); +} + #[test] fn test_get_total_key_supply_is_read_only() { let env = Env::default();