Skip to content

Commit c2d571c

Browse files
saeideeSaeid Saeidee
andauthored
test: coverage for duplicated key err (go-gorm#6389)
* test: ErrDuplicatedKey coverage added * test: updated sqlserver version * test: removed sqlserver * test: support added for sqlserver --------- Co-authored-by: Saeid Saeidee <[email protected]>
1 parent 7dd702d commit c2d571c

File tree

6 files changed

+44
-14
lines changed

6 files changed

+44
-14
lines changed

tests/associations_many2many_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -358,7 +358,7 @@ func TestDuplicateMany2ManyAssociation(t *testing.T) {
358358
}
359359

360360
func TestConcurrentMany2ManyAssociation(t *testing.T) {
361-
db, err := OpenTestConnection()
361+
db, err := OpenTestConnection(&gorm.Config{})
362362
if err != nil {
363363
t.Fatalf("open test connection failed, err: %+v", err)
364364
}

tests/error_translator_test.go

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,3 +27,34 @@ func TestDialectorWithErrorTranslatorSupport(t *testing.T) {
2727
t.Fatalf("expected err: %v got err: %v", translatedErr, err)
2828
}
2929
}
30+
31+
func TestSupportedDialectorWithErrDuplicatedKey(t *testing.T) {
32+
type City struct {
33+
gorm.Model
34+
Name string `gorm:"unique"`
35+
}
36+
37+
db, err := OpenTestConnection(&gorm.Config{TranslateError: true})
38+
if err != nil {
39+
t.Fatalf("failed to connect database, got error %v", err)
40+
}
41+
42+
dialectors := map[string]bool{"sqlite": true, "postgres": true, "mysql": true, "sqlserver": true}
43+
if supported, found := dialectors[db.Dialector.Name()]; !(found && supported) {
44+
return
45+
}
46+
47+
if err = db.AutoMigrate(&City{}); err != nil {
48+
t.Fatalf("failed to migrate cities table, got error: %v", err)
49+
}
50+
51+
err = db.Create(&City{Name: "Kabul"}).Error
52+
if err != nil {
53+
t.Fatalf("failed to create record: %v", err)
54+
}
55+
56+
err = db.Create(&City{Name: "Kabul"}).Error
57+
if !errors.Is(err, gorm.ErrDuplicatedKey) {
58+
t.Fatalf("expected err: %v got err: %v", gorm.ErrDuplicatedKey, err)
59+
}
60+
}

tests/go.mod

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,11 @@ require (
88
github.com/jinzhu/now v1.1.5
99
github.com/lib/pq v1.10.8
1010
github.com/mattn/go-sqlite3 v1.14.16 // indirect
11-
golang.org/x/crypto v0.8.0 // indirect
1211
gorm.io/driver/mysql v1.5.0
1312
gorm.io/driver/postgres v1.5.0
1413
gorm.io/driver/sqlite v1.5.0
15-
gorm.io/driver/sqlserver v1.4.3
16-
gorm.io/gorm v1.25.0
14+
gorm.io/driver/sqlserver v1.5.1
15+
gorm.io/gorm v1.25.1
1716
)
1817

1918
replace gorm.io/gorm => ../

tests/prepared_stmt_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,7 @@ func TestPreparedStmtFromTransaction(t *testing.T) {
9292
}
9393

9494
func TestPreparedStmtDeadlock(t *testing.T) {
95-
tx, err := OpenTestConnection()
95+
tx, err := OpenTestConnection(&gorm.Config{})
9696
AssertEqual(t, err, nil)
9797

9898
sqlDB, _ := tx.DB()
@@ -127,7 +127,7 @@ func TestPreparedStmtDeadlock(t *testing.T) {
127127
}
128128

129129
func TestPreparedStmtError(t *testing.T) {
130-
tx, err := OpenTestConnection()
130+
tx, err := OpenTestConnection(&gorm.Config{})
131131
AssertEqual(t, err, nil)
132132

133133
sqlDB, _ := tx.DB()

tests/tests_test.go

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ var (
2626

2727
func init() {
2828
var err error
29-
if DB, err = OpenTestConnection(); err != nil {
29+
if DB, err = OpenTestConnection(&gorm.Config{}); err != nil {
3030
log.Printf("failed to connect database, got error %v", err)
3131
os.Exit(1)
3232
} else {
@@ -49,15 +49,15 @@ func init() {
4949
}
5050
}
5151

52-
func OpenTestConnection() (db *gorm.DB, err error) {
52+
func OpenTestConnection(cfg *gorm.Config) (db *gorm.DB, err error) {
5353
dbDSN := os.Getenv("GORM_DSN")
5454
switch os.Getenv("GORM_DIALECT") {
5555
case "mysql":
5656
log.Println("testing mysql...")
5757
if dbDSN == "" {
5858
dbDSN = mysqlDSN
5959
}
60-
db, err = gorm.Open(mysql.Open(dbDSN), &gorm.Config{})
60+
db, err = gorm.Open(mysql.Open(dbDSN), cfg)
6161
case "postgres":
6262
log.Println("testing postgres...")
6363
if dbDSN == "" {
@@ -66,7 +66,7 @@ func OpenTestConnection() (db *gorm.DB, err error) {
6666
db, err = gorm.Open(postgres.New(postgres.Config{
6767
DSN: dbDSN,
6868
PreferSimpleProtocol: true,
69-
}), &gorm.Config{})
69+
}), cfg)
7070
case "sqlserver":
7171
// go install github.com/microsoft/go-sqlcmd/cmd/sqlcmd@latest
7272
// SQLCMDPASSWORD=LoremIpsum86 sqlcmd -U sa -S localhost:9930
@@ -80,16 +80,16 @@ func OpenTestConnection() (db *gorm.DB, err error) {
8080
if dbDSN == "" {
8181
dbDSN = sqlserverDSN
8282
}
83-
db, err = gorm.Open(sqlserver.Open(dbDSN), &gorm.Config{})
83+
db, err = gorm.Open(sqlserver.Open(dbDSN), cfg)
8484
case "tidb":
8585
log.Println("testing tidb...")
8686
if dbDSN == "" {
8787
dbDSN = tidbDSN
8888
}
89-
db, err = gorm.Open(mysql.Open(dbDSN), &gorm.Config{})
89+
db, err = gorm.Open(mysql.Open(dbDSN), cfg)
9090
default:
9191
log.Println("testing sqlite3...")
92-
db, err = gorm.Open(sqlite.Open(filepath.Join(os.TempDir(), "gorm.db")), &gorm.Config{})
92+
db, err = gorm.Open(sqlite.Open(filepath.Join(os.TempDir(), "gorm.db")), cfg)
9393
}
9494

9595
if err != nil {

tests/transaction_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -361,7 +361,7 @@ func TestDisabledNestedTransaction(t *testing.T) {
361361
}
362362

363363
func TestTransactionOnClosedConn(t *testing.T) {
364-
DB, err := OpenTestConnection()
364+
DB, err := OpenTestConnection(&gorm.Config{})
365365
if err != nil {
366366
t.Fatalf("failed to connect database, got error %v", err)
367367
}

0 commit comments

Comments
 (0)