Skip to content

Commit

Permalink
feat: More tests to verify the scanning behavior
Browse files Browse the repository at this point in the history
  • Loading branch information
Knoblauchpilze committed Mar 27, 2024
1 parent 8bc884a commit b61947d
Showing 1 changed file with 97 additions and 0 deletions.
97 changes: 97 additions & 0 deletions pkg/repositories/user_repository_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,14 @@ type mockRows struct {

singleValueCalled int
allCalled int
scanner *mockScannable
}

type mockScannable struct {
err error

scannCalled int
props []interface{}
}

var errDefault = fmt.Errorf("some error")
Expand Down Expand Up @@ -161,6 +169,47 @@ func TestUserRepository_Get_WhenResultSucceeds_Success(t *testing.T) {
assert.Nil(err)
}

func TestUserRepository_Get_PropagatesScanErrors(t *testing.T) {
assert := assert.New(t)

mc := &mockConnection{
rows: mockRows{
scanner: &mockScannable{
err: errDefault,
},
},
}
repo := NewUserRepository(mc)

_, err := repo.Get(context.Background(), defaultUuid)

assert.Equal(errDefault, err)
}

func TestUserRepository_Get_ScansUserProperties(t *testing.T) {
assert := assert.New(t)

mc := &mockConnection{
rows: mockRows{
scanner: &mockScannable{},
},
}
repo := NewUserRepository(mc)

_, err := repo.Get(context.Background(), defaultUuid)

assert.Nil(err)

props := mc.rows.scanner.props
assert.Equal(5, len(props))
assert.IsType(&uuid.UUID{}, props[0])
var str string
assert.IsType(&str, props[1])
assert.IsType(&str, props[2])
assert.IsType(&time.Time{}, props[3])
assert.IsType(&time.Time{}, props[4])
}

func TestUserRepository_List_UsesConnectionToQuery(t *testing.T) {
assert := assert.New(t)

Expand Down Expand Up @@ -225,6 +274,42 @@ func TestUserRepository_List_WhenResultReturnsError_Fails(t *testing.T) {
assert.Equal(errDefault, err)
}

func TestUserRepository_List_PropagatesScanErrors(t *testing.T) {
assert := assert.New(t)

mc := &mockConnection{
rows: mockRows{
scanner: &mockScannable{
err: errDefault,
},
},
}
repo := NewUserRepository(mc)

_, err := repo.List(context.Background())

assert.Equal(errDefault, err)
}

func TestUserRepository_List_ScansIds(t *testing.T) {
assert := assert.New(t)

mc := &mockConnection{
rows: mockRows{
scanner: &mockScannable{},
},
}
repo := NewUserRepository(mc)

_, err := repo.List(context.Background())

assert.Nil(err)

props := mc.rows.scanner.props
assert.Equal(1, len(props))
assert.IsType(&uuid.UUID{}, props[0])
}

func TestUserRepository_Update_UsesConnectionToQuery(t *testing.T) {
assert := assert.New(t)

Expand Down Expand Up @@ -392,10 +477,22 @@ func (m *mockRows) Close() {}

func (m *mockRows) GetSingleValue(parser db.RowParser) error {
m.singleValueCalled++
if m.scanner != nil {
return parser(m.scanner)
}
return m.singleValueErr
}

func (m *mockRows) GetAll(parser db.RowParser) error {
m.allCalled++
if m.scanner != nil {
return parser(m.scanner)
}
return m.allErr
}

func (m *mockScannable) Scan(dest ...interface{}) error {
m.scannCalled++
m.props = append(m.props, dest...)
return m.err
}

0 comments on commit b61947d

Please sign in to comment.