@@ -153,3 +153,94 @@ func Test_pipelineRestClient_CreatePipeline(t *testing.T) {
153153 })
154154 }
155155}
156+
157+ func Test_pipelineRestClient_GetPipelineDefinition (t * testing.T ) {
158+ const (
159+ projectID = "test-project-id"
160+ pipelineDefinitionID = "test-pipeline-definition-id"
161+ )
162+ tests := []struct {
163+ name string
164+ options pipeline.GetPipelineDefinitionOptions
165+ handler http.HandlerFunc
166+ want * pipeline.PipelineDefinition
167+ wantErr bool
168+ }{
169+ {
170+ name : "Should handle a successful request with GetPipelineDefinition" ,
171+ options : pipeline.GetPipelineDefinitionOptions {
172+ ProjectID : projectID ,
173+ PipelineDefinitionID : pipelineDefinitionID ,
174+ },
175+ handler : func (w http.ResponseWriter , r * http.Request ) {
176+ assert .Equal (t , r .Header .Get ("circle-token" ), "token" )
177+ assert .Equal (t , r .Header .Get ("accept" ), "application/json" )
178+ assert .Equal (t , r .Header .Get ("user-agent" ), version .UserAgent ())
179+
180+ assert .Equal (t , r .Method , "GET" )
181+ assert .Equal (t , r .URL .Path , fmt .Sprintf ("/api/v2/projects/%s/pipeline-definitions/%s" , projectID , pipelineDefinitionID ))
182+
183+ w .Header ().Set ("Content-Type" , "application/json" )
184+ w .WriteHeader (http .StatusOK )
185+ _ , err := w .Write ([]byte (`
186+ {
187+ "id": "123",
188+ "name": "test-pipeline",
189+ "description": "test-description",
190+ "created_at": "2024-01-01T00:00:00Z",
191+ "checkout_source": {
192+ "provider": "github_app",
193+ "repo": {
194+ "external_id": "test-repo-id",
195+ "full_name": "test-repo"
196+ }
197+ },
198+ "config_source": {
199+ "provider": "github_app",
200+ "repo": {
201+ "external_id": "test-config-repo-id",
202+ "full_name": "test-config-repo"
203+ }
204+ }
205+ }` ))
206+ assert .NilError (t , err )
207+ },
208+ want : & pipeline.PipelineDefinition {
209+ ConfigSourceId : "test-config-repo-id" ,
210+ CheckoutSourceId : "test-repo-id" ,
211+ },
212+ },
213+ {
214+ name : "Should handle an error request with GetPipelineDefinition" ,
215+ options : pipeline.GetPipelineDefinitionOptions {
216+ ProjectID : projectID ,
217+ PipelineDefinitionID : pipelineDefinitionID ,
218+ },
219+ handler : func (w http.ResponseWriter , _ * http.Request ) {
220+ w .Header ().Set ("content-type" , "application/json" )
221+ w .WriteHeader (http .StatusInternalServerError )
222+ _ , err := w .Write ([]byte (`{"message": "error"}` ))
223+ assert .NilError (t , err )
224+ },
225+ wantErr : true ,
226+ },
227+ }
228+ for _ , tt := range tests {
229+ t .Run (tt .name , func (t * testing.T ) {
230+ server := httptest .NewServer (tt .handler )
231+ defer server .Close ()
232+
233+ p , err := getPipelineRestClient (server )
234+ assert .NilError (t , err )
235+
236+ got , err := p .GetPipelineDefinition (tt .options )
237+ if (err != nil ) != tt .wantErr {
238+ t .Errorf ("pipelineRestClient.GetPipelineDefinition() error = %v, wantErr %v" , err , tt .wantErr )
239+ return
240+ }
241+ if ! reflect .DeepEqual (got , tt .want ) {
242+ t .Errorf ("pipelineRestClient.GetPipelineDefinition() = %v, want %v" , got , tt .want )
243+ }
244+ })
245+ }
246+ }
0 commit comments