From 2a4a5647b0b30387a7307ec957bd0f22085af1c6 Mon Sep 17 00:00:00 2001 From: Chris Joyce Date: Wed, 1 Apr 2020 16:12:00 +1000 Subject: [PATCH 1/2] Added update ticket --- zendesk/ticket.go | 22 ++++++++++++++++++++++ zendesk/ticket_test.go | 30 ++++++++++++++++++++++++++++++ 2 files changed, 52 insertions(+) diff --git a/zendesk/ticket.go b/zendesk/ticket.go index ff751639..95265d5a 100644 --- a/zendesk/ticket.go +++ b/zendesk/ticket.go @@ -227,3 +227,25 @@ func (z *Client) CreateTicket(ctx context.Context, ticket Ticket) (Ticket, error } return result.Ticket, nil } + +// UpdateTicket updates the specified ticket +// +// ref: https://developer.zendesk.com/rest_api/docs/support/tickets#update-ticket +func (z *Client) UpdateTicket(ctx context.Context, id int64, ticket Ticket) (Ticket, error) { + var data, result struct { + Ticket Ticket `json:"ticket"` + } + + data.Ticket = ticket + body, err := z.put(ctx, fmt.Sprintf("/tickets/%d.json", id), data) + if err != nil { + return Ticket{}, err + } + + err = json.Unmarshal(body, &result) + if err != nil { + return Ticket{}, err + } + + return result.Ticket, nil +} diff --git a/zendesk/ticket_test.go b/zendesk/ticket_test.go index 2bff88e4..e52be76a 100644 --- a/zendesk/ticket_test.go +++ b/zendesk/ticket_test.go @@ -4,6 +4,7 @@ import ( "context" "encoding/json" "net/http" + "net/http/httptest" "sort" "testing" ) @@ -163,3 +164,32 @@ func TestCreateTicket(t *testing.T) { t.Fatalf("Returned ticket does not have the expected ID %d. Ticket id is %d", expectedID, ticket.ID) } } + +func TestUpdateTicket(t *testing.T) { + mockAPI := newMockAPIWithStatus(http.MethodPut, "ticket.json", http.StatusOK) + client := newTestClient(mockAPI) + defer mockAPI.Close() + + trg, err := client.UpdateTicket(ctx, 2, Ticket{}) + if err != nil { + t.Fatalf("Failed to get ticket: %s", err) + } + + expectedID := int64(2) + if trg.ID != expectedID { + t.Fatalf("Returned ticket does not have the expected ID %d. Ticket id is %d", expectedID, trg.ID) + } +} + +func TestUpdateTicketFailure(t *testing.T) { + mockAPI := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + w.WriteHeader(http.StatusInternalServerError) + w.Write(nil) + })) + + c := newTestClient(mockAPI) + _, err := c.UpdateTicket(ctx, 360005657120, Ticket{}) + if err == nil { + t.Fatal("Client did not return error when api failed") + } +} From 95529a63334daaa6db467501605a5e1e2d216106 Mon Sep 17 00:00:00 2001 From: Chris Joyce Date: Wed, 1 Apr 2020 16:27:04 +1000 Subject: [PATCH 2/2] Added update ticket --- zendesk/ticket.go | 24 ++++++++++++++++++++++++ zendesk/ticket_test.go | 30 ++++++++++++++++++++++++++++++ 2 files changed, 54 insertions(+) diff --git a/zendesk/ticket.go b/zendesk/ticket.go index ff751639..108604bc 100644 --- a/zendesk/ticket.go +++ b/zendesk/ticket.go @@ -227,3 +227,27 @@ func (z *Client) CreateTicket(ctx context.Context, ticket Ticket) (Ticket, error } return result.Ticket, nil } + +// UpdateTicket updates the specified ticket +// +// ref: https://developer.zendesk.com/rest_api/docs/support/tickets#update-ticket +func (z *Client) UpdateTicket(ctx context.Context, id int64, ticket Ticket) (Ticket, error) { + var data, result struct { + Ticket Ticket `json:"ticket"` + } + + data.Ticket = ticket + body, err := z.put(ctx, fmt.Sprintf("/tickets/%d.json", id), data) + + if err != nil { + return Ticket{}, err + } + + err = json.Unmarshal(body, &result) + + if err != nil { + return Ticket{}, err + } + + return result.Ticket, nil +} diff --git a/zendesk/ticket_test.go b/zendesk/ticket_test.go index 2bff88e4..e52be76a 100644 --- a/zendesk/ticket_test.go +++ b/zendesk/ticket_test.go @@ -4,6 +4,7 @@ import ( "context" "encoding/json" "net/http" + "net/http/httptest" "sort" "testing" ) @@ -163,3 +164,32 @@ func TestCreateTicket(t *testing.T) { t.Fatalf("Returned ticket does not have the expected ID %d. Ticket id is %d", expectedID, ticket.ID) } } + +func TestUpdateTicket(t *testing.T) { + mockAPI := newMockAPIWithStatus(http.MethodPut, "ticket.json", http.StatusOK) + client := newTestClient(mockAPI) + defer mockAPI.Close() + + trg, err := client.UpdateTicket(ctx, 2, Ticket{}) + if err != nil { + t.Fatalf("Failed to get ticket: %s", err) + } + + expectedID := int64(2) + if trg.ID != expectedID { + t.Fatalf("Returned ticket does not have the expected ID %d. Ticket id is %d", expectedID, trg.ID) + } +} + +func TestUpdateTicketFailure(t *testing.T) { + mockAPI := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + w.WriteHeader(http.StatusInternalServerError) + w.Write(nil) + })) + + c := newTestClient(mockAPI) + _, err := c.UpdateTicket(ctx, 360005657120, Ticket{}) + if err == nil { + t.Fatal("Client did not return error when api failed") + } +}