From d74ec68482b39466a19b25e39dbe564f1607bc25 Mon Sep 17 00:00:00 2001 From: Filip Aleksic Date: Fri, 7 Nov 2025 09:02:12 +0100 Subject: [PATCH] revert push --- internal/commands/gpg-key/delete/delete.go | 72 ------------ .../commands/gpg-key/delete/delete_test.go | 107 ------------------ .../commands/label/delete/label_delete.go | 54 --------- .../label/delete/label_delete_test.go | 98 ---------------- internal/commands/label/edit/label_edit.go | 88 -------------- .../commands/label/edit/label_edit_test.go | 101 ----------------- 6 files changed, 520 deletions(-) delete mode 100644 internal/commands/gpg-key/delete/delete.go delete mode 100644 internal/commands/gpg-key/delete/delete_test.go delete mode 100644 internal/commands/label/delete/label_delete.go delete mode 100644 internal/commands/label/delete/label_delete_test.go delete mode 100644 internal/commands/label/edit/label_edit.go delete mode 100644 internal/commands/label/edit/label_edit_test.go diff --git a/internal/commands/gpg-key/delete/delete.go b/internal/commands/gpg-key/delete/delete.go deleted file mode 100644 index 500a4e1d5..000000000 --- a/internal/commands/gpg-key/delete/delete.go +++ /dev/null @@ -1,72 +0,0 @@ -package delete - -import ( - "fmt" - - "github.com/MakeNowJust/heredoc/v2" - "github.com/spf13/cobra" - gitlab "gitlab.com/gitlab-org/api/client-go" - "gitlab.com/gitlab-org/cli/internal/cmdutils" - "gitlab.com/gitlab-org/cli/internal/iostreams" - "gitlab.com/gitlab-org/cli/internal/mcpannotations" - "gitlab.com/gitlab-org/cli/internal/utils" -) - -type options struct { - gitlabClient func() (*gitlab.Client, error) - io *iostreams.IOStreams - - keyID int -} - -func NewCmdDelete(f cmdutils.Factory) *cobra.Command { - opts := &options{ - io: f.IO(), - gitlabClient: f.GitLabClient, - } - cmd := &cobra.Command{ - Use: "delete ", - Short: "Deletes a single GPG key specified by the ID.", - Long: ``, - Example: heredoc.Doc(` - # Delete GPG key with ID as argument - $ glab gpg-key delete 7750633`), - Args: cobra.ExactArgs(1), - Annotations: map[string]string{ - mcpannotations.Destructive: "true", - }, - RunE: func(cmd *cobra.Command, args []string) error { - if err := opts.complete(args); err != nil { - return err - } - return opts.run() - }, - } - - return cmd -} - -func (o *options) complete(args []string) error { - if len(args) == 1 { - o.keyID = utils.StringToInt(args[0]) - } - - return nil -} - -func (o *options) run() error { - client, err := o.gitlabClient() - if err != nil { - return err - } - - _, err = client.Users.DeleteGPGKey(o.keyID) - if err != nil { - return cmdutils.WrapError(err, "failed to delete GPG key.") - } - - cs := o.io.Color() - fmt.Fprintf(o.io.StdOut, "%s GPG key deleted.", cs.GreenCheck()) - - return nil -} diff --git a/internal/commands/gpg-key/delete/delete_test.go b/internal/commands/gpg-key/delete/delete_test.go deleted file mode 100644 index 4d2756a84..000000000 --- a/internal/commands/gpg-key/delete/delete_test.go +++ /dev/null @@ -1,107 +0,0 @@ -//go:build !integration - -package delete - -import ( - "errors" - "testing" - - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" - gitlabtesting "gitlab.com/gitlab-org/api/client-go/testing" - "gitlab.com/gitlab-org/cli/internal/testing/cmdtest" -) - -func Test_DeleteGPGKey(t *testing.T) { - type testCase struct { - Name string - ExpectedMsg []string - wantErr bool - cli string - wantStderr string - setupMock func(tc *gitlabtesting.TestClient) - } - - testCases := []testCase{ - { - Name: "Delete GPG key by ID", - ExpectedMsg: []string{"GPG key deleted."}, - cli: "123", - wantErr: false, - setupMock: func(tc *gitlabtesting.TestClient) { - tc.MockUsers.EXPECT().DeleteGPGKey(123).Return(nil, nil) - }, - }, - { - Name: "Delete GPG key with non numeric ID", - cli: "abc", - wantErr: true, - wantStderr: "404", - setupMock: func(tc *gitlabtesting.TestClient) { - tc.MockUsers.EXPECT().DeleteGPGKey(0).Return(nil, errors.New("404 Not Found")) - }, - }, - { - Name: "Delete non existent GPG key", - cli: "999", - wantErr: true, - wantStderr: "404", - setupMock: func(tc *gitlabtesting.TestClient) { - tc.MockUsers.EXPECT().DeleteGPGKey(999).Return(nil, errors.New("404 Not found")) - }, - }, - { - Name: "Delete GPG key without ID", - cli: "", - wantErr: true, - wantStderr: "accepts 1 arg(s), received 0", - setupMock: func(tc *gitlabtesting.TestClient) {}, - }, - { - Name: "Delete GPG key with unauthorized error", - cli: "123", - wantErr: true, - wantStderr: "401", - setupMock: func(tc *gitlabtesting.TestClient) { - tc.MockUsers.EXPECT().DeleteGPGKey(123).Return(nil, errors.New("401 Unauthorized")) - }, - }, - { - Name: "Explicit zero ID returns not found", - cli: "0", - wantErr: true, - wantStderr: "404 Not found", - setupMock: func(tc *gitlabtesting.TestClient) { - tc.MockUsers.EXPECT().DeleteGPGKey(0).Return(nil, errors.New("404 Not found")) - }, - }, - } - - for _, tc := range testCases { - t.Run(tc.Name, func(t *testing.T) { - // GIVEN - testClient := gitlabtesting.NewTestClient(t) - tc.setupMock(testClient) - exec := cmdtest.SetupCmdForTest( - t, - NewCmdDelete, - false, - cmdtest.WithGitLabClient(testClient.Client), - ) - - // WHEN - out, err := exec(tc.cli) - - // THEN - if tc.wantErr { - require.Error(t, err) - assert.Contains(t, err.Error(), tc.wantStderr) - return - } - require.NoError(t, err) - for _, msg := range tc.ExpectedMsg { - assert.Contains(t, out.OutBuf.String(), msg) - } - }) - } -} diff --git a/internal/commands/label/delete/label_delete.go b/internal/commands/label/delete/label_delete.go deleted file mode 100644 index c880a2a7d..000000000 --- a/internal/commands/label/delete/label_delete.go +++ /dev/null @@ -1,54 +0,0 @@ -package delete - -import ( - "fmt" - - "gitlab.com/gitlab-org/cli/internal/mcpannotations" - - "github.com/MakeNowJust/heredoc/v2" - - "github.com/spf13/cobra" - gitlab "gitlab.com/gitlab-org/api/client-go" - "gitlab.com/gitlab-org/cli/internal/cmdutils" -) - -func NewCmdDelete(f cmdutils.Factory) *cobra.Command { - labelDeleteCmd := &cobra.Command{ - Use: "delete [flags]", - Short: `Delete labels for a repository or project.`, - Long: ``, - Example: heredoc.Doc(` - $ glab label delete foo - $ glab label delete -R owner/repo foo - `), - Args: cobra.ExactArgs(1), - Annotations: map[string]string{ - mcpannotations.Destructive: "true", - }, - RunE: func(cmd *cobra.Command, args []string) error { - var err error - - client, err := f.GitLabClient() - if err != nil { - return err - } - - repo, err := f.BaseRepo() - if err != nil { - return err - } - - o := &gitlab.DeleteLabelOptions{} - - _, err = client.Labels.DeleteLabel(repo.FullName(), args[0], o) - if err != nil { - return err - } - fmt.Fprintf(f.IO().StdOut, "Label deleted") - - return nil - }, - } - - return labelDeleteCmd -} diff --git a/internal/commands/label/delete/label_delete_test.go b/internal/commands/label/delete/label_delete_test.go deleted file mode 100644 index 3a1b57036..000000000 --- a/internal/commands/label/delete/label_delete_test.go +++ /dev/null @@ -1,98 +0,0 @@ -//go:build !integration - -package delete - -import ( - "net/http" - "testing" - - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" - "gitlab.com/gitlab-org/cli/internal/glinstance" - "gitlab.com/gitlab-org/cli/internal/testing/cmdtest" - "gitlab.com/gitlab-org/cli/internal/testing/httpmock" - "gitlab.com/gitlab-org/cli/test" -) - -func Test_LabelDelete(t *testing.T) { - type httpMock struct { - method string - path string - status int - body string - } - - testCases := []struct { - Name string - ExpectedMsg []string - wantErr bool - cli string - wantStderr string - httpMocks []httpMock - }{ - { - Name: "Label delete", - ExpectedMsg: []string{"Label deleted"}, - cli: "foo", - httpMocks: []httpMock{ - { - http.MethodDelete, - "/api/v4/projects/OWNER/REPO/labels/foo", - http.StatusNoContent, - "", - }, - }, - }, - { - Name: "Label delete error", - wantErr: true, - cli: "nonexistent", - wantStderr: "404 Not Found", - httpMocks: []httpMock{ - { - http.MethodDelete, - "/api/v4/projects/OWNER/REPO/labels/nonexistent", - http.StatusNotFound, - "", - }, - }, - }, - } - for _, tc := range testCases { - t.Run(tc.Name, func(t *testing.T) { - fakeHTTP := &httpmock.Mocker{ - MatchURL: httpmock.PathAndQuerystring, - } - defer fakeHTTP.Verify(t) - - for _, mock := range tc.httpMocks { - fakeHTTP.RegisterResponder(mock.method, mock.path, httpmock.NewStringResponse(mock.status, mock.body)) - } - - out, err := runCommand(t, fakeHTTP, tc.cli) - - for _, msg := range tc.ExpectedMsg { - require.Contains(t, out.String(), msg) - } - if err != nil { - if tc.wantErr == true { - if assert.Error(t, err) { - require.Equal(t, tc.wantStderr, err.Error()) - } - return - } - } - }) - } -} - -func runCommand(t *testing.T, rt http.RoundTripper, cli string) (*test.CmdOut, error) { - t.Helper() - - ios, _, stdout, stderr := cmdtest.TestIOStreams() - factory := cmdtest.NewTestFactory(ios, - cmdtest.WithGitLabClient(cmdtest.NewTestApiClient(t, &http.Client{Transport: rt}, "", glinstance.DefaultHostname).Lab()), - ) - cmd := NewCmdDelete(factory) - return cmdtest.ExecuteCommand(cmd, cli, stdout, stderr) -} diff --git a/internal/commands/label/edit/label_edit.go b/internal/commands/label/edit/label_edit.go deleted file mode 100644 index 0924d27c0..000000000 --- a/internal/commands/label/edit/label_edit.go +++ /dev/null @@ -1,88 +0,0 @@ -package edit - -import ( - "fmt" - - "gitlab.com/gitlab-org/cli/internal/mcpannotations" - - "github.com/MakeNowJust/heredoc/v2" - - "github.com/spf13/cobra" - gitlab "gitlab.com/gitlab-org/api/client-go" - "gitlab.com/gitlab-org/cli/internal/cmdutils" -) - -func NewCmdEdit(f cmdutils.Factory) *cobra.Command { - var labelID int - - LabelUpdateCmd := &cobra.Command{ - Use: "edit [flags]", - Short: `Edit group or project label.`, - Long: ``, - Example: heredoc.Doc(` - $ glab label edit - $ glab label edit -R owner/repo - `), - Args: cobra.ExactArgs(0), - Annotations: map[string]string{ - mcpannotations.Destructive: "true", - }, - RunE: func(cmd *cobra.Command, args []string) error { - var err error - var change string - - client, err := f.GitLabClient() - if err != nil { - return err - } - - repo, err := f.BaseRepo() - if err != nil { - return err - } - - l := &gitlab.UpdateLabelOptions{} - - if s, _ := cmd.Flags().GetString("new-name"); s != "" { - l.Name = gitlab.Ptr(s) - change += fmt.Sprintf("Updated name: %s\n", s) - } - if s, _ := cmd.Flags().GetString("color"); s != "" { - l.Color = gitlab.Ptr(s) - change += fmt.Sprintf("Updated color: %s\n", s) - } - if s, _ := cmd.Flags().GetString("description"); s != "" { - l.Description = gitlab.Ptr(s) - change += fmt.Sprintf("Updated description: %s\n", s) - } - if cmd.Flags().Changed("priority") { - if s, err := cmd.Flags().GetInt("priority"); err == nil { - l.Priority = gitlab.Ptr(s) - change += fmt.Sprintf("Updated priority: %d\n", s) - } else { - return err - } - } - - label, _, err := client.Labels.UpdateLabel(repo.FullName(), labelID, l) - if err != nil { - return err - } - - f.IO().LogInfof("Updating \"%s\" label\n%s", label.Name, change) - - return nil - }, - } - - LabelUpdateCmd.Flags().IntVarP(&labelID, "label-id", "l", 0, "The label ID we are updating.") - _ = LabelUpdateCmd.MarkFlagRequired("label-id") - - LabelUpdateCmd.Flags().StringP("new-name", "n", "", "The new name of the label.") - LabelUpdateCmd.Flags().StringP("color", "c", "", "The color of the label given in 6-digit hex notation with leading ‘#’ sign.") - LabelUpdateCmd.MarkFlagsOneRequired("new-name", "color") - LabelUpdateCmd.Flags().StringP("description", "d", "", "Label description.") - LabelUpdateCmd.Flags().IntP("priority", "p", 0, "Label priority.") - - return LabelUpdateCmd -} diff --git a/internal/commands/label/edit/label_edit_test.go b/internal/commands/label/edit/label_edit_test.go deleted file mode 100644 index ec300877f..000000000 --- a/internal/commands/label/edit/label_edit_test.go +++ /dev/null @@ -1,101 +0,0 @@ -//go:build !integration - -package edit - -import ( - "testing" - - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" - gitlab "gitlab.com/gitlab-org/api/client-go" - gitlabtesting "gitlab.com/gitlab-org/api/client-go/testing" - "gitlab.com/gitlab-org/cli/internal/testing/cmdtest" - "go.uber.org/mock/gomock" -) - -func Test_UpdateLabel(t *testing.T) { - type testCase struct { - Name string - ExpectedMsg []string - wantErr bool - cli string - wantStderr string - setupMock func(tc *gitlabtesting.TestClient) - } - - testLabel := &gitlab.Label{ - ID: 123, - Name: "Example label", - Description: "Example Description", - Priority: 5, - Color: "#FFFFFF", - } - - testCases := []testCase{ - { - Name: "Update label color and priority", - ExpectedMsg: []string{"Updating \"Example label\" label\nUpdated color: #FFFFFF\nUpdated priority: 5\n"}, - cli: "--label-id=123 --color='#FFFFFF' --priority=5", - setupMock: func(tc *gitlabtesting.TestClient) { - tc.MockLabels.EXPECT().UpdateLabel("OWNER/REPO", 123, gomock.Any()).Return(testLabel, nil, nil) - }, - }, - { - Name: "Get label without ID", - cli: "", - wantErr: true, - wantStderr: "required flag(s) \"label-id\" not set", - setupMock: func(tc *gitlabtesting.TestClient) {}, - }, - { - Name: "Update both name and color", - ExpectedMsg: []string{"Updating \"Example label\" label\nUpdated name: Example label\nUpdated color: #FFFFFF\n"}, - cli: "--label-id=123 --color='#FFFFFF' --new-name='Example label'", - setupMock: func(tc *gitlabtesting.TestClient) { - tc.MockLabels.EXPECT().UpdateLabel("OWNER/REPO", 123, gomock.Any()).Return(testLabel, nil, nil) - }, - }, - { - Name: "Require at least new-name or color", - cli: "--label-id=123", - ExpectedMsg: []string{"at least one of the flags in the group [new-name color] is required"}, - wantErr: true, - setupMock: func(tc *gitlabtesting.TestClient) {}, - }, - { - Name: "Returns error when priority is not a number", - cli: "--label-id=123 --priority='high'", - ExpectedMsg: []string{"invalid argument \"high\" for \"-p, --priority\" flag: strconv.ParseInt: parsing \"high\": invalid syntax"}, - wantErr: true, - setupMock: func(tc *gitlabtesting.TestClient) {}, - }, - } - - for _, tc := range testCases { - t.Run(tc.Name, func(t *testing.T) { - // GIVEN - testClient := gitlabtesting.NewTestClient(t) - tc.setupMock(testClient) - exec := cmdtest.SetupCmdForTest( - t, - NewCmdEdit, - false, - cmdtest.WithGitLabClient(testClient.Client), - ) - - // WHEN - out, err := exec(tc.cli) - - // THEN - if tc.wantErr { - require.Error(t, err) - assert.Contains(t, err.Error(), tc.wantStderr) - return - } - require.NoError(t, err) - for _, msg := range tc.ExpectedMsg { - assert.Contains(t, out.OutBuf.String(), msg) - } - }) - } -} -- GitLab