Add schema tests
This commit is contained in:
parent
bf0cec734f
commit
af5536108a
@ -18,7 +18,7 @@ type Relationship struct {
|
|||||||
AssociationJointableForeignkey []string
|
AssociationJointableForeignkey []string
|
||||||
}
|
}
|
||||||
|
|
||||||
func buildToOneRel(field *Field, sourceSchema *Schema) error {
|
func buildToOneRel(field *Field, sourceSchema *Schema) {
|
||||||
var (
|
var (
|
||||||
// user has one profile, associationType is User, profile use UserID as foreign key
|
// 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
|
// 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}
|
associationForeignKeys = []string{getPrimaryPrimaryField(sourceSchema.PrimaryFields).DBName}
|
||||||
}
|
}
|
||||||
} else if len(foreignKeys) != len(associationForeignKeys) {
|
} 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 {
|
if len(relationship.ForeignKey) != 0 {
|
||||||
relationship.Kind = "has_one"
|
relationship.Kind = "has_one"
|
||||||
field.Relationship = relationship
|
field.Relationship = relationship
|
||||||
return nil
|
return
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -154,7 +154,7 @@ func buildToOneRel(field *Field, sourceSchema *Schema) error {
|
|||||||
associationForeignKeys = []string{getPrimaryPrimaryField(destSchema.PrimaryFields).DBName}
|
associationForeignKeys = []string{getPrimaryPrimaryField(destSchema.PrimaryFields).DBName}
|
||||||
}
|
}
|
||||||
} else if len(foreignKeys) != len(associationForeignKeys) {
|
} 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
|
field.Relationship = relationship
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return nil
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
func buildToManyRel(field *Field, sourceSchema *Schema) error {
|
func buildToManyRel(field *Field, sourceSchema *Schema) {
|
||||||
var (
|
var (
|
||||||
relationship = &Relationship{}
|
relationship = &Relationship{}
|
||||||
elemType = field.StructField.Type
|
elemType = field.StructField.Type
|
||||||
@ -321,7 +321,7 @@ func buildToManyRel(field *Field, sourceSchema *Schema) error {
|
|||||||
associationForeignKeys = []string{getPrimaryPrimaryField(sourceSchema.PrimaryFields).DBName}
|
associationForeignKeys = []string{getPrimaryPrimaryField(sourceSchema.PrimaryFields).DBName}
|
||||||
}
|
}
|
||||||
} else if len(foreignKeys) != len(associationForeignKeys) {
|
} 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 {
|
} else {
|
||||||
field.IsNormal = true
|
field.IsNormal = true
|
||||||
}
|
}
|
||||||
return nil
|
return
|
||||||
}
|
}
|
||||||
|
@ -1,20 +1,92 @@
|
|||||||
package schema
|
package schema
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"database/sql"
|
||||||
"testing"
|
"testing"
|
||||||
|
"time"
|
||||||
"github.com/davecgh/go-spew/spew"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
type MyStruct struct {
|
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
|
ID int
|
||||||
Name string
|
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) {
|
func TestParseSchema(t *testing.T) {
|
||||||
Schema := ParseSchema(&MyStruct{})
|
ParseSchema(&MyStruct{})
|
||||||
spew.Dump(Schema)
|
}
|
||||||
|
|
||||||
|
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