test: ErrDuplicatedKey covered
This commit is contained in:
		
							parent
							
								
									661781a3d7
								
							
						
					
					
						commit
						072b426a36
					
				@ -358,7 +358,7 @@ func TestDuplicateMany2ManyAssociation(t *testing.T) {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func TestConcurrentMany2ManyAssociation(t *testing.T) {
 | 
					func TestConcurrentMany2ManyAssociation(t *testing.T) {
 | 
				
			||||||
	db, err := OpenTestConnection()
 | 
						db, err := OpenTestConnection(&gorm.Config{})
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		t.Fatalf("open test connection failed, err: %+v", err)
 | 
							t.Fatalf("open test connection failed, err: %+v", err)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
				
			|||||||
@ -27,3 +27,35 @@ func TestDialectorWithErrorTranslatorSupport(t *testing.T) {
 | 
				
			|||||||
		t.Fatalf("expected err: %v got err: %v", translatedErr, err)
 | 
							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)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -1106,7 +1106,7 @@ func TestInvalidCachedPlanPrepareStmt(t *testing.T) {
 | 
				
			|||||||
		t.Errorf("Open err:%v", err)
 | 
							t.Errorf("Open err:%v", err)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	if debug := os.Getenv("DEBUG"); debug == "true" {
 | 
						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" {
 | 
						} else if debug == "false" {
 | 
				
			||||||
		db.Logger = db.Logger.LogMode(logger.Silent)
 | 
							db.Logger = db.Logger.LogMode(logger.Silent)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
				
			|||||||
@ -92,7 +92,7 @@ func TestPreparedStmtFromTransaction(t *testing.T) {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func TestPreparedStmtDeadlock(t *testing.T) {
 | 
					func TestPreparedStmtDeadlock(t *testing.T) {
 | 
				
			||||||
	tx, err := OpenTestConnection()
 | 
						tx, err := OpenTestConnection(&gorm.Config{})
 | 
				
			||||||
	AssertEqual(t, err, nil)
 | 
						AssertEqual(t, err, nil)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	sqlDB, _ := tx.DB()
 | 
						sqlDB, _ := tx.DB()
 | 
				
			||||||
@ -127,7 +127,7 @@ func TestPreparedStmtDeadlock(t *testing.T) {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func TestPreparedStmtError(t *testing.T) {
 | 
					func TestPreparedStmtError(t *testing.T) {
 | 
				
			||||||
	tx, err := OpenTestConnection()
 | 
						tx, err := OpenTestConnection(&gorm.Config{})
 | 
				
			||||||
	AssertEqual(t, err, nil)
 | 
						AssertEqual(t, err, nil)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	sqlDB, _ := tx.DB()
 | 
						sqlDB, _ := tx.DB()
 | 
				
			||||||
 | 
				
			|||||||
@ -26,7 +26,7 @@ var (
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
func init() {
 | 
					func init() {
 | 
				
			||||||
	var err error
 | 
						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)
 | 
							log.Printf("failed to connect database, got error %v", err)
 | 
				
			||||||
		os.Exit(1)
 | 
							os.Exit(1)
 | 
				
			||||||
	} else {
 | 
						} else {
 | 
				
			||||||
@ -49,7 +49,7 @@ func init() {
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func OpenTestConnection() (db *gorm.DB, err error) {
 | 
					func OpenTestConnection(cfg *gorm.Config) (db *gorm.DB, err error) {
 | 
				
			||||||
	dbDSN := os.Getenv("GORM_DSN")
 | 
						dbDSN := os.Getenv("GORM_DSN")
 | 
				
			||||||
	switch os.Getenv("GORM_DIALECT") {
 | 
						switch os.Getenv("GORM_DIALECT") {
 | 
				
			||||||
	case "mysql":
 | 
						case "mysql":
 | 
				
			||||||
@ -57,7 +57,7 @@ func OpenTestConnection() (db *gorm.DB, err error) {
 | 
				
			|||||||
		if dbDSN == "" {
 | 
							if dbDSN == "" {
 | 
				
			||||||
			dbDSN = mysqlDSN
 | 
								dbDSN = mysqlDSN
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		db, err = gorm.Open(mysql.Open(dbDSN), &gorm.Config{})
 | 
							db, err = gorm.Open(mysql.Open(dbDSN), cfg)
 | 
				
			||||||
	case "postgres":
 | 
						case "postgres":
 | 
				
			||||||
		log.Println("testing postgres...")
 | 
							log.Println("testing postgres...")
 | 
				
			||||||
		if dbDSN == "" {
 | 
							if dbDSN == "" {
 | 
				
			||||||
@ -66,7 +66,7 @@ func OpenTestConnection() (db *gorm.DB, err error) {
 | 
				
			|||||||
		db, err = gorm.Open(postgres.New(postgres.Config{
 | 
							db, err = gorm.Open(postgres.New(postgres.Config{
 | 
				
			||||||
			DSN:                  dbDSN,
 | 
								DSN:                  dbDSN,
 | 
				
			||||||
			PreferSimpleProtocol: true,
 | 
								PreferSimpleProtocol: true,
 | 
				
			||||||
		}), &gorm.Config{})
 | 
							}), cfg)
 | 
				
			||||||
	case "sqlserver":
 | 
						case "sqlserver":
 | 
				
			||||||
		// go install github.com/microsoft/go-sqlcmd/cmd/sqlcmd@latest
 | 
							// go install github.com/microsoft/go-sqlcmd/cmd/sqlcmd@latest
 | 
				
			||||||
		// SQLCMDPASSWORD=LoremIpsum86 sqlcmd -U sa -S localhost:9930
 | 
							// SQLCMDPASSWORD=LoremIpsum86 sqlcmd -U sa -S localhost:9930
 | 
				
			||||||
@ -80,16 +80,16 @@ func OpenTestConnection() (db *gorm.DB, err error) {
 | 
				
			|||||||
		if dbDSN == "" {
 | 
							if dbDSN == "" {
 | 
				
			||||||
			dbDSN = sqlserverDSN
 | 
								dbDSN = sqlserverDSN
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		db, err = gorm.Open(sqlserver.Open(dbDSN), &gorm.Config{})
 | 
							db, err = gorm.Open(sqlserver.Open(dbDSN), cfg)
 | 
				
			||||||
	case "tidb":
 | 
						case "tidb":
 | 
				
			||||||
		log.Println("testing tidb...")
 | 
							log.Println("testing tidb...")
 | 
				
			||||||
		if dbDSN == "" {
 | 
							if dbDSN == "" {
 | 
				
			||||||
			dbDSN = tidbDSN
 | 
								dbDSN = tidbDSN
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		db, err = gorm.Open(mysql.Open(dbDSN), &gorm.Config{})
 | 
							db, err = gorm.Open(mysql.Open(dbDSN), cfg)
 | 
				
			||||||
	default:
 | 
						default:
 | 
				
			||||||
		log.Println("testing sqlite3...")
 | 
							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 {
 | 
						if err != nil {
 | 
				
			||||||
@ -97,7 +97,7 @@ func OpenTestConnection() (db *gorm.DB, err error) {
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if debug := os.Getenv("DEBUG"); debug == "true" {
 | 
						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" {
 | 
						} else if debug == "false" {
 | 
				
			||||||
		db.Logger = db.Logger.LogMode(logger.Silent)
 | 
							db.Logger = db.Logger.LogMode(logger.Silent)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
				
			|||||||
@ -361,7 +361,7 @@ func TestDisabledNestedTransaction(t *testing.T) {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func TestTransactionOnClosedConn(t *testing.T) {
 | 
					func TestTransactionOnClosedConn(t *testing.T) {
 | 
				
			||||||
	DB, err := OpenTestConnection()
 | 
						DB, err := OpenTestConnection(&gorm.Config{})
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		t.Fatalf("failed to connect database, got error %v", err)
 | 
							t.Fatalf("failed to connect database, got error %v", err)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user