...

Source file src/github.com/doug-martin/goqu/v9/exec/scanner_internal_test.go

Documentation: github.com/doug-martin/goqu/v9/exec

     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