github.com/google/go-github/v33@v33.0.0/github/repos_deployments_test.go (about) 1 // Copyright 2014 The go-github AUTHORS. All rights reserved. 2 // 3 // Use of this source code is governed by a BSD-style 4 // license that can be found in the LICENSE file. 5 6 package github 7 8 import ( 9 "context" 10 "encoding/json" 11 "fmt" 12 "net/http" 13 "reflect" 14 "strings" 15 "testing" 16 ) 17 18 func TestRepositoriesService_ListDeployments(t *testing.T) { 19 client, mux, _, teardown := setup() 20 defer teardown() 21 22 mux.HandleFunc("/repos/o/r/deployments", func(w http.ResponseWriter, r *http.Request) { 23 testMethod(t, r, "GET") 24 testFormValues(t, r, values{"environment": "test"}) 25 fmt.Fprint(w, `[{"id":1}, {"id":2}]`) 26 }) 27 28 opt := &DeploymentsListOptions{Environment: "test"} 29 deployments, _, err := client.Repositories.ListDeployments(context.Background(), "o", "r", opt) 30 if err != nil { 31 t.Errorf("Repositories.ListDeployments returned error: %v", err) 32 } 33 34 want := []*Deployment{{ID: Int64(1)}, {ID: Int64(2)}} 35 if !reflect.DeepEqual(deployments, want) { 36 t.Errorf("Repositories.ListDeployments returned %+v, want %+v", deployments, want) 37 } 38 } 39 40 func TestRepositoriesService_GetDeployment(t *testing.T) { 41 client, mux, _, teardown := setup() 42 defer teardown() 43 44 mux.HandleFunc("/repos/o/r/deployments/3", func(w http.ResponseWriter, r *http.Request) { 45 testMethod(t, r, "GET") 46 fmt.Fprint(w, `{"id":3}`) 47 }) 48 49 deployment, _, err := client.Repositories.GetDeployment(context.Background(), "o", "r", 3) 50 if err != nil { 51 t.Errorf("Repositories.GetDeployment returned error: %v", err) 52 } 53 54 want := &Deployment{ID: Int64(3)} 55 56 if !reflect.DeepEqual(deployment, want) { 57 t.Errorf("Repositories.GetDeployment returned %+v, want %+v", deployment, want) 58 } 59 } 60 61 func TestRepositoriesService_CreateDeployment(t *testing.T) { 62 client, mux, _, teardown := setup() 63 defer teardown() 64 65 input := &DeploymentRequest{Ref: String("1111"), Task: String("deploy"), TransientEnvironment: Bool(true)} 66 67 mux.HandleFunc("/repos/o/r/deployments", func(w http.ResponseWriter, r *http.Request) { 68 v := new(DeploymentRequest) 69 json.NewDecoder(r.Body).Decode(v) 70 71 testMethod(t, r, "POST") 72 wantAcceptHeaders := []string{mediaTypeDeploymentStatusPreview, mediaTypeExpandDeploymentStatusPreview} 73 testHeader(t, r, "Accept", strings.Join(wantAcceptHeaders, ", ")) 74 if !reflect.DeepEqual(v, input) { 75 t.Errorf("Request body = %+v, want %+v", v, input) 76 } 77 78 fmt.Fprint(w, `{"ref": "1111", "task": "deploy"}`) 79 }) 80 81 deployment, _, err := client.Repositories.CreateDeployment(context.Background(), "o", "r", input) 82 if err != nil { 83 t.Errorf("Repositories.CreateDeployment returned error: %v", err) 84 } 85 86 want := &Deployment{Ref: String("1111"), Task: String("deploy")} 87 if !reflect.DeepEqual(deployment, want) { 88 t.Errorf("Repositories.CreateDeployment returned %+v, want %+v", deployment, want) 89 } 90 } 91 92 func TestRepositoriesService_DeleteDeployment(t *testing.T) { 93 client, mux, _, teardown := setup() 94 defer teardown() 95 96 mux.HandleFunc("/repos/o/r/deployments/1", func(w http.ResponseWriter, r *http.Request) { 97 testMethod(t, r, "DELETE") 98 w.WriteHeader(http.StatusNoContent) 99 }) 100 101 resp, err := client.Repositories.DeleteDeployment(context.Background(), "o", "r", 1) 102 if err != nil { 103 t.Errorf("Repositories.DeleteDeployment returned error: %v", err) 104 } 105 if resp.StatusCode != http.StatusNoContent { 106 t.Error("Repositories.DeleteDeployment should return a 204 status") 107 } 108 109 resp, err = client.Repositories.DeleteDeployment(context.Background(), "o", "r", 2) 110 if err == nil { 111 t.Error("Repositories.DeleteDeployment should return an error") 112 } 113 if resp.StatusCode != http.StatusNotFound { 114 t.Error("Repositories.DeleteDeployment should return a 404 status") 115 } 116 } 117 118 func TestRepositoriesService_ListDeploymentStatuses(t *testing.T) { 119 client, mux, _, teardown := setup() 120 defer teardown() 121 122 wantAcceptHeaders := []string{mediaTypeDeploymentStatusPreview, mediaTypeExpandDeploymentStatusPreview} 123 mux.HandleFunc("/repos/o/r/deployments/1/statuses", func(w http.ResponseWriter, r *http.Request) { 124 testMethod(t, r, "GET") 125 testHeader(t, r, "Accept", strings.Join(wantAcceptHeaders, ", ")) 126 testFormValues(t, r, values{"page": "2"}) 127 fmt.Fprint(w, `[{"id":1}, {"id":2}]`) 128 }) 129 130 opt := &ListOptions{Page: 2} 131 statutses, _, err := client.Repositories.ListDeploymentStatuses(context.Background(), "o", "r", 1, opt) 132 if err != nil { 133 t.Errorf("Repositories.ListDeploymentStatuses returned error: %v", err) 134 } 135 136 want := []*DeploymentStatus{{ID: Int64(1)}, {ID: Int64(2)}} 137 if !reflect.DeepEqual(statutses, want) { 138 t.Errorf("Repositories.ListDeploymentStatuses returned %+v, want %+v", statutses, want) 139 } 140 } 141 142 func TestRepositoriesService_GetDeploymentStatus(t *testing.T) { 143 client, mux, _, teardown := setup() 144 defer teardown() 145 146 wantAcceptHeaders := []string{mediaTypeDeploymentStatusPreview, mediaTypeExpandDeploymentStatusPreview} 147 mux.HandleFunc("/repos/o/r/deployments/3/statuses/4", func(w http.ResponseWriter, r *http.Request) { 148 testMethod(t, r, "GET") 149 testHeader(t, r, "Accept", strings.Join(wantAcceptHeaders, ", ")) 150 fmt.Fprint(w, `{"id":4}`) 151 }) 152 153 deploymentStatus, _, err := client.Repositories.GetDeploymentStatus(context.Background(), "o", "r", 3, 4) 154 if err != nil { 155 t.Errorf("Repositories.GetDeploymentStatus returned error: %v", err) 156 } 157 158 want := &DeploymentStatus{ID: Int64(4)} 159 if !reflect.DeepEqual(deploymentStatus, want) { 160 t.Errorf("Repositories.GetDeploymentStatus returned %+v, want %+v", deploymentStatus, want) 161 } 162 } 163 164 func TestRepositoriesService_CreateDeploymentStatus(t *testing.T) { 165 client, mux, _, teardown := setup() 166 defer teardown() 167 168 input := &DeploymentStatusRequest{State: String("inactive"), Description: String("deploy"), AutoInactive: Bool(false)} 169 170 mux.HandleFunc("/repos/o/r/deployments/1/statuses", func(w http.ResponseWriter, r *http.Request) { 171 v := new(DeploymentStatusRequest) 172 json.NewDecoder(r.Body).Decode(v) 173 174 testMethod(t, r, "POST") 175 wantAcceptHeaders := []string{mediaTypeDeploymentStatusPreview, mediaTypeExpandDeploymentStatusPreview} 176 testHeader(t, r, "Accept", strings.Join(wantAcceptHeaders, ", ")) 177 if !reflect.DeepEqual(v, input) { 178 t.Errorf("Request body = %+v, want %+v", v, input) 179 } 180 181 fmt.Fprint(w, `{"state": "inactive", "description": "deploy"}`) 182 }) 183 184 deploymentStatus, _, err := client.Repositories.CreateDeploymentStatus(context.Background(), "o", "r", 1, input) 185 if err != nil { 186 t.Errorf("Repositories.CreateDeploymentStatus returned error: %v", err) 187 } 188 189 want := &DeploymentStatus{State: String("inactive"), Description: String("deploy")} 190 if !reflect.DeepEqual(deploymentStatus, want) { 191 t.Errorf("Repositories.CreateDeploymentStatus returned %+v, want %+v", deploymentStatus, want) 192 } 193 }