diff --git a/internal/interactor/branch.go b/internal/interactor/branch.go deleted file mode 100644 index 9477b0dc..00000000 --- a/internal/interactor/branch.go +++ /dev/null @@ -1 +0,0 @@ -package interactor diff --git a/internal/interactor/chat_callback.go b/internal/interactor/chat_callback.go deleted file mode 100644 index 9477b0dc..00000000 --- a/internal/interactor/chat_callback.go +++ /dev/null @@ -1 +0,0 @@ -package interactor diff --git a/internal/interactor/chat_user.go b/internal/interactor/chat_user.go deleted file mode 100644 index 9477b0dc..00000000 --- a/internal/interactor/chat_user.go +++ /dev/null @@ -1 +0,0 @@ -package interactor diff --git a/internal/interactor/commit.go b/internal/interactor/commit.go deleted file mode 100644 index 9477b0dc..00000000 --- a/internal/interactor/commit.go +++ /dev/null @@ -1 +0,0 @@ -package interactor diff --git a/pkg/api/deployment.go b/pkg/api/deployment.go index 6c8ad506..65cb8280 100644 --- a/pkg/api/deployment.go +++ b/pkg/api/deployment.go @@ -1,5 +1,128 @@ package api +import ( + "context" + "fmt" + "net/url" + "strconv" + + "github.com/gitploy-io/gitploy/model/ent" + "github.com/gitploy-io/gitploy/model/ent/deployment" +) + type ( DeploymentsService service + + DeploymentListOptions struct { + ListOptions + + Env string + Status deployment.Status + } + + DeploymentCreateRequest struct { + Type string `json:"type"` + Ref string `json:"ref"` + Env string `json:"env"` + } ) + +// List returns the deployment list. +// It returns an error for a bad request. +func (s *DeploymentsService) List(ctx context.Context, namespace, name string, options DeploymentListOptions) ([]*ent.Deployment, error) { + // Build the query. + vals := url.Values{} + + vals.Add("page", strconv.Itoa(options.ListOptions.Page)) + vals.Add("per_page", strconv.Itoa(options.PerPage)) + + if options.Env != "" { + vals.Add("env", options.Env) + } + + if options.Status != "" { + if err := deployment.StatusValidator(options.Status); err != nil { + return nil, err + } + + vals.Add("status", string(options.Status)) + } + + // Request a server. + req, err := s.client.NewRequest( + "GET", + fmt.Sprintf("api/v1/repos/%s/%s/deployments?%s", namespace, name, vals.Encode()), + nil, + ) + if err != nil { + return nil, err + } + + var ds []*ent.Deployment + err = s.client.Do(ctx, req, &ds) + if err != nil { + return nil, err + } + + return ds, nil +} + +// Get returns the deployment. +func (s *DeploymentsService) Get(ctx context.Context, namespace, name string, number int) (*ent.Deployment, error) { + req, err := s.client.NewRequest( + "GET", + fmt.Sprintf("api/v1/repos/%s/%s/deployments/%d", namespace, name, number), + nil, + ) + if err != nil { + return nil, err + } + + var d *ent.Deployment + err = s.client.Do(ctx, req, &d) + if err != nil { + return nil, err + } + + return d, nil +} + +// Create requests a server to deploy a specific ref(branch, SHA, tag). +func (s *DeploymentsService) Create(ctx context.Context, namespace, name string, body DeploymentCreateRequest) (*ent.Deployment, error) { + req, err := s.client.NewRequest( + "POST", + fmt.Sprintf("api/v1/repos/%s/%s/deployments", namespace, name), + body, + ) + if err != nil { + return nil, err + } + + var d *ent.Deployment + err = s.client.Do(ctx, req, &d) + if err != nil { + return nil, err + } + + return d, nil +} + +// Update requests to trigger the 'waiting' deployment. +func (s *DeploymentsService) Update(ctx context.Context, namespace, name string, number int) (*ent.Deployment, error) { + req, err := s.client.NewRequest( + "PUT", + fmt.Sprintf("api/v1/repos/%s/%s/deployments/%d", namespace, name, number), + nil, + ) + if err != nil { + return nil, err + } + + var d *ent.Deployment + err = s.client.Do(ctx, req, &d) + if err != nil { + return nil, err + } + + return d, nil +} diff --git a/pkg/api/deployment_create.go b/pkg/api/deployment_create.go deleted file mode 100644 index 4d35d163..00000000 --- a/pkg/api/deployment_create.go +++ /dev/null @@ -1,34 +0,0 @@ -package api - -import ( - "context" - "fmt" - - "github.com/gitploy-io/gitploy/model/ent" -) - -type DeploymentCreateRequest struct { - Type string `json:"type"` - Ref string `json:"ref"` - Env string `json:"env"` -} - -// Create requests a server to deploy a specific ref(branch, SHA, tag). -func (s *DeploymentsService) Create(ctx context.Context, namespace, name string, body DeploymentCreateRequest) (*ent.Deployment, error) { - req, err := s.client.NewRequest( - "POST", - fmt.Sprintf("api/v1/repos/%s/%s/deployments", namespace, name), - body, - ) - if err != nil { - return nil, err - } - - var d *ent.Deployment - err = s.client.Do(ctx, req, &d) - if err != nil { - return nil, err - } - - return d, nil -} diff --git a/pkg/api/deployment_create_test.go b/pkg/api/deployment_create_test.go deleted file mode 100644 index 1a923298..00000000 --- a/pkg/api/deployment_create_test.go +++ /dev/null @@ -1,48 +0,0 @@ -package api - -import ( - "context" - "encoding/json" - "io/ioutil" - "net/http" - "testing" - - "github.com/gitploy-io/gitploy/model/ent" - "github.com/gitploy-io/gitploy/model/ent/deployment" - "gopkg.in/h2non/gock.v1" -) - -func TestDeploymentsService_Create(t *testing.T) { - t.Run("Verify the body of a request.", func(t *testing.T) { - d := &ent.Deployment{ - ID: 2, Number: 1, Type: deployment.TypeBranch, Env: "production", Ref: "main", - } - gock.New("https://cloud.gitploy.io"). - Post("/api/v1/repos/gitploy-io/gitploy/deployments"). - AddMatcher(func(req *http.Request, ereq *gock.Request) (bool, error) { - defer req.Body.Close() - output, _ := ioutil.ReadAll(req.Body) - - b := DeploymentCreateRequest{} - if err := json.Unmarshal(output, &b); err != nil { - return false, err - } - - // Verify the fields of the body. - return b.Type == "branch" && b.Env == "production" && b.Ref == "main", nil - }). - Reply(201). - JSON(d) - - c := NewClient("https://cloud.gitploy.io/", http.DefaultClient) - - _, err := c.Deployments.Create(context.Background(), "gitploy-io", "gitploy", DeploymentCreateRequest{ - Type: "branch", - Env: "production", - Ref: "main", - }) - if err != nil { - t.Fatalf("Create returns an error: %s", err) - } - }) -} diff --git a/pkg/api/deployment_get.go b/pkg/api/deployment_get.go deleted file mode 100644 index 8a20d626..00000000 --- a/pkg/api/deployment_get.go +++ /dev/null @@ -1,28 +0,0 @@ -package api - -import ( - "context" - "fmt" - - "github.com/gitploy-io/gitploy/model/ent" -) - -// Get returns the deployment. -func (s *DeploymentsService) Get(ctx context.Context, namespace, name string, number int) (*ent.Deployment, error) { - req, err := s.client.NewRequest( - "GET", - fmt.Sprintf("api/v1/repos/%s/%s/deployments/%d", namespace, name, number), - nil, - ) - if err != nil { - return nil, err - } - - var d *ent.Deployment - err = s.client.Do(ctx, req, &d) - if err != nil { - return nil, err - } - - return d, nil -} diff --git a/pkg/api/deployment_list.go b/pkg/api/deployment_list.go deleted file mode 100644 index dd887930..00000000 --- a/pkg/api/deployment_list.go +++ /dev/null @@ -1,60 +0,0 @@ -package api - -import ( - "context" - "fmt" - "net/url" - "strconv" - - "github.com/gitploy-io/gitploy/model/ent" - "github.com/gitploy-io/gitploy/model/ent/deployment" -) - -type ( - DeploymentListOptions struct { - ListOptions - - Env string - Status deployment.Status - } -) - -// List returns the deployment list. -// It returns an error for a bad request. -func (s *DeploymentsService) List(ctx context.Context, namespace, name string, options DeploymentListOptions) ([]*ent.Deployment, error) { - // Build the query. - vals := url.Values{} - - vals.Add("page", strconv.Itoa(options.ListOptions.Page)) - vals.Add("per_page", strconv.Itoa(options.PerPage)) - - if options.Env != "" { - vals.Add("env", options.Env) - } - - if options.Status != "" { - if err := deployment.StatusValidator(options.Status); err != nil { - return nil, err - } - - vals.Add("status", string(options.Status)) - } - - // Request a server. - req, err := s.client.NewRequest( - "GET", - fmt.Sprintf("api/v1/repos/%s/%s/deployments?%s", namespace, name, vals.Encode()), - nil, - ) - if err != nil { - return nil, err - } - - var ds []*ent.Deployment - err = s.client.Do(ctx, req, &ds) - if err != nil { - return nil, err - } - - return ds, nil -} diff --git a/pkg/api/deployment_list_test.go b/pkg/api/deployment_list_test.go deleted file mode 100644 index 8b3f0d0a..00000000 --- a/pkg/api/deployment_list_test.go +++ /dev/null @@ -1,43 +0,0 @@ -package api - -import ( - "context" - "net/http" - "testing" - - "github.com/gitploy-io/gitploy/model/ent" - "github.com/gitploy-io/gitploy/model/ent/deployment" - "gopkg.in/h2non/gock.v1" -) - -func TestDeploymentsService_List(t *testing.T) { - t.Run("Verify the query of a request.", func(t *testing.T) { - ds := []*ent.Deployment{ - {ID: 1, Env: "production", Status: deployment.StatusWaiting}, - {ID: 2, Env: "production", Status: deployment.StatusWaiting}, - } - gock.New("https://cloud.gitploy.io"). - Get("/api/v1/repos/gitploy-io/gitploy/deployments"). - MatchParam("env", "production"). - MatchParam("status", "waiting"). - Reply(200). - JSON(ds) - - c := NewClient("https://cloud.gitploy.io/", http.DefaultClient) - - ret, err := c.Deployments.List(context.Background(), "gitploy-io", "gitploy", DeploymentListOptions{ - ListOptions: ListOptions{Page: 1, PerPage: 30}, - Env: "production", - Status: "waiting", - }) - if err != nil { - t.Fatalf("List returns an error: %s", err) - } - - for idx := range ret { - if ret[idx].ID != ds[idx].ID { - t.Fatalf("List = %v, wanted %v", ret, ds) - } - } - }) -} diff --git a/pkg/api/deployment_test.go b/pkg/api/deployment_test.go new file mode 100644 index 00000000..687615f2 --- /dev/null +++ b/pkg/api/deployment_test.go @@ -0,0 +1,99 @@ +package api + +import ( + "context" + "encoding/json" + "io/ioutil" + "net/http" + "testing" + + "github.com/gitploy-io/gitploy/model/ent" + "github.com/gitploy-io/gitploy/model/ent/deployment" + "gopkg.in/h2non/gock.v1" +) + +func TestDeploymentsService_List(t *testing.T) { + t.Run("Verify the query of a request.", func(t *testing.T) { + ds := []*ent.Deployment{ + {ID: 1, Env: "production", Status: deployment.StatusWaiting}, + {ID: 2, Env: "production", Status: deployment.StatusWaiting}, + } + gock.New("https://cloud.gitploy.io"). + Get("/api/v1/repos/gitploy-io/gitploy/deployments"). + MatchParam("env", "production"). + MatchParam("status", "waiting"). + Reply(200). + JSON(ds) + + c := NewClient("https://cloud.gitploy.io/", http.DefaultClient) + + ret, err := c.Deployments.List(context.Background(), "gitploy-io", "gitploy", DeploymentListOptions{ + ListOptions: ListOptions{Page: 1, PerPage: 30}, + Env: "production", + Status: "waiting", + }) + if err != nil { + t.Fatalf("List returns an error: %s", err) + } + + for idx := range ret { + if ret[idx].ID != ds[idx].ID { + t.Fatalf("List = %v, wanted %v", ret, ds) + } + } + }) +} + +func TestDeploymentsService_Create(t *testing.T) { + t.Run("Verify the body of a request.", func(t *testing.T) { + d := &ent.Deployment{ + ID: 2, Number: 1, Type: deployment.TypeBranch, Env: "production", Ref: "main", + } + gock.New("https://cloud.gitploy.io"). + Post("/api/v1/repos/gitploy-io/gitploy/deployments"). + AddMatcher(func(req *http.Request, ereq *gock.Request) (bool, error) { + defer req.Body.Close() + output, _ := ioutil.ReadAll(req.Body) + + b := DeploymentCreateRequest{} + if err := json.Unmarshal(output, &b); err != nil { + return false, err + } + + // Verify the fields of the body. + return b.Type == "branch" && b.Env == "production" && b.Ref == "main", nil + }). + Reply(201). + JSON(d) + + c := NewClient("https://cloud.gitploy.io/", http.DefaultClient) + + _, err := c.Deployments.Create(context.Background(), "gitploy-io", "gitploy", DeploymentCreateRequest{ + Type: "branch", + Env: "production", + Ref: "main", + }) + if err != nil { + t.Fatalf("Create returns an error: %s", err) + } + }) +} + +func TestDeploymentsService_Update(t *testing.T) { + t.Run("Verify the request.", func(t *testing.T) { + d := &ent.Deployment{ + ID: 2, Number: 1, Type: deployment.TypeBranch, Env: "production", Ref: "main", + } + gock.New("https://cloud.gitploy.io"). + Put("/api/v1/repos/gitploy-io/gitploy/deployments/1"). + Reply(201). + JSON(d) + + c := NewClient("https://cloud.gitploy.io/", http.DefaultClient) + + _, err := c.Deployments.Update(context.Background(), "gitploy-io", "gitploy", 1) + if err != nil { + t.Fatalf("Create returns an error: %s", err) + } + }) +} diff --git a/pkg/api/deployment_update.go b/pkg/api/deployment_update.go deleted file mode 100644 index 569fc84f..00000000 --- a/pkg/api/deployment_update.go +++ /dev/null @@ -1,28 +0,0 @@ -package api - -import ( - "context" - "fmt" - - "github.com/gitploy-io/gitploy/model/ent" -) - -// Update requests to trigger the 'waiting' deployment. -func (s *DeploymentsService) Update(ctx context.Context, namespace, name string, number int) (*ent.Deployment, error) { - req, err := s.client.NewRequest( - "PUT", - fmt.Sprintf("api/v1/repos/%s/%s/deployments/%d", namespace, name, number), - nil, - ) - if err != nil { - return nil, err - } - - var d *ent.Deployment - err = s.client.Do(ctx, req, &d) - if err != nil { - return nil, err - } - - return d, nil -} diff --git a/pkg/api/deployment_update_test.go b/pkg/api/deployment_update_test.go deleted file mode 100644 index 4edee2f0..00000000 --- a/pkg/api/deployment_update_test.go +++ /dev/null @@ -1,30 +0,0 @@ -package api - -import ( - "context" - "net/http" - "testing" - - "github.com/gitploy-io/gitploy/model/ent" - "github.com/gitploy-io/gitploy/model/ent/deployment" - "gopkg.in/h2non/gock.v1" -) - -func TestDeploymentsService_Update(t *testing.T) { - t.Run("Verify the request.", func(t *testing.T) { - d := &ent.Deployment{ - ID: 2, Number: 1, Type: deployment.TypeBranch, Env: "production", Ref: "main", - } - gock.New("https://cloud.gitploy.io"). - Put("/api/v1/repos/gitploy-io/gitploy/deployments/1"). - Reply(201). - JSON(d) - - c := NewClient("https://cloud.gitploy.io/", http.DefaultClient) - - _, err := c.Deployments.Update(context.Background(), "gitploy-io", "gitploy", 1) - if err != nil { - t.Fatalf("Create returns an error: %s", err) - } - }) -} diff --git a/pkg/api/repo.go b/pkg/api/repo.go index 4d566e48..3ed11712 100644 --- a/pkg/api/repo.go +++ b/pkg/api/repo.go @@ -1,5 +1,114 @@ package api +import ( + "context" + "fmt" + "net/url" + "strconv" + + "github.com/gitploy-io/gitploy/model/ent" +) + type ( ReposService service + + RepoListOptions struct { + ListOptions + } + + RepoUpdateRequest struct { + ConfigPath *string `json:"config_path,omitempty"` + Active *bool `json:"active,omitempty"` + } ) + +// ListAll returns all repositories. +func (s *ReposService) ListAll(ctx context.Context) ([]*ent.Repo, error) { + // Max value for 'perPage'. + const perPage = 100 + + repos := make([]*ent.Repo, 0) + page := 1 + + for { + rs, err := s.List(ctx, RepoListOptions{ + ListOptions{ + Page: page, + PerPage: perPage, + }, + }) + if err != nil { + return nil, err + } + + repos = append(repos, rs...) + + // Met the end of pages. + if len(rs) < perPage { + break + } + + page = page + 1 + } + + return repos, nil +} + +// List returns repositories which are on the page. +func (s *ReposService) List(ctx context.Context, options RepoListOptions) ([]*ent.Repo, error) { + // Build the query. + vals := url.Values{} + vals.Add("page", strconv.Itoa(options.Page)) + vals.Add("per_page", strconv.Itoa(options.PerPage)) + + req, err := s.client.NewRequest( + "GET", + fmt.Sprintf("api/v1/repos?%s", vals.Encode()), + nil) + if err != nil { + return nil, err + } + + var repos []*ent.Repo + if err := s.client.Do(ctx, req, &repos); err != nil { + return nil, err + } + + return repos, nil +} + +// Get returns the repository. +func (s *ReposService) Get(ctx context.Context, namespace, name string) (*ent.Repo, error) { + req, err := s.client.NewRequest( + "GET", + fmt.Sprintf("api/v1/repos/%s/%s", namespace, name), + nil) + if err != nil { + return nil, err + } + + var repo *ent.Repo + if err := s.client.Do(ctx, req, &repo); err != nil { + return nil, err + } + + return repo, nil +} + +func (s *ReposService) Update(ctx context.Context, namespace, name string, options RepoUpdateRequest) (*ent.Repo, error) { + req, err := s.client.NewRequest( + "PATCH", + fmt.Sprintf("api/v1/repos/%s/%s", namespace, name), + options, + ) + if err != nil { + return nil, err + } + + var repo *ent.Repo + if err := s.client.Do(ctx, req, &repo); err != nil { + return nil, err + } + + return repo, nil +} diff --git a/pkg/api/repo_get.go b/pkg/api/repo_get.go deleted file mode 100644 index de027a4e..00000000 --- a/pkg/api/repo_get.go +++ /dev/null @@ -1,26 +0,0 @@ -package api - -import ( - "context" - "fmt" - - "github.com/gitploy-io/gitploy/model/ent" -) - -// Get returns the repository. -func (s *ReposService) Get(ctx context.Context, namespace, name string) (*ent.Repo, error) { - req, err := s.client.NewRequest( - "GET", - fmt.Sprintf("api/v1/repos/%s/%s", namespace, name), - nil) - if err != nil { - return nil, err - } - - var repo *ent.Repo - if err := s.client.Do(ctx, req, &repo); err != nil { - return nil, err - } - - return repo, nil -} diff --git a/pkg/api/repo_get_test.go b/pkg/api/repo_get_test.go deleted file mode 100644 index babf0521..00000000 --- a/pkg/api/repo_get_test.go +++ /dev/null @@ -1,34 +0,0 @@ -package api - -import ( - "context" - "net/http" - "testing" - - "github.com/gitploy-io/gitploy/model/ent" - "gopkg.in/h2non/gock.v1" -) - -func TestReposService_Get(t *testing.T) { - t.Run("Return the repository.", func(t *testing.T) { - repo := &ent.Repo{ - Namespace: "gitploy-io", - Name: "gitploy", - } - gock.New("https://cloud.gitploy.io"). - Get("/api/v1/repos/gitploy-io/gitploy"). - Reply(200). - JSON(repo) - - c := NewClient("https://cloud.gitploy.io/", http.DefaultClient) - - ret, err := c.Repos.Get(context.Background(), "gitploy-io", "gitploy") - if err != nil { - t.Fatalf("Get returns an error: %s", err) - } - - if !EqualRepo(repo, ret) { - t.Fatalf("Get = %v, wanted %v", ret, repo) - } - }) -} diff --git a/pkg/api/repo_list.go b/pkg/api/repo_list.go deleted file mode 100644 index 216b3c7c..00000000 --- a/pkg/api/repo_list.go +++ /dev/null @@ -1,69 +0,0 @@ -package api - -import ( - "context" - "fmt" - "net/url" - "strconv" - - "github.com/gitploy-io/gitploy/model/ent" -) - -type RepoListOptions struct { - ListOptions -} - -// ListAll returns all repositories. -func (s *ReposService) ListAll(ctx context.Context) ([]*ent.Repo, error) { - // Max value for 'perPage'. - const perPage = 100 - - repos := make([]*ent.Repo, 0) - page := 1 - - for { - rs, err := s.List(ctx, RepoListOptions{ - ListOptions{ - Page: page, - PerPage: perPage, - }, - }) - if err != nil { - return nil, err - } - - repos = append(repos, rs...) - - // Met the end of pages. - if len(rs) < perPage { - break - } - - page = page + 1 - } - - return repos, nil -} - -// List returns repositories which are on the page. -func (s *ReposService) List(ctx context.Context, options RepoListOptions) ([]*ent.Repo, error) { - // Build the query. - vals := url.Values{} - vals.Add("page", strconv.Itoa(options.Page)) - vals.Add("per_page", strconv.Itoa(options.PerPage)) - - req, err := s.client.NewRequest( - "GET", - fmt.Sprintf("api/v1/repos?%s", vals.Encode()), - nil) - if err != nil { - return nil, err - } - - var repos []*ent.Repo - if err := s.client.Do(ctx, req, &repos); err != nil { - return nil, err - } - - return repos, nil -} diff --git a/pkg/api/repo_list_test.go b/pkg/api/repo_list_test.go deleted file mode 100644 index f4bbe044..00000000 --- a/pkg/api/repo_list_test.go +++ /dev/null @@ -1,44 +0,0 @@ -package api - -import ( - "context" - "net/http" - "testing" - - "github.com/gitploy-io/gitploy/model/ent" - "gopkg.in/h2non/gock.v1" -) - -func TestReposService_List(t *testing.T) { - t.Run("Return repositories.", func(t *testing.T) { - repos := []*ent.Repo{ - { - Namespace: "gitploy-io", - Name: "gitploy", - }, - { - Namespace: "gitploy-io", - Name: "website", - }, - } - gock.New("https://cloud.gitploy.io"). - Get("/api/v1/repos"). - Reply(200). - JSON(repos) - - c := NewClient("https://cloud.gitploy.io/", http.DefaultClient) - - ret, err := c.Repos.List(context.Background(), RepoListOptions{ - ListOptions: ListOptions{Page: 1, PerPage: 30}, - }) - if err != nil { - t.Fatalf("List returns an error: %s", err) - } - - for idx := range ret { - if !EqualRepo(repos[idx], ret[idx]) { - t.Fatalf("List = %v, wanted %v", ret, repos) - } - } - }) -} diff --git a/pkg/api/repo_test.go b/pkg/api/repo_test.go new file mode 100644 index 00000000..3f09a603 --- /dev/null +++ b/pkg/api/repo_test.go @@ -0,0 +1,110 @@ +package api + +import ( + "context" + "encoding/json" + "io/ioutil" + "net/http" + "testing" + + "github.com/AlekSi/pointer" + "gopkg.in/h2non/gock.v1" + + "github.com/gitploy-io/gitploy/model/ent" +) + +func EqualRepo(a, b *ent.Repo) bool { + return a.Namespace == b.Namespace && a.Name == b.Name +} + +func TestReposService_List(t *testing.T) { + t.Run("Return repositories.", func(t *testing.T) { + repos := []*ent.Repo{ + { + Namespace: "gitploy-io", + Name: "gitploy", + }, + { + Namespace: "gitploy-io", + Name: "website", + }, + } + gock.New("https://cloud.gitploy.io"). + Get("/api/v1/repos"). + Reply(200). + JSON(repos) + + c := NewClient("https://cloud.gitploy.io/", http.DefaultClient) + + ret, err := c.Repos.List(context.Background(), RepoListOptions{ + ListOptions: ListOptions{Page: 1, PerPage: 30}, + }) + if err != nil { + t.Fatalf("List returns an error: %s", err) + } + + for idx := range ret { + if !EqualRepo(repos[idx], ret[idx]) { + t.Fatalf("List = %v, wanted %v", ret, repos) + } + } + }) +} + +func TestReposService_Get(t *testing.T) { + t.Run("Return the repository.", func(t *testing.T) { + repo := &ent.Repo{ + Namespace: "gitploy-io", + Name: "gitploy", + } + gock.New("https://cloud.gitploy.io"). + Get("/api/v1/repos/gitploy-io/gitploy"). + Reply(200). + JSON(repo) + + c := NewClient("https://cloud.gitploy.io/", http.DefaultClient) + + ret, err := c.Repos.Get(context.Background(), "gitploy-io", "gitploy") + if err != nil { + t.Fatalf("Get returns an error: %s", err) + } + + if !EqualRepo(repo, ret) { + t.Fatalf("Get = %v, wanted %v", ret, repo) + } + }) +} + +func TestReposService_Update(t *testing.T) { + t.Run("Update the 'config_path' field.", func(t *testing.T) { + gock.New("https://cloud.gitploy.io"). + Patch("/api/v1/repos/gitploy-io/gitploy"). + AddMatcher(func(req *http.Request, ereq *gock.Request) (bool, error) { + defer req.Body.Close() + output, _ := ioutil.ReadAll(req.Body) + + b := RepoUpdateRequest{} + if err := json.Unmarshal(output, &b); err != nil { + return false, err + } + + // Verify the field "config_path" in the body. + return *b.ConfigPath == "new_deploy.yml", nil + }). + Reply(200). + JSON(&ent.Repo{ + Namespace: "gitploy-io", + Name: "gitploy", + ConfigPath: "new_deploy.yml", + }) + + c := NewClient("https://cloud.gitploy.io/", http.DefaultClient) + + _, err := c.Repos.Update(context.Background(), "gitploy-io", "gitploy", RepoUpdateRequest{ + ConfigPath: pointer.ToString("new_deploy.yml"), + }) + if err != nil { + t.Fatalf("Update returns an error: %s", err) + } + }) +} diff --git a/pkg/api/repo_update.go b/pkg/api/repo_update.go deleted file mode 100644 index 3de3dd6f..00000000 --- a/pkg/api/repo_update.go +++ /dev/null @@ -1,31 +0,0 @@ -package api - -import ( - "context" - "fmt" - - "github.com/gitploy-io/gitploy/model/ent" -) - -type RepoUpdateRequest struct { - ConfigPath *string `json:"config_path,omitempty"` - Active *bool `json:"active,omitempty"` -} - -func (s *ReposService) Update(ctx context.Context, namespace, name string, options RepoUpdateRequest) (*ent.Repo, error) { - req, err := s.client.NewRequest( - "PATCH", - fmt.Sprintf("api/v1/repos/%s/%s", namespace, name), - options, - ) - if err != nil { - return nil, err - } - - var repo *ent.Repo - if err := s.client.Do(ctx, req, &repo); err != nil { - return nil, err - } - - return repo, nil -} diff --git a/pkg/api/repo_update_test.go b/pkg/api/repo_update_test.go deleted file mode 100644 index 3a0ae0f2..00000000 --- a/pkg/api/repo_update_test.go +++ /dev/null @@ -1,52 +0,0 @@ -package api - -import ( - "context" - "encoding/json" - "io/ioutil" - "net/http" - "testing" - - "gopkg.in/h2non/gock.v1" - - "github.com/AlekSi/pointer" - "github.com/gitploy-io/gitploy/model/ent" -) - -func EqualRepo(a, b *ent.Repo) bool { - return a.Namespace == b.Namespace && a.Name == b.Name -} - -func TestReposService_Update(t *testing.T) { - t.Run("Update the 'config_path' field.", func(t *testing.T) { - gock.New("https://cloud.gitploy.io"). - Patch("/api/v1/repos/gitploy-io/gitploy"). - AddMatcher(func(req *http.Request, ereq *gock.Request) (bool, error) { - defer req.Body.Close() - output, _ := ioutil.ReadAll(req.Body) - - b := RepoUpdateRequest{} - if err := json.Unmarshal(output, &b); err != nil { - return false, err - } - - // Verify the field "config_path" in the body. - return *b.ConfigPath == "new_deploy.yml", nil - }). - Reply(200). - JSON(&ent.Repo{ - Namespace: "gitploy-io", - Name: "gitploy", - ConfigPath: "new_deploy.yml", - }) - - c := NewClient("https://cloud.gitploy.io/", http.DefaultClient) - - _, err := c.Repos.Update(context.Background(), "gitploy-io", "gitploy", RepoUpdateRequest{ - ConfigPath: pointer.ToString("new_deploy.yml"), - }) - if err != nil { - t.Fatalf("Update returns an error: %s", err) - } - }) -}