diff --git a/contracts/milestones/src/lib.rs b/contracts/milestones/src/lib.rs index 90c53d76..ea1d6430 100644 --- a/contracts/milestones/src/lib.rs +++ b/contracts/milestones/src/lib.rs @@ -416,7 +416,8 @@ mod contract { mergefi_common::SplitError::SelfPayout => Error::SelfPayout, mergefi_common::SplitError::Overflow => Error::ArithmeticOverflow, })?; - let treasury: Address = mergefi_common::require_treasury::(&env).unwrap(); + let treasury: Address = + mergefi_common::require_treasury::(&env).ok_or(Error::NotInitialized)?; let token_client = token::Client::new(&env, &milestone.token); let contract_address = env.current_contract_address(); @@ -828,6 +829,9 @@ mod contract { } } // mod contract +pub use contract::*; + + /// Pays each contributor their share of `milestone.remaining_budget` (the /// unallocated remainder of the pool), computed as /// `remaining_budget * contribution.amount / total_budget` — i.e. in diff --git a/contracts/milestones/src/test.rs b/contracts/milestones/src/test.rs index 981ea64d..cbd8613a 100644 --- a/contracts/milestones/src/test.rs +++ b/contracts/milestones/src/test.rs @@ -1912,3 +1912,31 @@ fn test_release_issue_with_admin_as_recipient() { let distributable = 950_0000000i128; // after 5% fee assert_eq!(token_client.balance(&admin), distributable); } + +#[test] +fn test_release_issue_returns_not_initialized_if_treasury_missing() { + let env = Env::default(); + env.mock_all_auths(); + let (_admin, _treasury, client) = setup(&env); + + let token_admin = Address::generate(&env); + let (token_addr, asset_client, _token_client) = create_token(&env, &token_admin); + let sponsor = Address::generate(&env); + asset_client.mint(&sponsor, &10_000_000_000i128); + + client.create_milestone(&487u64, &sponsor, &token_addr, &10_000_000_000i128, &1_000u64); + client.allocate(&487u64, &101u64, &5_000_000_000i128); + + // Remove Treasury from instance storage + env.as_contract(&client.address, || { + env.storage().instance().remove(&DataKey::Treasury); + }); + + let maintainer = Address::generate(&env); + let err = client.try_release_issue( + &487u64, + &101u64, + &vec![&env, (maintainer, 10_000u32)], + ); + assert_eq!(err, Err(Ok(Error::NotInitialized))); +}