fun testSimpleSchemaNestedDescriptions()

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


    fun testSimpleSchemaNestedDescriptions() {
        val descriptions = mapOf(
            "NestedTestClass.name" to "The name (override)",
            "NestedTestClass.nestedList" to "List of nested properties",
            "NestedTestClass.nestedMap" to "Map of nested properties",

            "NestedProperty.bar" to "Nested bar property",
        )

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

        val expectedDotSchema = """
            {
              "type": "object",
              "properties": {
                "name": {
                  "type": "string",
                  "description": "The name (override)"
                },
                "nested": {
                  "type": "object",
                  "properties": {
                    "foo": {
                      "type": "string",
                      "description": "Nested foo property"
                    },
                    "bar": {
                      "type": "integer",
                      "description": "Nested bar property"
                    }
                  },
                  "required": [
                    "foo",
                    "bar"
                  ],
                  "additionalProperties": false,
                  "description": "Nested property class"
                },
                "nestedList": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "properties": {
                      "foo": {
                        "type": "string",
                        "description": "Nested foo property"
                      },
                      "bar": {
                        "type": "integer",
                        "description": "Nested bar property"
                      }
                    },
                    "required": [
                      "foo",
                      "bar"
                    ],
                    "additionalProperties": false
                  },
                  "description": "List of nested properties"
                },
                "nestedMap": {
                  "type": "object",
                  "additionalProperties": {
                    "type": "object",
                    "properties": {
                      "foo": {
                        "type": "string",
                        "description": "Nested foo property"
                      },
                      "bar": {
                        "type": "integer",
                        "description": "Nested bar property"
                      }
                    },
                    "required": [
                      "foo",
                      "bar"
                    ],
                    "additionalProperties": false
                  },
                  "description": "Map of nested properties"
                }
              },
              "required": [
                "name",
                "nested"
              ],
              "additionalProperties": false
            }
        """.trimIndent()

        assertEquals(expectedDotSchema, schema)
    }