extends GdUnitTestSuite ## NEO-25: parse `GET /game/world/interactables` JSON into descriptor rows. const _CATALOG_SCRIPT := preload("res://scripts/interactables_catalog_client.gd") func test_parse_catalog_json_orders_and_fields() -> void: # Arrange var json := ( '{"schemaVersion":1,"interactables":[' + '{"interactableId":"prototype_resource_node_alpha","kind":"resource_node",' + '"anchor":{"x":12,"y":0.5,"z":-6},"interactionRadius":3},' + '{"interactableId":"prototype_terminal","kind":"terminal",' + '"anchor":{"x":0,"y":0.5,"z":0},"interactionRadius":3}' + "]}" ) # Act var rows: Variant = _CATALOG_SCRIPT.parse_catalog_json(json) # Assert assert_that(rows is Array).is_true() var arr: Array = rows assert_that(arr.size()).is_equal(2) var r0: Dictionary = arr[0] var r1: Dictionary = arr[1] assert_that(r0.get("interactableId", "")).is_equal("prototype_resource_node_alpha") assert_that(r0.get("kind", "")).is_equal("resource_node") var a0: Variant = r0.get("anchor", null) assert_that(a0 is Dictionary).is_true() assert_that(float((a0 as Dictionary).get("x", -1.0))).is_equal(12.0) assert_that(r1.get("interactableId", "")).is_equal("prototype_terminal") func test_parse_catalog_json_returns_empty_on_garbage() -> void: # Arrange var garbage := "[]" # Act var rows2: Variant = _CATALOG_SCRIPT.parse_catalog_json(garbage) # Assert assert_that((rows2 as Array).is_empty()).is_true()