From 33126621c3e84fdea9931067bfa75c8df82e7284 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pablo=20P=C3=A9rez=20Schr=C3=B6der?= Date: Wed, 17 Jun 2020 03:11:25 +0200 Subject: [PATCH] Add DeleteDeployment for Repositories (#1555) Fixes: #1554. --- github/repos_deployments.go | 12 ++++++++++++ github/repos_deployments_test.go | 26 ++++++++++++++++++++++++++ 2 files changed, 38 insertions(+) diff --git a/github/repos_deployments.go b/github/repos_deployments.go index 57de0a22692..3caa9730e8a 100644 --- a/github/repos_deployments.go +++ b/github/repos_deployments.go @@ -129,6 +129,18 @@ func (s *RepositoriesService) CreateDeployment(ctx context.Context, owner, repo return d, resp, nil } +// DeleteDeployment deletes an existing deployment for a repository. +// +// GitHub API docs: https://developer.github.com/v3/repos/deployments/#delete-a-deployment +func (s *RepositoriesService) DeleteDeployment(ctx context.Context, owner, repo string, deploymentID int64) (*Response, error) { + u := fmt.Sprintf("repos/%v/%v/deployments/%v", owner, repo, deploymentID) + req, err := s.client.NewRequest("DELETE", u, nil) + if err != nil { + return nil, err + } + return s.client.Do(ctx, req, nil) +} + // DeploymentStatus represents the status of a // particular deployment. type DeploymentStatus struct { diff --git a/github/repos_deployments_test.go b/github/repos_deployments_test.go index fdbfdd3a9f8..53f8cec56b9 100644 --- a/github/repos_deployments_test.go +++ b/github/repos_deployments_test.go @@ -89,6 +89,32 @@ func TestRepositoriesService_CreateDeployment(t *testing.T) { } } +func TestRepositoriesService_DeleteDeployment(t *testing.T) { + client, mux, _, teardown := setup() + defer teardown() + + mux.HandleFunc("/repos/o/r/deployments/1", func(w http.ResponseWriter, r *http.Request) { + testMethod(t, r, "DELETE") + w.WriteHeader(http.StatusNoContent) + }) + + resp, err := client.Repositories.DeleteDeployment(context.Background(), "o", "r", 1) + if err != nil { + t.Errorf("Repositories.DeleteDeployment returned error: %v", err) + } + if resp.StatusCode != http.StatusNoContent { + t.Error("Repositories.DeleteDeployment should return a 204 status") + } + + resp, err = client.Repositories.DeleteDeployment(context.Background(), "o", "r", 2) + if err == nil { + t.Error("Repositories.DeleteDeployment should return an error") + } + if resp.StatusCode != http.StatusNotFound { + t.Error("Repositories.DeleteDeployment should return a 404 status") + } +} + func TestRepositoriesService_ListDeploymentStatuses(t *testing.T) { client, mux, _, teardown := setup() defer teardown()