Add serializer test
This commit is contained in:
parent
0b039497c4
commit
5f6d85c00a
@ -175,10 +175,13 @@ func (schema *Schema) ParseField(fieldStruct reflect.StructField) *Field {
|
|||||||
} else if name, ok := field.TagSettings["SERIALIZER"]; ok {
|
} else if name, ok := field.TagSettings["SERIALIZER"]; ok {
|
||||||
field.DataType = String
|
field.DataType = String
|
||||||
if strings.ToLower(name) == "json" {
|
if strings.ToLower(name) == "json" {
|
||||||
field.Serializer = &JSONSerializer{}
|
field.Serializer = JSONSerializer{}
|
||||||
} else {
|
} else {
|
||||||
schema.err = fmt.Errorf("invalid serializer type %v", name)
|
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 {
|
if num, ok := field.TagSettings["AUTOINCREMENTINCREMENT"]; ok {
|
||||||
|
@ -77,7 +77,7 @@ func (JSONSerializer) Scan(ctx context.Context, field *Field, dst reflect.Value,
|
|||||||
|
|
||||||
// Value implements serializer interface
|
// Value implements serializer interface
|
||||||
func (JSONSerializer) Value(ctx context.Context, field *Field, dst reflect.Value, fieldValue interface{}) (interface{}, error) {
|
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
|
// CreateClausesInterface create clauses interface
|
||||||
|
37
tests/serializer_test.go
Normal file
37
tests/serializer_test.go
Normal 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)
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user