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