Skip to content

Commit

Permalink
Merge pull request #39 from jamiecuthill/master
Browse files Browse the repository at this point in the history
Trigger expectations met when query and args matched
  • Loading branch information
l3pp4rd committed Feb 26, 2016
2 parents 3730250 + 4689a4a commit 9958e5c
Show file tree
Hide file tree
Showing 2 changed files with 37 additions and 6 deletions.
7 changes: 5 additions & 2 deletions sqlmock.go
Original file line number Diff line number Diff line change
Expand Up @@ -240,14 +240,16 @@ func (c *sqlmock) Exec(query string, args []driver.Value) (res driver.Result, er
return nil, fmt.Errorf("exec query '%s', arguments do not match: %s", query, err)
}

expected.triggered = true

if expected.err != nil {
return nil, expected.err // mocked to return error
}

if expected.result == nil {
return nil, fmt.Errorf("exec query '%s' with args %+v, must return a database/sql/driver.result, but it was not set for expectation %T as %+v", query, args, expected, expected)
}
expected.triggered = true

return expected.result, err
}

Expand Down Expand Up @@ -349,6 +351,8 @@ func (c *sqlmock) Query(query string, args []driver.Value) (rw driver.Rows, err
return nil, fmt.Errorf("exec query '%s', arguments do not match: %s", query, err)
}

expected.triggered = true

if expected.err != nil {
return nil, expected.err // mocked to return error
}
Expand All @@ -357,7 +361,6 @@ func (c *sqlmock) Query(query string, args []driver.Value) (rw driver.Rows, err
return nil, fmt.Errorf("query '%s' with args %+v, must return a database/sql/driver.rows, but it was not set for expectation %T as %+v", query, args, expected, expected)
}

expected.triggered = true
return expected.rows, err
}

Expand Down
36 changes: 32 additions & 4 deletions sqlmock_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -679,14 +679,42 @@ func TestRunExecsWithOrderedShouldNotMeetAllExpectations(t *testing.T) {
// see #37 issue
func TestRunQueriesWithOrderedShouldNotMeetAllExpectations(t *testing.T) {
db, dbmock, _ := New()
dbmock.ExpectQuery("THE FIRST EXEC")
dbmock.ExpectQuery("THE SECOND EXEC")
dbmock.ExpectQuery("THE FIRST QUERY")
dbmock.ExpectQuery("THE SECOND QUERY")

_, _ = db.Query("THE FIRST EXEC")
_, _ = db.Query("THE WRONG EXEC")
_, _ = db.Query("THE FIRST QUERY")
_, _ = db.Query("THE WRONG QUERY")

err := dbmock.ExpectationsWereMet()
if err == nil {
t.Fatal("was expecting an error, but there wasn't any")
}
}

func TestRunExecsWithExpectedErrorMeetsExpectations(t *testing.T) {
db, dbmock, _ := New()
dbmock.ExpectExec("THE FIRST EXEC").WillReturnError(fmt.Errorf("big bad bug"))
dbmock.ExpectExec("THE SECOND EXEC").WillReturnResult(NewResult(0, 0))

_, _ = db.Exec("THE FIRST EXEC")
_, _ = db.Exec("THE SECOND EXEC")

err := dbmock.ExpectationsWereMet()
if err != nil {
t.Fatalf("all expectations should be met: %s", err)
}
}

func TestRunQueryWithExpectedErrorMeetsExpectations(t *testing.T) {
db, dbmock, _ := New()
dbmock.ExpectQuery("THE FIRST QUERY").WillReturnError(fmt.Errorf("big bad bug"))
dbmock.ExpectQuery("THE SECOND QUERY").WillReturnRows(NewRows([]string{"col"}).AddRow(1))

_, _ = db.Query("THE FIRST QUERY")
_, _ = db.Query("THE SECOND QUERY")

err := dbmock.ExpectationsWereMet()
if err != nil {
t.Fatalf("all expectations should be met: %s", err)
}
}

0 comments on commit 9958e5c

Please sign in to comment.