...
1 package exec
2
3 import (
4 "testing"
5
6 "github.com/DATA-DOG/go-sqlmock"
7 "github.com/stretchr/testify/suite"
8 )
9
10 type scannerSuite struct {
11 suite.Suite
12 }
13
14 func TestScanner(t *testing.T) {
15 suite.Run(t, &scannerSuite{})
16 }
17
18 func (s *scannerSuite) TestScanStructs() {
19 type StructWithTags struct {
20 Address string `db:"address"`
21 Name string `db:"name"`
22 }
23 db, mock, err := sqlmock.New()
24 s.Require().NoError(err)
25
26 mock.ExpectQuery(`SELECT \* FROM "items"`).
27 WithArgs().
28 WillReturnRows(sqlmock.NewRows([]string{"address", "name"}).
29 AddRow(testAddr1, testName1).
30 AddRow(testAddr2, testName2),
31 )
32 rows, err := db.Query(`SELECT * FROM "items"`)
33 s.Require().NoError(err)
34
35 sc := NewScanner(rows)
36
37 result := make([]StructWithTags, 0)
38 err = sc.ScanStructs(result)
39 s.Require().EqualError(err, errUnsupportedScanStructsType.Error())
40
41 err = sc.ScanStructs(&result)
42 s.Require().NoError(err)
43 s.Require().ElementsMatch(
44 []StructWithTags{{Address: testAddr1, Name: testName1}, {Address: testAddr2, Name: testName2}},
45 result,
46 )
47 }
48
49 func (s *scannerSuite) TestScanVals() {
50 db, mock, err := sqlmock.New()
51 s.Require().NoError(err)
52
53 mock.ExpectQuery(`SELECT "id" FROM "items"`).
54 WithArgs().
55 WillReturnRows(sqlmock.NewRows([]string{"id"}).AddRow(1).AddRow(2))
56
57 rows, err := db.Query(`SELECT "id" FROM "items"`)
58 s.Require().NoError(err)
59
60 sc := NewScanner(rows)
61
62 result := make([]int, 0)
63 err = sc.ScanVals(result)
64 s.Require().EqualError(err, errUnsupportedScanValsType.Error())
65
66 err = sc.ScanVals(&result)
67 s.Require().NoError(err)
68 s.Require().ElementsMatch([]int{1, 2}, result)
69 }
70
View as plain text