Skip to content

Commit b533580

Browse files
authored
Merge pull request #335 from Ethan-622/feature/add-delete-view
Feature/add delete view
2 parents 40455b0 + 1ff53c5 commit b533580

File tree

2 files changed

+94
-0
lines changed

2 files changed

+94
-0
lines changed

jenkins.go

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -560,6 +560,21 @@ func (j *Jenkins) GetAllViews(ctx context.Context) ([]*View, error) {
560560
return views, nil
561561
}
562562

563+
func (j *Jenkins) DeleteView(ctx context.Context, name string) (error) {
564+
endpoint := fmt.Sprintf("/view/%s/doDelete", name)
565+
r, err := j.Requester.Post(ctx, endpoint, nil, nil, nil)
566+
567+
if err != nil {
568+
return err
569+
}
570+
571+
if r.StatusCode == 200 {
572+
return nil
573+
}
574+
return errors.New(strconv.Itoa(r.StatusCode))
575+
}
576+
577+
563578
// Create View
564579
// First Parameter - name of the View
565580
// Second parameter - Type

jenkins_test.go

Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@ package gojenkins
22

33
import (
44
"context"
5+
"net/http"
6+
"net/http/httptest"
57
"os"
68
"testing"
79
"time"
@@ -383,3 +385,80 @@ func getFileAsString(path string) string {
383385

384386
return string(buf)
385387
}
388+
389+
390+
func TestDeleteView(t *testing.T) {
391+
if _, ok := os.LookupEnv(integration_test); !ok {
392+
return
393+
}
394+
tests := []struct {
395+
name string
396+
statusCode int
397+
hasError bool
398+
expectError bool
399+
errorMessage string
400+
}{
401+
{
402+
name: "success - 200",
403+
statusCode: 200,
404+
expectError: false,
405+
},
406+
{
407+
name: "failure - 404",
408+
statusCode: 404,
409+
expectError: true,
410+
errorMessage: "404",
411+
},
412+
{
413+
name: "failure - network error",
414+
hasError: true,
415+
expectError: true,
416+
errorMessage: "network error",
417+
},
418+
}
419+
420+
for _, tt := range tests {
421+
t.Run(tt.name, func(t *testing.T) {
422+
// create mock HTTP server
423+
var ts *httptest.Server
424+
if tt.hasError {
425+
// Simulated network error: server not started, or error returned
426+
ts = httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
427+
}))
428+
ts.Close() // close server
429+
} else {
430+
ts = httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
431+
if r.URL.Path != "/view/test-view/doDelete" {
432+
t.Errorf("expected path /view/test-view/doDelete, got %s", r.URL.Path)
433+
w.WriteHeader(500)
434+
return
435+
}
436+
if r.Method != "POST" {
437+
t.Errorf("expected POST, got %s", r.Method)
438+
w.WriteHeader(500)
439+
return
440+
}
441+
w.WriteHeader(tt.statusCode)
442+
}))
443+
defer ts.Close()
444+
}
445+
446+
// Create a Jenkins instance using the URL of the mock server
447+
ctx := context.Background()
448+
err := jenkins.DeleteView(ctx, "test-view")
449+
450+
if tt.expectError {
451+
if err == nil {
452+
t.Fatal("expected error, got nil")
453+
}
454+
if tt.errorMessage != "" && err.Error() != tt.errorMessage {
455+
t.Errorf("expected error %q, got %q", tt.errorMessage, err.Error())
456+
}
457+
} else {
458+
if err != nil {
459+
t.Fatalf("unexpected error: %v", err)
460+
}
461+
}
462+
})
463+
}
464+
}

0 commit comments

Comments
 (0)