Skip to content

Commit 2d12c3e

Browse files
committed
revise remote add and delete operations with new test suites and validations
1 parent 8372317 commit 2d12c3e

6 files changed

+148
-101
lines changed

git/remote/git_remote_add.go

Lines changed: 26 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
11
package remote
22

33
import (
4+
"errors"
45
"fmt"
56
git2go "github.com/libgit2/git2go/v31"
67
"github.com/neel1996/gitconvex/global"
7-
"github.com/neel1996/gitconvex/graph/model"
88
)
99

1010
type Add interface {
11-
NewRemote() *model.RemoteMutationResult
11+
NewRemote() error
1212
}
1313

1414
type addRemote struct {
@@ -18,20 +18,36 @@ type addRemote struct {
1818
}
1919

2020
// NewRemote adds a new remote to the target git repo
21-
func (a addRemote) NewRemote() *model.RemoteMutationResult {
22-
repo := a.repo
23-
remoteName := a.remoteName
24-
remoteURL := a.remoteURL
25-
26-
remote, err := repo.Remotes.Create(remoteName, remoteURL)
21+
func (a addRemote) NewRemote() error {
22+
if validationErr := a.validateRemoteFields(); validationErr != nil {
23+
logger.Log(validationErr.Error(), global.StatusError)
24+
return validationErr
25+
}
2726

27+
remote, err := a.repo.Remotes.Create(a.remoteName, a.remoteURL)
2828
if err != nil {
2929
logger.Log("Remote addition Failed -> "+err.Error(), global.StatusError)
30-
return &model.RemoteMutationResult{Status: global.RemoteAddError}
30+
return err
3131
}
3232

3333
logger.Log(fmt.Sprintf("New remote %s added to the repo", remote.Name()), global.StatusInfo)
34-
return &model.RemoteMutationResult{Status: global.RemoteAddSuccess}
34+
return nil
35+
}
36+
37+
func (a addRemote) validateRemoteFields() error {
38+
if a.repo == nil {
39+
return errors.New("repo is nil")
40+
}
41+
42+
if a.remoteName == "" {
43+
return errors.New("remote name cannot be empty")
44+
}
45+
46+
if a.remoteURL == "" {
47+
return errors.New("remote URL is empty")
48+
}
49+
50+
return nil
3551
}
3652

3753
func NewAddRemote(repo *git2go.Repository, remoteName string, remoteURL string) Add {

git/remote/git_remote_add_test.go

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
package remote
2+
3+
import (
4+
"fmt"
5+
git2go "github.com/libgit2/git2go/v31"
6+
"github.com/stretchr/testify/suite"
7+
"os"
8+
"testing"
9+
)
10+
11+
type RemoteAddTestSuite struct {
12+
suite.Suite
13+
addRemote Add
14+
}
15+
16+
func TestRemoteAddTestSuite(t *testing.T) {
17+
suite.Run(t, new(RemoteAddTestSuite))
18+
}
19+
20+
func (suite *RemoteAddTestSuite) SetupTest() {
21+
r, err := git2go.OpenRepository(os.Getenv("GITCONVEX_TEST_REPO"))
22+
if err != nil {
23+
fmt.Println(err)
24+
}
25+
suite.addRemote = NewAddRemote(r, "new_origin", "https://github.com/neel1996/gitconvex-test.git")
26+
}
27+
28+
func (suite *RemoteAddTestSuite) TestAddNewRemote_WhenNewRemoteIsAdded_ShouldReturnNoError() {
29+
err := suite.addRemote.NewRemote()
30+
31+
suite.Nil(err)
32+
}
33+
34+
func (suite *RemoteAddTestSuite) TestAddNewRemote_WhenRequiredFieldsAreEmpty_ShouldReturnError() {
35+
suite.addRemote = NewAddRemote(nil, "", "")
36+
37+
err := suite.addRemote.NewRemote()
38+
39+
suite.NotNil(err)
40+
}
41+
42+
func (suite *RemoteAddTestSuite) TestAddNewRemote_WhenRemoteCreationFails_ShouldReturnError() {
43+
r, _ := git2go.OpenRepository(os.Getenv("GITCONVEX_TEST_REPO"))
44+
45+
suite.addRemote = NewAddRemote(r, "new_origin", "https://github.com/neel1996/gitconvex-test.git")
46+
47+
err := suite.addRemote.NewRemote()
48+
49+
suite.NotNil(err)
50+
}

git/remote/git_remote_delete.go

Lines changed: 22 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,33 +1,45 @@
11
package remote
22

33
import (
4+
"errors"
45
"fmt"
56
git2go "github.com/libgit2/git2go/v31"
67
"github.com/neel1996/gitconvex/global"
7-
"github.com/neel1996/gitconvex/graph/model"
88
)
99

1010
type Delete interface {
11-
DeleteRemote() *model.RemoteMutationResult
11+
DeleteRemote() error
1212
}
1313

1414
type deleteRemote struct {
1515
repo *git2go.Repository
1616
remoteName string
1717
}
1818

19-
func (d deleteRemote) DeleteRemote() *model.RemoteMutationResult {
20-
remoteToBeDeleted := d.remoteName
21-
22-
deletionError := &model.RemoteMutationResult{Status: global.RemoteDeleteError}
19+
// DeleteRemote deletes the remote based on the specified remoteName
20+
func (d deleteRemote) DeleteRemote() error {
21+
if validationError := d.validateRemoteFields(); validationError != nil {
22+
return validationError
23+
}
2324

2425
err := d.deleteSelectedRemote(d.remoteName)
2526
if err != nil {
26-
logger.Log(fmt.Sprintf("Remote => %s cannot be found in the repo", remoteToBeDeleted), global.StatusError)
27-
return deletionError
27+
logger.Log(fmt.Sprintf("Remote => %s cannot be found in the repo", d.remoteName), global.StatusError)
28+
return err
29+
}
30+
31+
return nil
32+
}
33+
34+
func (d deleteRemote) validateRemoteFields() error {
35+
if d.repo == nil {
36+
return errors.New("repo is nil")
2837
}
2938

30-
return &model.RemoteMutationResult{Status: global.RemoteDeleteSuccess}
39+
if d.remoteName == "" {
40+
return errors.New("remote name cannot be empty")
41+
}
42+
return nil
3143
}
3244

3345
func (d *deleteRemote) deleteSelectedRemote(remoteEntry string) error {
@@ -41,7 +53,7 @@ func (d *deleteRemote) deleteSelectedRemote(remoteEntry string) error {
4153
return nil
4254
}
4355

44-
func NewDeleteRemoteInterface(repo *git2go.Repository, remoteName string) Delete {
56+
func NewDeleteRemote(repo *git2go.Repository, remoteName string) Delete {
4557
return deleteRemote{
4658
repo: repo,
4759
remoteName: remoteName,

git/remote/git_remote_delete_test.go

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
package remote
2+
3+
import (
4+
"fmt"
5+
git2go "github.com/libgit2/git2go/v31"
6+
"github.com/stretchr/testify/suite"
7+
"os"
8+
"testing"
9+
)
10+
11+
type RemoteDeleteTestSuite struct {
12+
suite.Suite
13+
deleteRemote Delete
14+
}
15+
16+
func TestRemoteDeleteTestSuite(t *testing.T) {
17+
suite.Run(t, new(RemoteDeleteTestSuite))
18+
}
19+
20+
func (suite *RemoteDeleteTestSuite) SetupTest() {
21+
r, err := git2go.OpenRepository(os.Getenv("GITCONVEX_TEST_REPO"))
22+
if err != nil {
23+
fmt.Println(err)
24+
}
25+
suite.deleteRemote = NewDeleteRemote(r, "new_origin")
26+
}
27+
28+
func (suite *RemoteDeleteTestSuite) TestDeleteNewRemote_WhenNewRemoteIsDeleted_ShouldReturnNoError() {
29+
err := suite.deleteRemote.DeleteRemote()
30+
31+
suite.Nil(err)
32+
}
33+
34+
func (suite *RemoteDeleteTestSuite) TestDeleteNewRemote_WhenRequiredFieldsAreEmpty_ShouldReturnError() {
35+
suite.deleteRemote = NewDeleteRemote(nil, "")
36+
37+
err := suite.deleteRemote.DeleteRemote()
38+
39+
suite.NotNil(err)
40+
}
41+
42+
func (suite *RemoteDeleteTestSuite) TestDeleteNewRemote_WhenRemoteDeletionFails_ShouldReturnError() {
43+
r, _ := git2go.OpenRepository(os.Getenv("GITCONVEX_TEST_REPO"))
44+
45+
suite.deleteRemote = NewDeleteRemote(r, "new_origin")
46+
47+
err := suite.deleteRemote.DeleteRemote()
48+
49+
suite.NotNil(err)
50+
}

tests/git_remote_add_test.go

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

tests/git_remote_delete_test.go

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

0 commit comments

Comments
 (0)