first commit

This commit is contained in:
Beyhan Oğur
2026-04-26 21:52:23 +03:00
commit 880f412e2c
2662 changed files with 866266 additions and 0 deletions

View File

@@ -0,0 +1,92 @@
package schemas
import (
"testing"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)
// Test helper types for ConvertViaJSON tests
type convertTestTarget struct {
Type string `json:"type"`
Name string `json:"name,omitempty"`
}
type convertTestSource struct {
Name string `json:"name"`
Value int `json:"value"`
}
type convertTestDest struct {
Name string `json:"name"`
Value int `json:"value"`
}
func TestConvertViaJSON(t *testing.T) {
tests := []struct {
name string
input interface{}
validate func(t *testing.T)
}{
{
name: "map_to_struct",
input: map[string]interface{}{"type": "json_object", "name": "test_format"},
validate: func(t *testing.T) {
result, err := ConvertViaJSON[convertTestTarget](map[string]interface{}{"type": "json_object", "name": "test_format"})
require.NoError(t, err)
assert.Equal(t, "json_object", result.Type)
assert.Equal(t, "test_format", result.Name)
},
},
{
name: "struct_to_struct",
validate: func(t *testing.T) {
src := convertTestSource{Name: "hello", Value: 42}
result, err := ConvertViaJSON[convertTestDest](src)
require.NoError(t, err)
assert.Equal(t, "hello", result.Name)
assert.Equal(t, 42, result.Value)
},
},
{
name: "slice_conversion",
validate: func(t *testing.T) {
src := []interface{}{
map[string]interface{}{"type": "image", "name": "a"},
map[string]interface{}{"type": "video", "name": "b"},
}
result, err := ConvertViaJSON[[]convertTestTarget](src)
require.NoError(t, err)
require.Len(t, result, 2)
assert.Equal(t, "image", result[0].Type)
assert.Equal(t, "a", result[0].Name)
assert.Equal(t, "video", result[1].Type)
assert.Equal(t, "b", result[1].Name)
},
},
{
name: "invalid_input_returns_error",
validate: func(t *testing.T) {
result, err := ConvertViaJSON[convertTestTarget](42)
require.Error(t, err)
assert.Equal(t, convertTestTarget{}, result)
},
},
{
name: "nil_input",
validate: func(t *testing.T) {
result, err := ConvertViaJSON[convertTestTarget](nil)
// nil marshals to "null" which unmarshals to zero struct — no error
require.NoError(t, err)
assert.Equal(t, convertTestTarget{}, result)
},
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
tt.validate(t)
})
}
}