commit cbf065a38519ccbf2f03f1af804c56fb9652967f
parent e34ba7dcbbecacd63645ee42eedfe663e0e2690a
Author: triesap <tyson@radroots.org>
Date: Mon, 21 Sep 2026 13:49:23 +0000
core: resolve authorized change targets
Diffstat:
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")