Skip to content

Commit 51809c0

Browse files
authored
Delete application version command (#21)
* Delete application version command
1 parent 2571da8 commit 51809c0

File tree

13 files changed

+256
-94
lines changed

13 files changed

+256
-94
lines changed

apptrust/commands/application/create_app_cmd.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -121,6 +121,7 @@ func GetCreateAppCommand(appContext app.Context) components.Command {
121121
Name: "create",
122122
Description: "Create a new application",
123123
Category: common.CategoryApplication,
124+
Aliases: []string{"c"},
124125
Arguments: []components.Argument{
125126
{
126127
Name: "application-key",

apptrust/commands/application/delete_app_cmd.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@ func GetDeleteAppCommand(appContext app.Context) components.Command {
6161
Name: "delete",
6262
Description: "Delete an application",
6363
Category: common.CategoryApplication,
64+
Aliases: []string{"d"},
6465
Arguments: []components.Argument{
6566
{
6667
Name: "application-key",

apptrust/commands/application/update_app_cmd.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,7 @@ func GetUpdateAppCommand(appContext app.Context) components.Command {
111111
Name: "update",
112112
Description: "Update an existing application",
113113
Category: common.CategoryApplication,
114+
Aliases: []string{"u"},
114115
Arguments: []components.Argument{
115116
{
116117
Name: "application-key",

apptrust/commands/flags.go

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,12 @@ import (
99

1010
const (
1111
Ping = "ping"
12-
CreateAppVersion = "create-app-version"
13-
PromoteAppVersion = "promote-app-version"
14-
CreateApp = "create-app"
15-
UpdateApp = "update-app"
16-
DeleteApp = "delete-app"
12+
CreateAppVersion = "version-create"
13+
PromoteAppVersion = "version-promote"
14+
DeleteAppVersion = "version-delete"
15+
CreateApp = "app-create"
16+
UpdateApp = "app-update"
17+
DeleteApp = "app-delete"
1718
)
1819

1920
const (
@@ -90,6 +91,12 @@ var commandFlags = map[string][]string{
9091
ApplicationKeyFlag,
9192
StageVarsFlag,
9293
},
94+
DeleteAppVersion: {
95+
url,
96+
user,
97+
accessToken,
98+
serverId,
99+
},
93100

94101
Ping: {
95102
url,

apptrust/commands/version/create_app_version_cmd.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -143,7 +143,7 @@ func GetCreateAppVersionCommand(appContext app.Context) components.Command {
143143
Name: commands.CreateAppVersion,
144144
Description: "Create application version",
145145
Category: common.CategoryVersion,
146-
Aliases: []string{"cav"},
146+
Aliases: []string{"vc"},
147147
Arguments: []components.Argument{
148148
{
149149
Name: "version-name",
Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
package version
2+
3+
import (
4+
"github.com/jfrog/jfrog-cli-application/apptrust/app"
5+
"github.com/jfrog/jfrog-cli-application/apptrust/commands"
6+
"github.com/jfrog/jfrog-cli-application/apptrust/commands/utils"
7+
"github.com/jfrog/jfrog-cli-application/apptrust/common"
8+
"github.com/jfrog/jfrog-cli-application/apptrust/service"
9+
"github.com/jfrog/jfrog-cli-application/apptrust/service/versions"
10+
commonCLiCommands "github.com/jfrog/jfrog-cli-core/v2/common/commands"
11+
pluginsCommon "github.com/jfrog/jfrog-cli-core/v2/plugins/common"
12+
"github.com/jfrog/jfrog-cli-core/v2/plugins/components"
13+
coreConfig "github.com/jfrog/jfrog-cli-core/v2/utils/config"
14+
)
15+
16+
type deleteAppVersionCommand struct {
17+
versionService versions.VersionService
18+
serverDetails *coreConfig.ServerDetails
19+
applicationKey string
20+
version string
21+
}
22+
23+
func (dv *deleteAppVersionCommand) Run() error {
24+
ctx, err := service.NewContext(*dv.serverDetails)
25+
if err != nil {
26+
return err
27+
}
28+
29+
return dv.versionService.DeleteAppVersion(ctx, dv.applicationKey, dv.version)
30+
}
31+
32+
func (dv *deleteAppVersionCommand) ServerDetails() (*coreConfig.ServerDetails, error) {
33+
return dv.serverDetails, nil
34+
}
35+
36+
func (dv *deleteAppVersionCommand) CommandName() string {
37+
return commands.DeleteAppVersion
38+
}
39+
40+
func (dv *deleteAppVersionCommand) prepareAndRunCommand(ctx *components.Context) error {
41+
if len(ctx.Arguments) != 2 {
42+
return pluginsCommon.WrongNumberOfArgumentsHandler(ctx)
43+
}
44+
45+
dv.applicationKey = ctx.Arguments[0]
46+
dv.version = ctx.Arguments[1]
47+
48+
var err error
49+
dv.serverDetails, err = utils.ServerDetailsByFlags(ctx)
50+
if err != nil {
51+
return err
52+
}
53+
54+
return commonCLiCommands.Exec(dv)
55+
}
56+
57+
func GetDeleteAppVersionCommand(appContext app.Context) components.Command {
58+
cmd := &deleteAppVersionCommand{versionService: appContext.GetVersionService()}
59+
return components.Command{
60+
Name: commands.DeleteAppVersion,
61+
Description: "Delete application version",
62+
Category: common.CategoryVersion,
63+
Aliases: []string{"vd"},
64+
Arguments: []components.Argument{
65+
{
66+
Name: "application-key",
67+
Description: "The application key",
68+
Optional: false,
69+
},
70+
{
71+
Name: "version",
72+
Description: "The name of the version to delete",
73+
Optional: false,
74+
},
75+
},
76+
Flags: commands.GetCommandFlags(commands.DeleteAppVersion),
77+
Action: cmd.prepareAndRunCommand,
78+
}
79+
}
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
package version
2+
3+
import (
4+
"errors"
5+
"testing"
6+
7+
mockversions "github.com/jfrog/jfrog-cli-application/apptrust/service/versions/mocks"
8+
"github.com/jfrog/jfrog-cli-core/v2/utils/config"
9+
"github.com/stretchr/testify/assert"
10+
"go.uber.org/mock/gomock"
11+
)
12+
13+
func TestDeleteAppVersionCommand_Run(t *testing.T) {
14+
ctrl := gomock.NewController(t)
15+
defer ctrl.Finish()
16+
17+
serverDetails := &config.ServerDetails{Url: "https://example.com"}
18+
applicationKey := "app-key"
19+
version := "1.0.0"
20+
21+
mockVersionService := mockversions.NewMockVersionService(ctrl)
22+
mockVersionService.EXPECT().DeleteAppVersion(gomock.Any(), applicationKey, version).
23+
Return(nil).Times(1)
24+
25+
cmd := &deleteAppVersionCommand{
26+
versionService: mockVersionService,
27+
serverDetails: serverDetails,
28+
applicationKey: applicationKey,
29+
version: version,
30+
}
31+
32+
err := cmd.Run()
33+
assert.NoError(t, err)
34+
}
35+
36+
func TestDeleteAppVersionCommand_Run_Error(t *testing.T) {
37+
ctrl := gomock.NewController(t)
38+
defer ctrl.Finish()
39+
40+
serverDetails := &config.ServerDetails{Url: "https://example.com"}
41+
applicationKey := "app-key"
42+
version := "1.0.0"
43+
44+
mockVersionService := mockversions.NewMockVersionService(ctrl)
45+
mockVersionService.EXPECT().DeleteAppVersion(gomock.Any(), applicationKey, version).
46+
Return(errors.New("delete error")).Times(1)
47+
48+
cmd := &deleteAppVersionCommand{
49+
versionService: mockVersionService,
50+
serverDetails: serverDetails,
51+
applicationKey: applicationKey,
52+
version: version,
53+
}
54+
55+
err := cmd.Run()
56+
assert.Error(t, err)
57+
assert.Equal(t, "delete error", err.Error())
58+
}

apptrust/commands/version/promote_app_version_cmd.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ func GetPromoteAppVersionCommand(appContext app.Context) components.Command {
8080
Name: commands.PromoteAppVersion,
8181
Description: "Promote application version",
8282
Category: common.CategoryVersion,
83-
Aliases: []string{"pav"},
83+
Aliases: []string{"vp"},
8484
Arguments: []components.Argument{
8585
{
8686
Name: "version-name",

apptrust/service/versions/version_service.go

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import (
1313
type VersionService interface {
1414
CreateAppVersion(ctx service.Context, request *model.CreateAppVersionRequest) error
1515
PromoteAppVersion(ctx service.Context, payload *model.PromoteAppVersionRequest) error
16+
DeleteAppVersion(ctx service.Context, applicationKey string, version string) error
1617
}
1718

1819
type versionService struct{}
@@ -22,7 +23,7 @@ func NewVersionService() VersionService {
2223
}
2324

2425
func (vs *versionService) CreateAppVersion(ctx service.Context, request *model.CreateAppVersionRequest) error {
25-
response, responseBody, err := ctx.GetHttpClient().Post("/v1/version", request)
26+
response, responseBody, err := ctx.GetHttpClient().Post("/v1/applications/version", request)
2627
if err != nil {
2728
return err
2829
}
@@ -36,7 +37,7 @@ func (vs *versionService) CreateAppVersion(ctx service.Context, request *model.C
3637
}
3738

3839
func (vs *versionService) PromoteAppVersion(ctx service.Context, payload *model.PromoteAppVersionRequest) error {
39-
response, responseBody, err := ctx.GetHttpClient().Post("/v1/version/promote", payload)
40+
response, responseBody, err := ctx.GetHttpClient().Post("/v1/applications/version/promote", payload)
4041
if err != nil {
4142
return err
4243
}
@@ -48,3 +49,18 @@ func (vs *versionService) PromoteAppVersion(ctx service.Context, payload *model.
4849

4950
return nil
5051
}
52+
53+
func (vs *versionService) DeleteAppVersion(ctx service.Context, applicationKey string, version string) error {
54+
url := fmt.Sprintf("/v1/applications/%s/versions/%s", applicationKey, version)
55+
response, responseBody, err := ctx.GetHttpClient().Delete(url)
56+
if err != nil {
57+
return err
58+
}
59+
60+
if response.StatusCode != 204 {
61+
return fmt.Errorf("failed to delete app version. Status code: %d.\n%s",
62+
response.StatusCode, responseBody)
63+
}
64+
65+
return nil
66+
}

apptrust/service/versions/version_service_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ func TestCreateAppVersion(t *testing.T) {
5656
for _, tt := range tests {
5757
t.Run(tt.name, func(t *testing.T) {
5858
mockHttpClient := mockhttp.NewMockApptrustHttpClient(ctrl)
59-
mockHttpClient.EXPECT().Post("/v1/version", tt.request).
59+
mockHttpClient.EXPECT().Post("/v1/applications/version", tt.request).
6060
Return(tt.mockResponse, []byte(tt.mockResponseBody), tt.mockError).Times(1)
6161

6262
mockCtx := mockservice.NewMockContext(ctrl)
@@ -116,7 +116,7 @@ func TestPromoteAppVersion(t *testing.T) {
116116
for _, tt := range tests {
117117
t.Run(tt.name, func(t *testing.T) {
118118
mockHttpClient := mockhttp.NewMockApptrustHttpClient(ctrl)
119-
mockHttpClient.EXPECT().Post("/v1/version/promote", tt.payload).
119+
mockHttpClient.EXPECT().Post("/v1/applications/version/promote", tt.payload).
120120
Return(tt.mockResponse, []byte(tt.mockResponseBody), tt.mockError).Times(1)
121121

122122
mockCtx := mockservice.NewMockContext(ctrl)

0 commit comments

Comments
 (0)