Skip to content

Commit

Permalink
feat: Tests for delete operation
Browse files Browse the repository at this point in the history
  • Loading branch information
Knoblauchpilze committed Mar 25, 2024
1 parent 2b267c5 commit bb51b06
Show file tree
Hide file tree
Showing 2 changed files with 51 additions and 9 deletions.
6 changes: 4 additions & 2 deletions pkg/repositories/user_repository.go
Original file line number Diff line number Diff line change
Expand Up @@ -61,9 +61,11 @@ const deleteUserSqlTemplate = "DELETE FROM api_user WHERE id = $1"

func (r *userRepositoryImpl) Delete(ctx context.Context, id uuid.UUID) error {
affected, err := r.conn.Exec(ctx, deleteUserSqlTemplate, id)
if err != nil {
return err
}
if affected != 1 {
return errors.NewCode(db.NoMatchingSqlRows)
}

return err
return nil
}
54 changes: 47 additions & 7 deletions pkg/repositories/user_repository_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,8 @@ type mockConnection struct {
queryCalled int
execCalled int

execErr error
affectedRows int
execErr error

sqlQuery string
args []interface{}
Expand All @@ -33,6 +34,7 @@ type mockRows struct {
allCalled int
}

var errDefault = fmt.Errorf("some error")
var defaultUuid = uuid.MustParse("08ce96a3-3430-48a8-a3b2-b1c987a207ca")
var defaultUser = persistence.User{
Id: defaultUuid,
Expand Down Expand Up @@ -106,8 +108,6 @@ func TestUserRepository_Get_GeneratesValidSql(t *testing.T) {
assert.Equal(defaultUuid, mc.args[0])
}

var errDefault = fmt.Errorf("some error")

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

Expand Down Expand Up @@ -170,14 +170,54 @@ func TestUserRepository_Update_NotImplemented(t *testing.T) {
assert.True(errors.IsErrorWithCode(err, errors.NotImplementedCode))
}

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

mc := &mockConnection{}
repo := NewUserRepository(mc)

err := repo.Delete(context.Background(), uuid.UUID{})
assert.True(errors.IsErrorWithCode(err, errors.NotImplementedCode))
repo.Delete(context.Background(), uuid.UUID{})

assert.Equal(1, mc.execCalled)
}

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

mc := &mockConnection{}
repo := NewUserRepository(mc)

repo.Delete(context.Background(), defaultUuid)

assert.Equal("DELETE FROM api_user WHERE id = $1", mc.sqlQuery)
assert.Equal(1, len(mc.args))
assert.Equal(defaultUuid, mc.args[0])
}

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

mc := &mockConnection{
execErr: errDefault,
}
repo := NewUserRepository(mc)

err := repo.Delete(context.Background(), defaultUuid)

assert.Equal(errDefault, err)
}

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

mc := &mockConnection{
affectedRows: 2,
}
repo := NewUserRepository(mc)

err := repo.Delete(context.Background(), defaultUuid)

assert.True(errors.IsErrorWithCode(err, db.NoMatchingSqlRows))
}

func (m *mockConnection) Connect() error { return nil }
Expand All @@ -195,7 +235,7 @@ func (m *mockConnection) Exec(ctx context.Context, sql string, arguments ...inte
m.execCalled++
m.sqlQuery = sql
m.args = append(m.args, arguments...)
return 0, m.execErr
return m.affectedRows, m.execErr
}

func (m *mockRows) Err() error { return m.err }
Expand Down

0 comments on commit bb51b06

Please sign in to comment.