From 03b6e13c75a1ed6c2e1102c10819e768aee5f743 Mon Sep 17 00:00:00 2001 From: 1nonlypiece <1nonlypiece@users.noreply.github.com> Date: Wed, 24 Jun 2026 11:22:06 +0530 Subject: [PATCH] test: cover service-registration and service-disabled gates Adds coverage for the strict RequireServiceRegistration gate (ServiceNotRegistered #7) and the ServiceDisabled gate (#12) in record_usage, plus accessor round-trips. Co-Authored-By: Claude Opus 4.8 (1M context) --- contracts/escrow/src/test.rs | 81 ++++++++++++++++++++++++++++++++++++ 1 file changed, 81 insertions(+) diff --git a/contracts/escrow/src/test.rs b/contracts/escrow/src/test.rs index 2d924db..7395579 100644 --- a/contracts/escrow/src/test.rs +++ b/contracts/escrow/src/test.rs @@ -697,3 +697,84 @@ fn test_pause_pause_unpause_ends_unpaused() { assert!(!client.is_paused()); } + +// --------------------------------------------------------------------------- +// Issue #18 — strict service-registration (#7) and service-disabled (#12) +// gates in `record_usage`, plus the registry/disabled accessor round-trips. +// --------------------------------------------------------------------------- + +#[test] +fn test_i18_strict_off_allows_unknown_service() { + let env = Env::default(); + let (client, _admin) = setup_initialized(&env); + // Default: strict registration is off, so unknown services are accepted. + assert!(!client.is_service_registration_required()); + let agent = Address::generate(&env); + let svc = Symbol::new(&env, "unknown"); + assert_eq!(client.record_usage(&agent, &svc, &1u32).requests, 1); +} + +#[test] +#[should_panic(expected = "Error(Contract, #7)")] +fn test_i18_strict_on_rejects_unregistered() { + let env = Env::default(); + let (client, _admin) = setup_initialized(&env); + client.set_require_service_registration(&true); + assert!(client.is_service_registration_required()); + let agent = Address::generate(&env); + client.record_usage(&agent, &Symbol::new(&env, "ghost"), &1u32); +} + +#[test] +fn test_i18_register_admits_service_under_strict_mode() { + let env = Env::default(); + let (client, _admin) = setup_initialized(&env); + client.set_require_service_registration(&true); + let agent = Address::generate(&env); + let svc = Symbol::new(&env, "infer"); + client.register_service(&svc); + assert!(client.is_service_registered(&svc)); + assert_eq!(client.record_usage(&agent, &svc, &2u32).requests, 2); +} + +#[test] +#[should_panic(expected = "Error(Contract, #7)")] +fn test_i18_unregister_reinstates_rejection() { + let env = Env::default(); + let (client, _admin) = setup_initialized(&env); + client.set_require_service_registration(&true); + let agent = Address::generate(&env); + let svc = Symbol::new(&env, "infer"); + client.register_service(&svc); + client.unregister_service(&svc); + assert!(!client.is_service_registered(&svc)); + client.record_usage(&agent, &svc, &1u32); +} + +#[test] +#[should_panic(expected = "Error(Contract, #12)")] +fn test_i18_disabled_service_rejects_usage() { + let env = Env::default(); + let (client, _admin) = setup_initialized(&env); + let agent = Address::generate(&env); + let svc = Symbol::new(&env, "infer"); + client.set_service_disabled(&svc, &true); + assert!(client.is_service_disabled(&svc)); + client.record_usage(&agent, &svc, &1u32); +} + +#[test] +fn test_i18_reenable_service_resumes_usage() { + let env = Env::default(); + let (client, _admin) = setup_initialized(&env); + let agent = Address::generate(&env); + let svc = Symbol::new(&env, "infer"); + // Disabling then re-enabling restores the ability to accrue usage and + // leaves the registration flag independent of the disabled flag. + client.register_service(&svc); + client.set_service_disabled(&svc, &true); + client.set_service_disabled(&svc, &false); + assert!(!client.is_service_disabled(&svc)); + assert!(client.is_service_registered(&svc)); + assert_eq!(client.record_usage(&agent, &svc, &3u32).requests, 3); +}