Skip to content

Commit 600aa16

Browse files
authored
Merge pull request #54 from gliptak/rollbackfail1
Implement rollback throw test
2 parents 90f77f1 + c657395 commit 600aa16

File tree

1 file changed

+40
-4
lines changed

1 file changed

+40
-4
lines changed

sqlmock_test.go

Lines changed: 40 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,10 @@ import (
1111
func cancelOrder(db *sql.DB, orderID int) error {
1212
tx, _ := db.Begin()
1313
_, _ = tx.Query("SELECT * FROM orders {0} FOR UPDATE", orderID)
14-
_ = tx.Rollback()
14+
err := tx.Rollback()
15+
if (err != nil) {
16+
return err
17+
}
1518
return nil
1619
}
1720

@@ -214,7 +217,7 @@ func TestTransactionExpectations(t *testing.T) {
214217

215218
err = tx.Commit()
216219
if err != nil {
217-
t.Errorf("an error '%s' was not expected when commiting a transaction", err)
220+
t.Errorf("an error '%s' was not expected when committing a transaction", err)
218221
}
219222

220223
// begin and rollback
@@ -394,7 +397,7 @@ func TestWrongExpectations(t *testing.T) {
394397
WithArgs(5).
395398
WillReturnRows(rs1)
396399

397-
mock.ExpectCommit().WillReturnError(fmt.Errorf("deadlock occured"))
400+
mock.ExpectCommit().WillReturnError(fmt.Errorf("deadlock occurred"))
398401
mock.ExpectRollback() // won't be triggered
399402

400403
var id int
@@ -418,7 +421,7 @@ func TestWrongExpectations(t *testing.T) {
418421

419422
err = tx.Commit()
420423
if err == nil {
421-
t.Error("a deadlock error was expected when commiting a transaction", err)
424+
t.Error("a deadlock error was expected when committing a transaction", err)
422425
}
423426

424427
if err := mock.ExpectationsWereMet(); err == nil {
@@ -773,3 +776,36 @@ func TestPrepareExpectationNotFulfilled(t *testing.T) {
773776
t.Errorf("was expecting an error, since prepared statement query does not match, but there was none")
774777
}
775778
}
779+
780+
func TestRollbackThrow(t *testing.T) {
781+
// Open new mock database
782+
db, mock, err := New()
783+
if err != nil {
784+
fmt.Println("error creating mock database")
785+
return
786+
}
787+
// columns to be used for result
788+
columns := []string{"id", "status"}
789+
// expect transaction begin
790+
mock.ExpectBegin()
791+
// expect query to fetch order, match it with regexp
792+
mock.ExpectQuery("SELECT (.+) FROM orders (.+) FOR UPDATE").
793+
WithArgs(1).
794+
WillReturnRows(NewRows(columns).AddRow(1, 1))
795+
// expect transaction rollback, since order status is "cancelled"
796+
mock.ExpectRollback().WillReturnError(fmt.Errorf("rollback failed"))
797+
798+
// run the cancel order function
799+
someOrderID := 1
800+
// call a function which executes expected database operations
801+
err = cancelOrder(db, someOrderID)
802+
if err == nil {
803+
t.Error("an error was expected when rolling back transaction, but got none")
804+
}
805+
806+
// ensure all expectations have been met
807+
if err = mock.ExpectationsWereMet(); err != nil {
808+
fmt.Printf("unmet expectation error: %s", err)
809+
}
810+
// Output:
811+
}

0 commit comments

Comments
 (0)