Skip to content

Commit d03c8fa

Browse files
committed
Add immutable rules to projects
Signed-off-by: Carlos Vega <carlos.vega@dynatrace.com>
1 parent 898d545 commit d03c8fa

File tree

3 files changed

+107
-2
lines changed

3 files changed

+107
-2
lines changed

apiv2/pkg/clients/immutable/immutable.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,8 @@ func (c *RESTClient) UpdateImmuRule(ctx context.Context, projectNameOrID string,
6464

6565
params.WithTimeout(c.Options.Timeout)
6666

67+
params.ImmutableRule.ID = immutableRuleID
68+
6769
_, err := c.V2Client.Immutable.UpdateImmuRule(params, c.AuthInfo)
6870
if err != nil {
6971
return handleSwaggerImmutableRuleErrors(err)
@@ -126,4 +128,4 @@ func (c *RESTClient) ListImmuRules(ctx context.Context, projectNameOrID string)
126128
}
127129

128130
return immutableRules, nil
129-
}
131+
}

apiv2/pkg/clients/immutable/immutable_integration_test.go

Lines changed: 68 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ package immutable
55
import (
66
"context"
77
"testing"
8-
98
"github.com/mittwald/goharbor-client/v5/apiv2/model"
109
"github.com/mittwald/goharbor-client/v5/apiv2/pkg/clients/project"
1110
clienttesting "github.com/mittwald/goharbor-client/v5/apiv2/pkg/testing"
@@ -46,4 +45,72 @@ func TestAPIImmutableListImmutableRules(t *testing.T) {
4645
listedImmutableRuleTag := listedImmutableRules[0].TagSelectors
4746

4847
require.Equal(t, listedImmutableRuleTag[0], immutableRule.TagSelectors[0])
48+
49+
immuRuleID := listedImmutableRules[0].ID
50+
51+
c.DeleteImmuRule(ctx, projectName, immuRuleID)
52+
53+
checkDeletedImmuRules, err := c.ListImmuRules(ctx, projectName)
54+
55+
require.Empty(t, checkDeletedImmuRules)
4956
}
57+
58+
func TestAPIImmutableUpdateImmutableRules(t *testing.T) {
59+
ctx := context.Background()
60+
61+
c := NewClient(clienttesting.V2SwaggerClient, clienttesting.DefaultOpts, clienttesting.AuthInfo)
62+
pc := project.NewClient(clienttesting.V2SwaggerClient, clienttesting.DefaultOpts, clienttesting.AuthInfo)
63+
64+
err := pc.NewProject(ctx, &model.ProjectReq{
65+
ProjectName: projectName,
66+
})
67+
require.NoError(t, err)
68+
69+
defer pc.DeleteProject(ctx, projectName)
70+
71+
createImmutableRule := model.ImmutableRule{
72+
ScopeSelectors: map[string][]model.ImmutableSelector{},
73+
TagSelectors: []*model.ImmutableSelector{{
74+
Decoration: "matches",
75+
Kind: "doublestar",
76+
Pattern: "1.0.0",
77+
}},
78+
}
79+
80+
updateImmutableRule := model.ImmutableRule{
81+
ScopeSelectors: map[string][]model.ImmutableSelector{},
82+
TagSelectors: []*model.ImmutableSelector{{
83+
Decoration: "matches",
84+
Kind: "doublestar",
85+
Pattern: "2.0.0",
86+
}},
87+
}
88+
89+
err = c.CreateImmuRule(ctx, projectName, &createImmutableRule)
90+
require.NoError(t, err)
91+
92+
listedImmutableRules, err := c.ListImmuRules(ctx, projectName)
93+
94+
require.NoError(t, err)
95+
96+
immuRuleID := listedImmutableRules[0].ID
97+
98+
err = c.UpdateImmuRule(ctx, projectName, &updateImmutableRule, immuRuleID)
99+
100+
require.NoError(t, err)
101+
102+
listedImmutableRules, err = c.ListImmuRules(ctx, projectName)
103+
104+
require.NoError(t, err)
105+
106+
listedImmutableRuleTag := listedImmutableRules[0].TagSelectors
107+
108+
require.Equal(t, listedImmutableRuleTag[0], updateImmutableRule.TagSelectors[0])
109+
110+
111+
c.DeleteImmuRule(ctx, projectName, immuRuleID)
112+
113+
checkDeletedImmuRules, err := c.ListImmuRules(ctx, projectName)
114+
115+
require.Empty(t, checkDeletedImmuRules)
116+
}

apiv2/pkg/clients/immutable/immutable_test.go

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,7 @@ func TestRESTClient_UpdateImmuRule(t *testing.T) {
111111
ImmutableRuleID: int64(immutableRuleID),
112112
ProjectNameOrID: strconv.Itoa(projectID),
113113
ImmutableRule: &model.ImmutableRule{
114+
ID: int64(immutableRuleID),
114115
TagSelectors: []*model.ImmutableSelector{{
115116
Decoration: "matches",
116117
Kind: "doublestar",
@@ -174,6 +175,41 @@ func TestRESTClient_UpdateImmuRuleNotFound(t *testing.T) {
174175
mockClient.Immutable.AssertExpectations(t)
175176
}
176177

178+
func TestRESTClient_UpdateImmuRuleBadRequest(t *testing.T) {
179+
apiClient, mockClient := APIandMockClientsForTests()
180+
181+
params := &immutable.UpdateImmuRuleParams{
182+
ImmutableRuleID: int64(immutableRuleID),
183+
ProjectNameOrID: strconv.Itoa(projectID),
184+
ImmutableRule: &model.ImmutableRule{
185+
TagSelectors: []*model.ImmutableSelector{{
186+
Decoration: "matches",
187+
Kind: "doublestar",
188+
Pattern: "1.0.0",
189+
}},
190+
ScopeSelectors: map[string][]model.ImmutableSelector{
191+
"repository": {{
192+
Decoration: "repoMatches",
193+
Kind: "doublestar",
194+
Pattern: "**",
195+
}},
196+
},
197+
},
198+
Context: ctx,
199+
}
200+
201+
params.WithTimeout(apiClient.Options.Timeout)
202+
203+
mockClient.Immutable.On("UpdateImmuRule", params, mock.AnythingOfType("runtime.ClientAuthInfoWriterFunc")).
204+
Return(nil, &errors.ErrBadRequest{})
205+
206+
err := apiClient.UpdateImmuRule(ctx, strconv.Itoa(projectID), params.ImmutableRule, int64(immutableRuleID))
207+
208+
require.Error(t, err)
209+
210+
mockClient.Immutable.AssertExpectations(t)
211+
}
212+
177213
func TestRESTClient_UpdateImmuRuleUnauthorized(t *testing.T) {
178214
apiClient, mockClient := APIandMockClientsForTests()
179215

0 commit comments

Comments
 (0)