Add serializer test

This commit is contained in:
Jinzhu 2022-02-15 20:47:22 +08:00
parent 0b039497c4
commit 5f6d85c00a
3 changed files with 42 additions and 2 deletions

View File

@ -175,10 +175,13 @@ func (schema *Schema) ParseField(fieldStruct reflect.StructField) *Field {
} else if name, ok := field.TagSettings["SERIALIZER"]; ok {
field.DataType = String
if strings.ToLower(name) == "json" {
field.Serializer = &JSONSerializer{}
field.Serializer = JSONSerializer{}
} else {
schema.err = fmt.Errorf("invalid serializer type %v", name)
}
} else if _, ok := field.TagSettings["JSON"]; ok {
field.DataType = String
field.Serializer = JSONSerializer{}
}
if num, ok := field.TagSettings["AUTOINCREMENTINCREMENT"]; ok {

View File

@ -77,7 +77,7 @@ func (JSONSerializer) Scan(ctx context.Context, field *Field, dst reflect.Value,
// Value implements serializer interface
func (JSONSerializer) Value(ctx context.Context, field *Field, dst reflect.Value, fieldValue interface{}) (interface{}, error) {
return fieldValue, nil
return json.Marshal(fieldValue)
}
// CreateClausesInterface create clauses interface

37
tests/serializer_test.go Normal file
View File

@ -0,0 +1,37 @@
package tests_test
import (
"testing"
"gorm.io/gorm"
. "gorm.io/gorm/utils/tests"
)
type SerializerStruct struct {
gorm.Model
Name []byte `gorm:"json"`
Roles Roles `gorm:"json"`
}
type Roles []string
func TestSerializerJSON(t *testing.T) {
DB.Migrator().DropTable(&SerializerStruct{})
if err := DB.Migrator().AutoMigrate(&SerializerStruct{}); err != nil {
t.Fatalf("no error should happen when migrate scanner, valuer struct, got error %v", err)
}
data := SerializerStruct{
Name: []byte("jinzhu"),
Roles: []string{"r1", "r2"},
}
if err := DB.Create(&data).Error; err != nil {
t.Fatalf("failed to create data, got error %v", err)
}
var result SerializerStruct
DB.First(&result, data.ID)
AssertEqual(t, result, data)
}