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 {
|
||||
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 {
|
||||
|
@ -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
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