Skip to content

Commit 193787a

Browse files
authored
feat(receiver): make type immutable (#152)
* feat(receiver): make type immutable * chore: update proto
1 parent a4fdf9f commit 193787a

File tree

9 files changed

+613
-584
lines changed

9 files changed

+613
-584
lines changed

Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ NAME="github.com/odpf/siren"
22
LAST_COMMIT := $(shell git rev-parse --short HEAD)
33
LAST_TAG := "$(shell git rev-list --tags --max-count=1)"
44
APP_VERSION := "$(shell git describe --tags ${LAST_TAG})-next"
5-
PROTON_COMMIT := "45cc543ff18d6efd6d8a39947018c828599b476b"
5+
PROTON_COMMIT := "f21015688d165bec2d859c6fca284754dd81755f"
66

77
.PHONY: all build test clean dist vet proto install
88

core/receiver/service.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,14 @@ func (s *Service) Get(ctx context.Context, id uint64) (*Receiver, error) {
102102
}
103103

104104
func (s *Service) Update(ctx context.Context, rcv *Receiver) error {
105+
rcv, err := s.repository.Get(ctx, rcv.ID)
106+
if err != nil {
107+
if errors.As(err, new(NotFoundError)) {
108+
return errors.ErrNotFound.WithMsgf(err.Error())
109+
}
110+
return err
111+
}
112+
105113
receiverPlugin, err := s.getReceiverPlugin(rcv.Type)
106114
if err != nil {
107115
return err

core/receiver/service_test.go

Lines changed: 44 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -396,17 +396,38 @@ func TestService_UpdateReceiver(t *testing.T) {
396396
var (
397397
ctx = context.TODO()
398398
testCases = []testCase{
399+
{
400+
Description: "should return error if get receiver return error",
401+
Setup: func(rr *mocks.ReceiverRepository, ss *mocks.ConfigResolver) {
402+
rr.EXPECT().Get(mock.AnythingOfType("*context.emptyCtx"), mock.AnythingOfType("uint64")).Return(nil, errors.New("some error"))
403+
},
404+
Rcv: &receiver.Receiver{
405+
ID: 123,
406+
},
407+
Err: errors.New("some error"),
408+
},
399409
{
400410
Description: "should return error if type unknown",
401-
Setup: func(rr *mocks.ReceiverRepository, ss *mocks.ConfigResolver) {},
411+
Setup: func(rr *mocks.ReceiverRepository, ss *mocks.ConfigResolver) {
412+
rr.EXPECT().Get(mock.AnythingOfType("*context.emptyCtx"), mock.AnythingOfType("uint64")).Return(&receiver.Receiver{
413+
Type: "random",
414+
}, nil)
415+
},
402416
Rcv: &receiver.Receiver{
403-
Type: "random",
417+
ID: 123,
404418
},
405419
Err: errors.New("unsupported receiver type: \"random\""),
406420
},
407421
{
408422
Description: "should return error if PreHookDBTransformConfigs return error",
409423
Setup: func(rr *mocks.ReceiverRepository, ss *mocks.ConfigResolver) {
424+
rr.EXPECT().Get(mock.AnythingOfType("*context.emptyCtx"), mock.AnythingOfType("uint64")).Return(&receiver.Receiver{
425+
ID: 123,
426+
Type: receiver.TypeSlack,
427+
Configurations: map[string]interface{}{
428+
"token": "key",
429+
},
430+
}, nil)
410431
ss.EXPECT().PreHookDBTransformConfigs(mock.AnythingOfType("*context.emptyCtx"), map[string]interface{}{"token": "key"}).Return(nil, errors.New("some error"))
411432
},
412433
Rcv: &receiver.Receiver{
@@ -421,6 +442,13 @@ func TestService_UpdateReceiver(t *testing.T) {
421442
{
422443
Description: "should return error if Update repository return error",
423444
Setup: func(rr *mocks.ReceiverRepository, ss *mocks.ConfigResolver) {
445+
rr.EXPECT().Get(mock.AnythingOfType("*context.emptyCtx"), mock.AnythingOfType("uint64")).Return(&receiver.Receiver{
446+
ID: 123,
447+
Type: receiver.TypeSlack,
448+
Configurations: map[string]interface{}{
449+
"token": "key",
450+
},
451+
}, nil)
424452
ss.EXPECT().PreHookDBTransformConfigs(mock.AnythingOfType("*context.emptyCtx"), map[string]interface{}{"token": "key"}).Return(map[string]interface{}{
425453
"token": "encrypted_key",
426454
}, nil)
@@ -444,6 +472,13 @@ func TestService_UpdateReceiver(t *testing.T) {
444472
{
445473
Description: "should return nil error if no error returned",
446474
Setup: func(rr *mocks.ReceiverRepository, ss *mocks.ConfigResolver) {
475+
rr.EXPECT().Get(mock.AnythingOfType("*context.emptyCtx"), mock.AnythingOfType("uint64")).Return(&receiver.Receiver{
476+
ID: 123,
477+
Type: receiver.TypeSlack,
478+
Configurations: map[string]interface{}{
479+
"token": "key",
480+
},
481+
}, nil)
447482
ss.EXPECT().PreHookDBTransformConfigs(mock.AnythingOfType("*context.emptyCtx"), map[string]interface{}{"token": "key"}).Return(map[string]interface{}{
448483
"token": "encrypted_key",
449484
}, nil)
@@ -466,6 +501,13 @@ func TestService_UpdateReceiver(t *testing.T) {
466501
}, {
467502
Description: "should return error not found if repository return not found error",
468503
Setup: func(rr *mocks.ReceiverRepository, ss *mocks.ConfigResolver) {
504+
rr.EXPECT().Get(mock.AnythingOfType("*context.emptyCtx"), mock.AnythingOfType("uint64")).Return(&receiver.Receiver{
505+
ID: 123,
506+
Type: receiver.TypeSlack,
507+
Configurations: map[string]interface{}{
508+
"token": "key",
509+
},
510+
}, nil)
469511
ss.EXPECT().PreHookDBTransformConfigs(mock.AnythingOfType("*context.emptyCtx"), map[string]interface{}{"token": "key"}).Return(map[string]interface{}{
470512
"token": "encrypted_key",
471513
}, nil)

internal/api/v1beta1/receiver.go

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -97,14 +97,9 @@ func (s *GRPCServer) GetReceiver(ctx context.Context, req *sirenv1beta1.GetRecei
9797
}
9898

9999
func (s *GRPCServer) UpdateReceiver(ctx context.Context, req *sirenv1beta1.UpdateReceiverRequest) (*sirenv1beta1.UpdateReceiverResponse, error) {
100-
if !receiver.IsTypeSupported(req.GetType()) {
101-
return nil, s.generateRPCErr(errors.ErrInvalid.WithMsgf("unsupported type %s", req.GetType()))
102-
}
103-
104100
rcv := &receiver.Receiver{
105101
ID: req.GetId(),
106102
Name: req.GetName(),
107-
Type: req.GetType(),
108103
Labels: req.GetLabels(),
109104
Configurations: req.GetConfigurations().AsMap(),
110105
}

internal/api/v1beta1/receiver_test.go

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -251,14 +251,12 @@ func TestGRPCServer_UpdateReceiver(t *testing.T) {
251251
dummyReq := &sirenv1beta1.UpdateReceiverRequest{
252252
Id: uint64(22),
253253
Name: "foo",
254-
Type: "slack",
255254
Labels: labels,
256255
Configurations: configurationsData,
257256
}
258257
payload := &receiver.Receiver{
259258
ID: uint64(22),
260259
Name: "foo",
261-
Type: "slack",
262260
Labels: labels,
263261
Configurations: configurations,
264262
}

internal/store/postgres/receiver.go

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ RETURNING *
1818
`
1919

2020
const receiverUpdateQuery = `
21-
UPDATE receivers SET name=$2, type=$3, labels=$4, configurations=$5, updated_at=now()
21+
UPDATE receivers SET name=$2, labels=$3, configurations=$4, updated_at=now()
2222
WHERE id = $1
2323
RETURNING *
2424
`
@@ -132,7 +132,6 @@ func (r ReceiverRepository) Update(ctx context.Context, rcv *receiver.Receiver)
132132
if err := r.client.db.QueryRowxContext(ctx, receiverUpdateQuery,
133133
receiverModel.ID,
134134
receiverModel.Name,
135-
receiverModel.Type,
136135
receiverModel.Labels,
137136
receiverModel.Configurations,
138137
).StructScan(&updatedReceiver); err != nil {

0 commit comments

Comments
 (0)