hyf

Context-aware query service for Radroots
git clone https://radroots.dev/git/hyf.git
Log | Files | Refs | README | LICENSE

commit cbf065a38519ccbf2f03f1af804c56fb9652967f
parent e34ba7dcbbecacd63645ee42eedfe663e0e2690a
Author: triesap <tyson@radroots.org>
Date:   Mon, 21 Sep 2026 13:49:23 +0000

core: resolve authorized change targets

Diffstat:
Asrc/hyf_application/farm_targets.mojo | 22++++++++++++++++++++++
Mtests/test_application.mojo | 16++++++++++++++++
2 files changed, 38 insertions(+), 0 deletions(-)

diff --git a/src/hyf_application/farm_targets.mojo b/src/hyf_application/farm_targets.mojo @@ -0,0 +1,22 @@ +from std.collections import List, Optional + +from hyf_core.domain.supply_change import ProposedSupplyChange, proposed_change + + +def resolve_change_target( + operation: String, + requested_target: Optional[String], + authorized_targets: List[String], +) raises -> ProposedSupplyChange: + var resolved_target: Optional[String] = None + if requested_target: + var requested = requested_target.value() + for authorized in authorized_targets: + if authorized == requested: + resolved_target = Optional[String](String(requested)) + return proposed_change( + target_kind="listing", + target_id=resolved_target, + operation=operation, + expected_revision=None, + ) diff --git a/tests/test_application.mojo b/tests/test_application.mojo @@ -103,3 +103,19 @@ def test_supply_update_operation_semantics() raises: var ambiguous = interpret_update_change("sold out", "listing", None) assert_equal(ambiguous.operation, "unresolved") assert_true(operation_is_proposal()) + + +from hyf_application.farm_targets import resolve_change_target + + +def test_authorized_change_target_resolution() raises: + var authorized = List[String]() + authorized.append("b1") + var resolved = resolve_change_target("withdrawal", Optional[String]("b1"), authorized) + assert_equal(resolved.operation, "withdrawal") + assert_equal(resolved.target_id.value(), "b1") + var unauthorized = resolve_change_target("withdrawal", Optional[String]("b9"), authorized) + assert_equal(unauthorized.operation, "unresolved") + assert_true(unauthorized.unresolved) + var ambiguous = resolve_change_target("withdrawal", None, authorized) + assert_equal(ambiguous.operation, "unresolved")