* fix: fix function call error due to nil properties (429) * refactor: refactoring initializeProperties func in jsonschema pkg (429)
202 lines
3.7 KiB
Go
202 lines
3.7 KiB
Go
package jsonschema_test
|
|
|
|
import (
|
|
"encoding/json"
|
|
"reflect"
|
|
"testing"
|
|
|
|
. "github.com/sashabaranov/go-openai/jsonschema"
|
|
)
|
|
|
|
func TestDefinition_MarshalJSON(t *testing.T) {
|
|
tests := []struct {
|
|
name string
|
|
def Definition
|
|
want string
|
|
}{
|
|
{
|
|
name: "Test with empty Definition",
|
|
def: Definition{},
|
|
want: `{"properties":{}}`,
|
|
},
|
|
{
|
|
name: "Test with Definition properties set",
|
|
def: Definition{
|
|
Type: String,
|
|
Description: "A string type",
|
|
Properties: map[string]Definition{
|
|
"name": {
|
|
Type: String,
|
|
},
|
|
},
|
|
},
|
|
want: `{
|
|
"type":"string",
|
|
"description":"A string type",
|
|
"properties":{
|
|
"name":{
|
|
"type":"string",
|
|
"properties":{}
|
|
}
|
|
}
|
|
}`,
|
|
},
|
|
{
|
|
name: "Test with nested Definition properties",
|
|
def: Definition{
|
|
Type: Object,
|
|
Properties: map[string]Definition{
|
|
"user": {
|
|
Type: Object,
|
|
Properties: map[string]Definition{
|
|
"name": {
|
|
Type: String,
|
|
},
|
|
"age": {
|
|
Type: Integer,
|
|
},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
want: `{
|
|
"type":"object",
|
|
"properties":{
|
|
"user":{
|
|
"type":"object",
|
|
"properties":{
|
|
"name":{
|
|
"type":"string",
|
|
"properties":{}
|
|
},
|
|
"age":{
|
|
"type":"integer",
|
|
"properties":{}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}`,
|
|
},
|
|
{
|
|
name: "Test with complex nested Definition",
|
|
def: Definition{
|
|
Type: Object,
|
|
Properties: map[string]Definition{
|
|
"user": {
|
|
Type: Object,
|
|
Properties: map[string]Definition{
|
|
"name": {
|
|
Type: String,
|
|
},
|
|
"age": {
|
|
Type: Integer,
|
|
},
|
|
"address": {
|
|
Type: Object,
|
|
Properties: map[string]Definition{
|
|
"city": {
|
|
Type: String,
|
|
},
|
|
"country": {
|
|
Type: String,
|
|
},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
want: `{
|
|
"type":"object",
|
|
"properties":{
|
|
"user":{
|
|
"type":"object",
|
|
"properties":{
|
|
"name":{
|
|
"type":"string",
|
|
"properties":{}
|
|
},
|
|
"age":{
|
|
"type":"integer",
|
|
"properties":{}
|
|
},
|
|
"address":{
|
|
"type":"object",
|
|
"properties":{
|
|
"city":{
|
|
"type":"string",
|
|
"properties":{}
|
|
},
|
|
"country":{
|
|
"type":"string",
|
|
"properties":{}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}`,
|
|
},
|
|
{
|
|
name: "Test with Array type Definition",
|
|
def: Definition{
|
|
Type: Array,
|
|
Items: &Definition{
|
|
Type: String,
|
|
},
|
|
Properties: map[string]Definition{
|
|
"name": {
|
|
Type: String,
|
|
},
|
|
},
|
|
},
|
|
want: `{
|
|
"type":"array",
|
|
"items":{
|
|
"type":"string",
|
|
"properties":{
|
|
|
|
}
|
|
},
|
|
"properties":{
|
|
"name":{
|
|
"type":"string",
|
|
"properties":{}
|
|
}
|
|
}
|
|
}`,
|
|
},
|
|
}
|
|
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
gotBytes, err := json.Marshal(&tt.def)
|
|
if err != nil {
|
|
t.Errorf("Failed to Marshal JSON: error = %v", err)
|
|
return
|
|
}
|
|
|
|
var got map[string]interface{}
|
|
err = json.Unmarshal(gotBytes, &got)
|
|
if err != nil {
|
|
t.Errorf("Failed to Unmarshal JSON: error = %v", err)
|
|
return
|
|
}
|
|
|
|
wantBytes := []byte(tt.want)
|
|
var want map[string]interface{}
|
|
err = json.Unmarshal(wantBytes, &want)
|
|
if err != nil {
|
|
t.Errorf("Failed to Unmarshal JSON: error = %v", err)
|
|
return
|
|
}
|
|
|
|
if !reflect.DeepEqual(got, want) {
|
|
t.Errorf("MarshalJSON() got = %v, want %v", got, want)
|
|
}
|
|
})
|
|
}
|
|
}
|