fun testStandardSchemaOpenPolymorphic()

in prompt/prompt-structure/src/commonTest/kotlin/ai/koog/prompt/structure/json/generator/JsonSchemaGeneratorTest.kt [726:815]


    fun testStandardSchemaOpenPolymorphic() {
        val descriptions = mapOf(
            "OpenSubclass1.id" to "ID for subclass 1",
            "OpenSubclass1.property1" to "Property 1 for subclass 1",

            "OpenSubclass2.id" to "ID for subclass 2",
            "OpenSubclass2.property2" to "Property 2 for subclass 2",
        )

        val result = standardGenerator.generate(
            json,
            "TestOpenPolymorphism",
            serializer<TestOpenPolymorphism>(),
            descriptions
        )
        val schema = json.encodeToString(result.schema)

        val expectedSchema = """
            {
              "${"$"}id": "TestOpenPolymorphism",
              "${"$"}defs": {
                "OpenSubclass1": {
                  "type": "object",
                  "properties": {
                    "id": {
                      "type": "string",
                      "description": "ID for subclass 1"
                    },
                    "property1": {
                      "type": "string",
                      "description": "Property 1 for subclass 1"
                    },
                    "kind": {
                      "const": "OpenSubclass1"
                    }
                  },
                  "required": [
                    "id",
                    "property1",
                    "kind"
                  ],
                  "additionalProperties": false
                },
                "OpenSubclass2": {
                  "type": "object",
                  "properties": {
                    "id": {
                      "type": "string",
                      "description": "ID for subclass 2"
                    },
                    "property2": {
                      "type": "integer",
                      "description": "Property 2 for subclass 2"
                    },
                    "recursiveTypeProperty": {
                      "oneOf": [
                        {
                          "${"$"}ref": "#/${"$"}defs/OpenSubclass1"
                        },
                        {
                          "${"$"}ref": "#/${"$"}defs/OpenSubclass2"
                        }
                      ]
                    },
                    "kind": {
                      "const": "OpenSubclass2"
                    }
                  },
                  "required": [
                    "id",
                    "property2",
                    "recursiveTypeProperty",
                    "kind"
                  ],
                  "additionalProperties": false
                }
              },
              "oneOf": [
                {
                  "${"$"}ref": "#/${"$"}defs/OpenSubclass1"
                },
                {
                  "${"$"}ref": "#/${"$"}defs/OpenSubclass2"
                }
              ]
            }
        """.trimIndent()

        assertEquals(expectedSchema, schema)
    }