Add schema tests
This commit is contained in:
		
							parent
							
								
									bf0cec734f
								
							
						
					
					
						commit
						af5536108a
					
				@ -18,7 +18,7 @@ type Relationship struct {
 | 
			
		||||
	AssociationJointableForeignkey []string
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func buildToOneRel(field *Field, sourceSchema *Schema) error {
 | 
			
		||||
func buildToOneRel(field *Field, sourceSchema *Schema) {
 | 
			
		||||
	var (
 | 
			
		||||
		// user has one profile, associationType is User, profile use UserID as foreign key
 | 
			
		||||
		// user belongs to profile, associationType is Profile, user use ProfileID as foreign key
 | 
			
		||||
@ -94,7 +94,7 @@ func buildToOneRel(field *Field, sourceSchema *Schema) error {
 | 
			
		||||
					associationForeignKeys = []string{getPrimaryPrimaryField(sourceSchema.PrimaryFields).DBName}
 | 
			
		||||
				}
 | 
			
		||||
			} else if len(foreignKeys) != len(associationForeignKeys) {
 | 
			
		||||
				return errors.New("invalid foreign keys, should have same length")
 | 
			
		||||
				sourceSchema.ParseErrors = append(sourceSchema.ParseErrors, errors.New("invalid foreign keys, should have same length"))
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
@ -114,7 +114,7 @@ func buildToOneRel(field *Field, sourceSchema *Schema) error {
 | 
			
		||||
		if len(relationship.ForeignKey) != 0 {
 | 
			
		||||
			relationship.Kind = "has_one"
 | 
			
		||||
			field.Relationship = relationship
 | 
			
		||||
			return nil
 | 
			
		||||
			return
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
@ -154,7 +154,7 @@ func buildToOneRel(field *Field, sourceSchema *Schema) error {
 | 
			
		||||
					associationForeignKeys = []string{getPrimaryPrimaryField(destSchema.PrimaryFields).DBName}
 | 
			
		||||
				}
 | 
			
		||||
			} else if len(foreignKeys) != len(associationForeignKeys) {
 | 
			
		||||
				return errors.New("invalid foreign keys, should have same length")
 | 
			
		||||
				sourceSchema.ParseErrors = append(sourceSchema.ParseErrors, errors.New("invalid foreign keys, should have same length"))
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
@ -177,10 +177,10 @@ func buildToOneRel(field *Field, sourceSchema *Schema) error {
 | 
			
		||||
			field.Relationship = relationship
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	return nil
 | 
			
		||||
	return
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func buildToManyRel(field *Field, sourceSchema *Schema) error {
 | 
			
		||||
func buildToManyRel(field *Field, sourceSchema *Schema) {
 | 
			
		||||
	var (
 | 
			
		||||
		relationship                        = &Relationship{}
 | 
			
		||||
		elemType                            = field.StructField.Type
 | 
			
		||||
@ -321,7 +321,7 @@ func buildToManyRel(field *Field, sourceSchema *Schema) error {
 | 
			
		||||
						associationForeignKeys = []string{getPrimaryPrimaryField(sourceSchema.PrimaryFields).DBName}
 | 
			
		||||
					}
 | 
			
		||||
				} else if len(foreignKeys) != len(associationForeignKeys) {
 | 
			
		||||
					return errors.New("invalid foreign keys, should have same length")
 | 
			
		||||
					sourceSchema.ParseErrors = append(sourceSchema.ParseErrors, errors.New("invalid foreign keys, should have same length"))
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
@ -345,5 +345,5 @@ func buildToManyRel(field *Field, sourceSchema *Schema) error {
 | 
			
		||||
	} else {
 | 
			
		||||
		field.IsNormal = true
 | 
			
		||||
	}
 | 
			
		||||
	return nil
 | 
			
		||||
	return
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -1,20 +1,92 @@
 | 
			
		||||
package schema
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"database/sql"
 | 
			
		||||
	"testing"
 | 
			
		||||
 | 
			
		||||
	"github.com/davecgh/go-spew/spew"
 | 
			
		||||
	"time"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
type MyStruct struct {
 | 
			
		||||
	ID            int
 | 
			
		||||
	Int           uint
 | 
			
		||||
	IntPointer    *uint
 | 
			
		||||
	String        string
 | 
			
		||||
	StringPointer *string
 | 
			
		||||
	Time          time.Time
 | 
			
		||||
	TimePointer   *time.Time
 | 
			
		||||
	NullInt64     sql.NullInt64
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type BelongsTo struct {
 | 
			
		||||
	ID   int
 | 
			
		||||
	Name string
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type BelongTo struct {
 | 
			
		||||
type HasOne struct {
 | 
			
		||||
	ID         int
 | 
			
		||||
	MyStructID uint
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type HasMany struct {
 | 
			
		||||
	ID         int
 | 
			
		||||
	MyStructID uint
 | 
			
		||||
	Name       string
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type Many2Many struct {
 | 
			
		||||
	ID   int
 | 
			
		||||
	Name string
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func TestParseSchema(t *testing.T) {
 | 
			
		||||
	Schema := ParseSchema(&MyStruct{})
 | 
			
		||||
	spew.Dump(Schema)
 | 
			
		||||
	ParseSchema(&MyStruct{})
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func TestParseBelongsToRel(t *testing.T) {
 | 
			
		||||
	type MyStruct struct {
 | 
			
		||||
		ID        int
 | 
			
		||||
		Name      string
 | 
			
		||||
		BelongsTo BelongsTo
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	ParseSchema(&MyStruct{})
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func TestParseHasOneRel(t *testing.T) {
 | 
			
		||||
	type MyStruct struct {
 | 
			
		||||
		ID     int
 | 
			
		||||
		Name   string
 | 
			
		||||
		HasOne HasOne
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	ParseSchema(&MyStruct{})
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func TestParseHasManyRel(t *testing.T) {
 | 
			
		||||
	type MyStruct struct {
 | 
			
		||||
		ID      int
 | 
			
		||||
		Name    string
 | 
			
		||||
		HasMany []HasMany
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	ParseSchema(&MyStruct{})
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func TestParseManyToManyRel(t *testing.T) {
 | 
			
		||||
	type MyStruct struct {
 | 
			
		||||
		ID      int
 | 
			
		||||
		Name    string
 | 
			
		||||
		HasMany []HasMany
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	ParseSchema(&MyStruct{})
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func TestEmbeddedStruct(t *testing.T) {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func TestCustomizePrimaryKey(t *testing.T) {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func TestCompositePrimaryKeys(t *testing.T) {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										32
									
								
								schema/utils_test.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										32
									
								
								schema/utils_test.go
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,32 @@
 | 
			
		||||
package schema
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"testing"
 | 
			
		||||
 | 
			
		||||
	gorm "github.com/jinzhu/gorm.bak"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func TestToDBName(t *testing.T) {
 | 
			
		||||
	var maps = map[string]string{
 | 
			
		||||
		"":                          "",
 | 
			
		||||
		"X":                         "x",
 | 
			
		||||
		"ThisIsATest":               "this_is_a_test",
 | 
			
		||||
		"PFAndESI":                  "pf_and_esi",
 | 
			
		||||
		"AbcAndJkl":                 "abc_and_jkl",
 | 
			
		||||
		"EmployeeID":                "employee_id",
 | 
			
		||||
		"SKU_ID":                    "sku_id",
 | 
			
		||||
		"FieldX":                    "field_x",
 | 
			
		||||
		"HTTPAndSMTP":               "http_and_smtp",
 | 
			
		||||
		"HTTPServerHandlerForURLID": "http_server_handler_for_url_id",
 | 
			
		||||
		"UUID":     "uuid",
 | 
			
		||||
		"HTTPURL":  "http_url",
 | 
			
		||||
		"HTTP_URL": "http_url",
 | 
			
		||||
		"ThisIsActuallyATestSoWeMayBeAbleToUseThisCodeInGormPackageAlsoIdCanBeUsedAtTheEndAsID": "this_is_actually_a_test_so_we_may_be_able_to_use_this_code_in_gorm_package_also_id_can_be_used_at_the_end_as_id",
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	for key, value := range maps {
 | 
			
		||||
		if gorm.ToDBName(key) != value {
 | 
			
		||||
			t.Errorf("%v ToDBName should equal %v, but got %v", key, value, gorm.ToDBName(key))
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user