@@ -11,7 +11,10 @@ import (
1111func 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