Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
48 changes: 48 additions & 0 deletions jsonschema/containsref_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
package jsonschema_test

import (
"testing"

"github.com/sashabaranov/go-openai/jsonschema"
)

// SelfRef struct used to produce a self-referential schema.
type SelfRef struct {
Friends []SelfRef `json:"friends"`
}

// Address struct referenced by Person without self-reference.
type Address struct {
Street string `json:"street"`
}

type Person struct {
Address Address `json:"address"`
}

// TestGenerateSchemaForType_SelfRef ensures that self-referential types are not
// flattened during schema generation.
func TestGenerateSchemaForType_SelfRef(t *testing.T) {
schema, err := jsonschema.GenerateSchemaForType(SelfRef{})
if err != nil {
t.Fatalf("unexpected error: %v", err)
}
if _, ok := schema.Defs["SelfRef"]; !ok {
t.Fatal("expected defs to contain SelfRef for self reference")
}
}

// TestGenerateSchemaForType_NoSelfRef ensures that non-self-referential types
// are flattened and do not reappear in $defs.
func TestGenerateSchemaForType_NoSelfRef(t *testing.T) {
schema, err := jsonschema.GenerateSchemaForType(Person{})
if err != nil {
t.Fatalf("unexpected error: %v", err)
}
if _, ok := schema.Defs["Person"]; ok {
t.Fatal("unexpected Person definition in defs")
}
if _, ok := schema.Defs["Address"]; !ok {
t.Fatal("expected Address definition in defs")
}
}
27 changes: 27 additions & 0 deletions jsonschema/json_errors_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package jsonschema_test

import (
"testing"

"github.com/sashabaranov/go-openai/jsonschema"
)

// TestGenerateSchemaForType_ErrorPaths verifies error handling for unsupported types.
func TestGenerateSchemaForType_ErrorPaths(t *testing.T) {
type anon struct{ Ch chan int }
tests := []struct {
name string
v any
}{
{"slice", []chan int{}},
{"anon struct", anon{}},
{"pointer", (*chan int)(nil)},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
if _, err := jsonschema.GenerateSchemaForType(tt.v); err == nil {
t.Errorf("expected error for %s", tt.name)
}
})
}
}
Loading