Skip to content

Commit d6df0cf

Browse files
authored
feat(provider): update provider with the latest value (#238)
* Update provider record with the latest changes always without merging with the existing record * Fix test case BREAKING CHANGE: Current provider api works in a patch way although with issues. This changes makes sure provider takes in the latest value only without any merge with existing value.
1 parent f05bb58 commit d6df0cf

File tree

2 files changed

+5
-58
lines changed

2 files changed

+5
-58
lines changed

core/provider/service.go

-17
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@ import (
1212
"time"
1313

1414
"github.com/go-playground/validator/v10"
15-
"github.com/imdario/mergo"
1615
"github.com/odpf/guardian/domain"
1716
"github.com/odpf/guardian/plugins/providers"
1817
"github.com/odpf/guardian/utils"
@@ -164,22 +163,6 @@ func (s *Service) GetOne(ctx context.Context, pType, urn string) (*domain.Provid
164163

165164
// Update updates the non-zero value(s) only
166165
func (s *Service) Update(ctx context.Context, p *domain.Provider) error {
167-
var currentProvider *domain.Provider
168-
var err error
169-
170-
if len(p.ID) > 0 {
171-
currentProvider, err = s.GetByID(ctx, p.ID)
172-
} else {
173-
currentProvider, err = s.GetOne(ctx, p.Type, p.URN)
174-
}
175-
if err != nil {
176-
return err
177-
}
178-
179-
if err := mergo.Merge(p, currentProvider); err != nil {
180-
return err
181-
}
182-
183166
c := s.getClient(p.Type)
184167
if c == nil {
185168
return ErrInvalidProviderType

core/provider/service_test.go

+5-41
Original file line numberDiff line numberDiff line change
@@ -204,60 +204,25 @@ func (s *ServiceTestSuite) TestUpdateValidation() {
204204
}
205205

206206
func (s *ServiceTestSuite) TestUpdate() {
207-
s.Run("should return error if got error getting existing record", func() {
208-
testCases := []struct {
209-
expectedExistingProvider *domain.Provider
210-
expectedRepositoryError error
211-
expectedError error
212-
}{
213-
{
214-
expectedExistingProvider: nil,
215-
expectedRepositoryError: provider.ErrRecordNotFound,
216-
expectedError: provider.ErrRecordNotFound,
217-
},
218-
{
219-
expectedExistingProvider: nil,
220-
expectedRepositoryError: errors.New("repository error"),
221-
expectedError: errors.New("repository error"),
222-
},
223-
}
224-
225-
for _, tc := range testCases {
226-
expectedProvider := &domain.Provider{
227-
ID: "1",
228-
}
229-
expectedError := tc.expectedError
230-
s.mockProviderRepository.On("GetByID", expectedProvider.ID).Return(tc.expectedExistingProvider, tc.expectedRepositoryError).Once()
231-
232-
actualError := s.service.Update(context.Background(), expectedProvider)
233-
234-
s.EqualError(actualError, expectedError.Error())
235-
}
236-
})
237-
238-
s.Run("should update only non-zero values", func() {
207+
s.Run("should update record on success", func() {
239208
testCases := []struct {
240209
updatePayload *domain.Provider
241210
existingProvider *domain.Provider
242211
expectedNewProvider *domain.Provider
243212
}{
244213
{
245214
updatePayload: &domain.Provider{
246-
ID: "1",
247-
Config: &domain.ProviderConfig{
248-
Labels: map[string]string{
249-
"foo": "bar",
250-
},
251-
},
252-
},
253-
existingProvider: &domain.Provider{
254215
ID: "1",
255216
Type: mockProviderType,
256217
Config: &domain.ProviderConfig{
257218
Appeal: &domain.AppealConfig{
258219
AllowPermanentAccess: true,
259220
AllowActiveAccessExtensionIn: "1h",
260221
},
222+
AllowedAccountTypes: []string{"user"},
223+
Labels: map[string]string{
224+
"foo": "bar",
225+
},
261226
Type: mockProviderType,
262227
URN: "urn",
263228
},
@@ -282,7 +247,6 @@ func (s *ServiceTestSuite) TestUpdate() {
282247
}
283248

284249
for _, tc := range testCases {
285-
s.mockProviderRepository.On("GetByID", tc.updatePayload.ID).Return(tc.existingProvider, nil).Once()
286250
s.mockProvider.On("GetAccountTypes").Return([]string{"user"}).Once()
287251
s.mockProvider.On("CreateConfig", mock.Anything).Return(nil).Once()
288252
s.mockProviderRepository.On("Update", tc.expectedNewProvider).Return(nil)

0 commit comments

Comments
 (0)