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