Skip to content

Commit be6ce1f

Browse files
refactor: templates pkg as per store abstraction (#96)
* refactor: change template repository interface to accept domain structs * test: fix breaking tests after templates store abstraction refactoring * refactor: remove redundant return from upsert methods
1 parent ac07304 commit be6ce1f

File tree

10 files changed

+164
-270
lines changed

10 files changed

+164
-270
lines changed

api/handlers/v1beta1/grpc_template.go

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import (
66
"github.com/odpf/siren/domain"
77
"github.com/odpf/siren/utils"
88
"google.golang.org/grpc/codes"
9+
"google.golang.org/grpc/status"
910
"google.golang.org/protobuf/types/known/timestamppb"
1011
)
1112

@@ -45,7 +46,9 @@ func (s *GRPCServer) GetTemplateByName(_ context.Context, req *sirenv1beta1.GetT
4546
if err != nil {
4647
return nil, utils.GRPCLogError(s.logger, codes.Internal, err)
4748
}
48-
49+
if template == nil {
50+
return nil, status.Errorf(codes.NotFound, "template not found")
51+
}
4952
variables := make([]*sirenv1beta1.TemplateVariables, 0)
5053
for _, variable := range template.Variables {
5154
variables = append(variables, &sirenv1beta1.TemplateVariables{
@@ -79,14 +82,14 @@ func (s *GRPCServer) UpsertTemplate(_ context.Context, req *sirenv1beta1.UpsertT
7982
Description: variable.Description,
8083
})
8184
}
82-
payload := &domain.Template{
85+
template := &domain.Template{
8386
ID: uint(req.GetId()),
8487
Name: req.GetName(),
8588
Body: req.GetBody(),
8689
Tags: req.GetTags(),
8790
Variables: variables,
8891
}
89-
template, err := s.container.TemplatesService.Upsert(payload)
92+
err := s.container.TemplatesService.Upsert(template)
9093
if err != nil {
9194
return nil, utils.GRPCLogError(s.logger, codes.Internal, err)
9295
}

api/handlers/v1beta1/grpc_template_test.go

Lines changed: 21 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -151,6 +151,25 @@ func TestGRPCServer_GetTemplateByName(t *testing.T) {
151151
mockedTemplatesService.AssertCalled(t, "GetByName", dummyReq.Name)
152152
})
153153

154+
t.Run("should return error code 5 if template does not exist", func(t *testing.T) {
155+
mockedTemplatesService := &mocks.TemplatesService{}
156+
dummyGRPCServer := GRPCServer{
157+
container: &service.Container{
158+
TemplatesService: mockedTemplatesService,
159+
},
160+
logger: log.NewNoop(),
161+
}
162+
dummyReq := &sirenv1beta1.GetTemplateByNameRequest{
163+
Name: "foo",
164+
}
165+
mockedTemplatesService.
166+
On("GetByName", "foo").
167+
Return(nil, nil).Once()
168+
res, err := dummyGRPCServer.GetTemplateByName(context.Background(), dummyReq)
169+
assert.Nil(t, res)
170+
assert.EqualError(t, err, "rpc error: code = NotFound desc = template not found")
171+
})
172+
154173
t.Run("should return error code 13 if getting template by name failed", func(t *testing.T) {
155174
mockedTemplatesService := &mocks.TemplatesService{}
156175
dummyGRPCServer := GRPCServer{
@@ -210,9 +229,7 @@ func TestGRPCServer_UpsertTemplate(t *testing.T) {
210229
logger: log.NewNoop(),
211230
}
212231

213-
mockedTemplatesService.
214-
On("Upsert", template).
215-
Return(template, nil).Once()
232+
mockedTemplatesService.On("Upsert", template).Return(nil).Once()
216233
res, err := dummyGRPCServer.UpsertTemplate(context.Background(), dummyReq)
217234
assert.Nil(t, err)
218235
assert.Equal(t, uint64(1), res.GetTemplate().GetId())
@@ -230,9 +247,7 @@ func TestGRPCServer_UpsertTemplate(t *testing.T) {
230247
},
231248
logger: log.NewNoop(),
232249
}
233-
mockedTemplatesService.
234-
On("Upsert", template).
235-
Return(nil, errors.New("random error")).Once()
250+
mockedTemplatesService.On("Upsert", template).Return(errors.New("random error")).Once()
236251
res, err := dummyGRPCServer.UpsertTemplate(context.Background(), dummyReq)
237252
assert.Nil(t, res)
238253
assert.EqualError(t, err, "rpc error: code = Internal desc = random error")

domain/templates.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ type Template struct {
2323

2424
// TemplatesService interface
2525
type TemplatesService interface {
26-
Upsert(*Template) (*Template, error)
26+
Upsert(*Template) error
2727
Index(string) ([]Template, error)
2828
GetByName(string) (*Template, error)
2929
Delete(string) error

mocks/TemplatesService.go

Lines changed: 6 additions & 15 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

pkg/templates/repository_mock.go

Lines changed: 0 additions & 129 deletions
This file was deleted.

pkg/templates/service.go

Lines changed: 4 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ package templates
33
import (
44
"github.com/odpf/siren/domain"
55
"github.com/odpf/siren/store"
6-
"github.com/odpf/siren/store/model"
76
)
87

98
// Service handles business logic
@@ -20,38 +19,16 @@ func (service Service) Migrate() error {
2019
return service.repository.Migrate()
2120
}
2221

23-
func (service Service) Upsert(template *domain.Template) (*domain.Template, error) {
24-
t := &model.Template{}
25-
t, err := t.FromDomain(template)
26-
if err != nil {
27-
return nil, err
28-
}
29-
upsertedTemplate, err := service.repository.Upsert(t)
30-
if err != nil {
31-
return nil, err
32-
}
33-
return upsertedTemplate.ToDomain()
22+
func (service Service) Upsert(template *domain.Template) error {
23+
return service.repository.Upsert(template)
3424
}
3525

3626
func (service Service) Index(tag string) ([]domain.Template, error) {
37-
templates, err := service.repository.Index(tag)
38-
if err != nil {
39-
return nil, err
40-
}
41-
domainTemplates := make([]domain.Template, 0, len(templates))
42-
for i := 0; i < len(templates); i++ {
43-
t, _ := templates[i].ToDomain()
44-
domainTemplates = append(domainTemplates, *t)
45-
}
46-
return domainTemplates, nil
27+
return service.repository.Index(tag)
4728
}
4829

4930
func (service Service) GetByName(name string) (*domain.Template, error) {
50-
template, err := service.repository.GetByName(name)
51-
if err != nil || template == nil {
52-
return nil, err
53-
}
54-
return template.ToDomain()
31+
return service.repository.GetByName(name)
5532
}
5633

5734
func (service Service) Delete(name string) error {

store/model/template.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ type Template struct {
1717
Variables string `gorm:"type:jsonb" sql:"type:jsonb" `
1818
}
1919

20-
func (template *Template) FromDomain(t *domain.Template) (*Template, error) {
20+
func (template *Template) FromDomain(t *domain.Template) error {
2121
template.ID = t.ID
2222
template.CreatedAt = t.CreatedAt
2323
template.UpdatedAt = t.UpdatedAt
@@ -26,10 +26,10 @@ func (template *Template) FromDomain(t *domain.Template) (*Template, error) {
2626
template.Body = t.Body
2727
jsonString, err := json.Marshal(t.Variables)
2828
if err != nil {
29-
return nil, err
29+
return err
3030
}
3131
template.Variables = string(jsonString)
32-
return template, nil
32+
return nil
3333
}
3434

3535
func (template *Template) ToDomain() (*domain.Template, error) {

0 commit comments

Comments
 (0)