diff --git a/creator-keys/tests/sell_key.rs b/creator-keys/tests/sell_key.rs index ecc0776c..9c137168 100644 --- a/creator-keys/tests/sell_key.rs +++ b/creator-keys/tests/sell_key.rs @@ -159,3 +159,32 @@ fn test_holder_count_returns_to_zero_after_last_holder_exit_and_rebuy() { assert_eq!(supply_after_rebuy, 1); assert_eq!(client.get_creator_holder_count(&creator), 1); } + +#[test] +fn test_multi_key_full_exit_decrements_holder_count_only_on_last_sell() { + let env = test_env_with_auths(); + let (client, creator) = setup(&env); + let seller = Address::generate(&env); + + // Seller buys 3 keys. + client.buy_key(&creator, &seller, &100_i128, &None); + client.buy_key(&creator, &seller, &100_i128, &None); + client.buy_key(&creator, &seller, &100_i128, &None); + assert_eq!(client.get_creator_holder_count(&creator), 1); + assert_eq!(client.get_key_balance(&creator, &seller), 3); + + // Sell 2 keys — holder count stays unchanged. + client.sell_key(&creator, &seller, &None); + assert_eq!(client.get_creator_holder_count(&creator), 1); + assert_eq!(client.get_key_balance(&creator, &seller), 2); + + client.sell_key(&creator, &seller, &None); + assert_eq!(client.get_creator_holder_count(&creator), 1); + assert_eq!(client.get_key_balance(&creator, &seller), 1); + + // Sell the last key — holder count decrements. + client.sell_key(&creator, &seller, &None); + assert_eq!(client.get_creator_holder_count(&creator), 0); + assert_eq!(client.get_key_balance(&creator, &seller), 0); + assert_eq!(client.get_total_key_supply(&creator), 0); +}