fork github.com/doug-martin
This commit is contained in:
@@ -0,0 +1,69 @@
|
||||
package exec
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"github.com/DATA-DOG/go-sqlmock"
|
||||
"github.com/stretchr/testify/suite"
|
||||
)
|
||||
|
||||
type scannerSuite struct {
|
||||
suite.Suite
|
||||
}
|
||||
|
||||
func TestScanner(t *testing.T) {
|
||||
suite.Run(t, &scannerSuite{})
|
||||
}
|
||||
|
||||
func (s *scannerSuite) TestScanStructs() {
|
||||
type StructWithTags struct {
|
||||
Address string `db:"address"`
|
||||
Name string `db:"name"`
|
||||
}
|
||||
db, mock, err := sqlmock.New()
|
||||
s.Require().NoError(err)
|
||||
|
||||
mock.ExpectQuery(`SELECT \* FROM "items"`).
|
||||
WithArgs().
|
||||
WillReturnRows(sqlmock.NewRows([]string{"address", "name"}).
|
||||
AddRow(testAddr1, testName1).
|
||||
AddRow(testAddr2, testName2),
|
||||
)
|
||||
rows, err := db.Query(`SELECT * FROM "items"`)
|
||||
s.Require().NoError(err)
|
||||
|
||||
sc := NewScanner(rows)
|
||||
|
||||
result := make([]StructWithTags, 0)
|
||||
err = sc.ScanStructs(result)
|
||||
s.Require().EqualError(err, errUnsupportedScanStructsType.Error())
|
||||
|
||||
err = sc.ScanStructs(&result)
|
||||
s.Require().NoError(err)
|
||||
s.Require().ElementsMatch(
|
||||
[]StructWithTags{{Address: testAddr1, Name: testName1}, {Address: testAddr2, Name: testName2}},
|
||||
result,
|
||||
)
|
||||
}
|
||||
|
||||
func (s *scannerSuite) TestScanVals() {
|
||||
db, mock, err := sqlmock.New()
|
||||
s.Require().NoError(err)
|
||||
|
||||
mock.ExpectQuery(`SELECT "id" FROM "items"`).
|
||||
WithArgs().
|
||||
WillReturnRows(sqlmock.NewRows([]string{"id"}).AddRow(1).AddRow(2))
|
||||
|
||||
rows, err := db.Query(`SELECT "id" FROM "items"`)
|
||||
s.Require().NoError(err)
|
||||
|
||||
sc := NewScanner(rows)
|
||||
|
||||
result := make([]int, 0)
|
||||
err = sc.ScanVals(result)
|
||||
s.Require().EqualError(err, errUnsupportedScanValsType.Error())
|
||||
|
||||
err = sc.ScanVals(&result)
|
||||
s.Require().NoError(err)
|
||||
s.Require().ElementsMatch([]int{1, 2}, result)
|
||||
}
|
||||
Reference in New Issue
Block a user