Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

test: ErrDuplicatedKey covered #6388

Closed
wants to merge 1 commit into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion tests/associations_many2many_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -358,7 +358,7 @@ func TestDuplicateMany2ManyAssociation(t *testing.T) {
}

func TestConcurrentMany2ManyAssociation(t *testing.T) {
db, err := OpenTestConnection()
db, err := OpenTestConnection(&gorm.Config{})
if err != nil {
t.Fatalf("open test connection failed, err: %+v", err)
}
Expand Down
32 changes: 32 additions & 0 deletions tests/error_translator_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -27,3 +27,35 @@ func TestDialectorWithErrorTranslatorSupport(t *testing.T) {
t.Fatalf("expected err: %v got err: %v", translatedErr, err)
}
}

func TestSupportedDialectorWithErrDuplicatedKey(t *testing.T) {
type City struct {
gorm.Model
Name string `gorm:"unique"`
}

db, err := OpenTestConnection(&gorm.Config{TranslateError: true})
if err != nil {
t.Fatalf("failed to connect database, got error %v", err)
}

var supportedDialectors map[string]bool = map[string]bool{"sqlite": true, "postgres": true, "mysql": true, "sqlserver": true}

if _, supported := supportedDialectors[db.Dialector.Name()]; !supported {
return
}

if err := db.AutoMigrate(&City{}); err != nil {
t.Fatalf("failed to migrate cities table, got error: %v", err)
}

err = db.Create(&City{Name: "Istanbul"}).Error
if err != nil {
t.Fatalf("failed to create record: %v", err)
}

err = db.Create(&City{Name: "Istanbul"}).Error
if !errors.Is(err, gorm.ErrDuplicatedKey) {
t.Fatalf("expected err: %v got err: %v", gorm.ErrDuplicatedKey, err)
}
}
2 changes: 1 addition & 1 deletion tests/migrate_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -1106,7 +1106,7 @@ func TestInvalidCachedPlanPrepareStmt(t *testing.T) {
t.Errorf("Open err:%v", err)
}
if debug := os.Getenv("DEBUG"); debug == "true" {
db.Logger = db.Logger.LogMode(logger.Info)
db.Logger = db.Logger.LogMode(logger.Silent)
} else if debug == "false" {
db.Logger = db.Logger.LogMode(logger.Silent)
}
Expand Down
4 changes: 2 additions & 2 deletions tests/prepared_stmt_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -92,7 +92,7 @@ func TestPreparedStmtFromTransaction(t *testing.T) {
}

func TestPreparedStmtDeadlock(t *testing.T) {
tx, err := OpenTestConnection()
tx, err := OpenTestConnection(&gorm.Config{})
AssertEqual(t, err, nil)

sqlDB, _ := tx.DB()
Expand Down Expand Up @@ -127,7 +127,7 @@ func TestPreparedStmtDeadlock(t *testing.T) {
}

func TestPreparedStmtError(t *testing.T) {
tx, err := OpenTestConnection()
tx, err := OpenTestConnection(&gorm.Config{})
AssertEqual(t, err, nil)

sqlDB, _ := tx.DB()
Expand Down
16 changes: 8 additions & 8 deletions tests/tests_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ var (

func init() {
var err error
if DB, err = OpenTestConnection(); err != nil {
if DB, err = OpenTestConnection(&gorm.Config{}); err != nil {
log.Printf("failed to connect database, got error %v", err)
os.Exit(1)
} else {
Expand All @@ -49,15 +49,15 @@ func init() {
}
}

func OpenTestConnection() (db *gorm.DB, err error) {
func OpenTestConnection(cfg *gorm.Config) (db *gorm.DB, err error) {
dbDSN := os.Getenv("GORM_DSN")
switch os.Getenv("GORM_DIALECT") {
case "mysql":
log.Println("testing mysql...")
if dbDSN == "" {
dbDSN = mysqlDSN
}
db, err = gorm.Open(mysql.Open(dbDSN), &gorm.Config{})
db, err = gorm.Open(mysql.Open(dbDSN), cfg)
case "postgres":
log.Println("testing postgres...")
if dbDSN == "" {
Expand All @@ -66,7 +66,7 @@ func OpenTestConnection() (db *gorm.DB, err error) {
db, err = gorm.Open(postgres.New(postgres.Config{
DSN: dbDSN,
PreferSimpleProtocol: true,
}), &gorm.Config{})
}), cfg)
case "sqlserver":
// go install github.com/microsoft/go-sqlcmd/cmd/sqlcmd@latest
// SQLCMDPASSWORD=LoremIpsum86 sqlcmd -U sa -S localhost:9930
Expand All @@ -80,24 +80,24 @@ func OpenTestConnection() (db *gorm.DB, err error) {
if dbDSN == "" {
dbDSN = sqlserverDSN
}
db, err = gorm.Open(sqlserver.Open(dbDSN), &gorm.Config{})
db, err = gorm.Open(sqlserver.Open(dbDSN), cfg)
case "tidb":
log.Println("testing tidb...")
if dbDSN == "" {
dbDSN = tidbDSN
}
db, err = gorm.Open(mysql.Open(dbDSN), &gorm.Config{})
db, err = gorm.Open(mysql.Open(dbDSN), cfg)
default:
log.Println("testing sqlite3...")
db, err = gorm.Open(sqlite.Open(filepath.Join(os.TempDir(), "gorm.db")), &gorm.Config{})
db, err = gorm.Open(sqlite.Open(filepath.Join(os.TempDir(), "gorm.db")), cfg)
}

if err != nil {
return
}

if debug := os.Getenv("DEBUG"); debug == "true" {
db.Logger = db.Logger.LogMode(logger.Info)
db.Logger = db.Logger.LogMode(logger.Silent)
} else if debug == "false" {
db.Logger = db.Logger.LogMode(logger.Silent)
}
Expand Down
2 changes: 1 addition & 1 deletion tests/transaction_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -361,7 +361,7 @@ func TestDisabledNestedTransaction(t *testing.T) {
}

func TestTransactionOnClosedConn(t *testing.T) {
DB, err := OpenTestConnection()
DB, err := OpenTestConnection(&gorm.Config{})
if err != nil {
t.Fatalf("failed to connect database, got error %v", err)
}
Expand Down