test: namer identifier lenght (#6872)
This commit is contained in:
parent
f17a75242e
commit
9efae659cb
@ -2,8 +2,10 @@ package tests_test
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"regexp"
|
"regexp"
|
||||||
|
"sync"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
|
"gorm.io/driver/postgres"
|
||||||
"gorm.io/gorm"
|
"gorm.io/gorm"
|
||||||
"gorm.io/gorm/schema"
|
"gorm.io/gorm/schema"
|
||||||
"gorm.io/gorm/utils/tests"
|
"gorm.io/gorm/utils/tests"
|
||||||
@ -172,3 +174,88 @@ func TestTableWithNamer(t *testing.T) {
|
|||||||
t.Errorf("Table with namer, got %v", sql)
|
t.Errorf("Table with namer, got %v", sql)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestPostgresTableWithIdentifierLength(t *testing.T) {
|
||||||
|
if DB.Dialector.Name() != "postgres" {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
type LongString struct {
|
||||||
|
ThisIsAVeryVeryVeryVeryVeryVeryVeryVeryVeryLongString string `gorm:"unique"`
|
||||||
|
}
|
||||||
|
|
||||||
|
t.Run("default", func(t *testing.T) {
|
||||||
|
db, _ := gorm.Open(postgres.Open(postgresDSN), &gorm.Config{})
|
||||||
|
user, err := schema.Parse(&LongString{}, &sync.Map{}, db.Config.NamingStrategy)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("failed to parse user unique, got error %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
constraints := user.ParseUniqueConstraints()
|
||||||
|
if len(constraints) != 1 {
|
||||||
|
t.Fatalf("failed to find unique constraint, got %v", constraints)
|
||||||
|
}
|
||||||
|
|
||||||
|
for key := range constraints {
|
||||||
|
if len(key) != 63 {
|
||||||
|
t.Errorf("failed to find unique constraint, got %v", constraints)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
t.Run("naming strategy", func(t *testing.T) {
|
||||||
|
db, _ := gorm.Open(postgres.Open(postgresDSN), &gorm.Config{
|
||||||
|
NamingStrategy: schema.NamingStrategy{},
|
||||||
|
})
|
||||||
|
|
||||||
|
user, err := schema.Parse(&LongString{}, &sync.Map{}, db.Config.NamingStrategy)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("failed to parse user unique, got error %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
constraints := user.ParseUniqueConstraints()
|
||||||
|
if len(constraints) != 1 {
|
||||||
|
t.Fatalf("failed to find unique constraint, got %v", constraints)
|
||||||
|
}
|
||||||
|
|
||||||
|
for key := range constraints {
|
||||||
|
if len(key) != 63 {
|
||||||
|
t.Errorf("failed to find unique constraint, got %v", constraints)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
t.Run("namer", func(t *testing.T) {
|
||||||
|
uname := "custom_unique_name"
|
||||||
|
db, _ := gorm.Open(postgres.Open(postgresDSN), &gorm.Config{
|
||||||
|
NamingStrategy: mockUniqueNamingStrategy{
|
||||||
|
UName: uname,
|
||||||
|
},
|
||||||
|
})
|
||||||
|
|
||||||
|
user, err := schema.Parse(&LongString{}, &sync.Map{}, db.Config.NamingStrategy)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("failed to parse user unique, got error %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
constraints := user.ParseUniqueConstraints()
|
||||||
|
if len(constraints) != 1 {
|
||||||
|
t.Fatalf("failed to find unique constraint, got %v", constraints)
|
||||||
|
}
|
||||||
|
|
||||||
|
for key := range constraints {
|
||||||
|
if key != uname {
|
||||||
|
t.Errorf("failed to find unique constraint, got %v", constraints)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
type mockUniqueNamingStrategy struct {
|
||||||
|
UName string
|
||||||
|
schema.NamingStrategy
|
||||||
|
}
|
||||||
|
|
||||||
|
func (a mockUniqueNamingStrategy) UniqueName(table, column string) string {
|
||||||
|
return a.UName
|
||||||
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user