forked from PagerDuty/go-pagerduty
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add support for extensions and extension schemas (PagerDuty#19)
* Add support for extensions and extension schemas * Add tests for extensions * Add extension schema tests
- Loading branch information
Showing
6 changed files
with
350 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,95 @@ | ||
package pagerduty | ||
|
||
import "fmt" | ||
|
||
// ExtensionService handles the communication with extension related methods | ||
// of the PagerDuty API. | ||
type ExtensionService service | ||
|
||
// Extension represents an extension. | ||
type Extension struct { | ||
Extension *Extension `json:"extension,omitempty"` | ||
ID string `json:"id,omitempty"` | ||
Summary string `json:"summary,omitempty"` | ||
Type string `json:"type,omitempty"` | ||
Self string `json:"self,omitempty"` | ||
HTMLURL string `json:"html_url,omitempty"` | ||
Name string `json:"name"` | ||
EndpointURL string `json:"endpoint_url,omitempty"` | ||
ExtensionObjects []*ServiceReference `json:"extension_objects,omitempty"` | ||
ExtensionSchema *ExtensionSchemaReference `json:"extension_schema"` | ||
} | ||
|
||
// ListExtensionsOptions represents options when listing extensions. | ||
type ListExtensionsOptions struct { | ||
ExtensionObjectID string `url:"extension_object_id,omitempty"` | ||
Query string `url:"query,omitempty"` | ||
ExtensionSchemaID string `url:"extension_schema_id,omitempty"` | ||
Include []string `url:"include,omitempty,brackets"` | ||
} | ||
|
||
// ListExtensionsResponse represents a list response of extensions. | ||
type ListExtensionsResponse struct { | ||
Limit int `json:"limit,omitempty"` | ||
Extensions []*Extension `json:"extensions,omitempty"` | ||
More bool `json:"more,omitempty"` | ||
Offset int `json:"offset,omitempty"` | ||
Total int `json:"total,omitempty"` | ||
} | ||
|
||
// List lists existing extensions. | ||
func (s *ExtensionService) List(o *ListExtensionsOptions) (*ListExtensionsResponse, *Response, error) { | ||
u := "/extensions" | ||
v := new(ListExtensionsResponse) | ||
|
||
resp, err := s.client.newRequestDo("GET", u, o, nil, &v) | ||
if err != nil { | ||
return nil, nil, err | ||
} | ||
|
||
return v, resp, nil | ||
} | ||
|
||
// Create creates a new extension. | ||
func (s *ExtensionService) Create(extension *Extension) (*Extension, *Response, error) { | ||
u := "/extensions" | ||
v := new(Extension) | ||
|
||
resp, err := s.client.newRequestDo("POST", u, nil, &Extension{Extension: extension}, v) | ||
if err != nil { | ||
return nil, nil, err | ||
} | ||
|
||
return v.Extension, resp, nil | ||
} | ||
|
||
// Delete removes an existing extension. | ||
func (s *ExtensionService) Delete(id string) (*Response, error) { | ||
u := fmt.Sprintf("/extensions/%s", id) | ||
return s.client.newRequestDo("DELETE", u, nil, nil, nil) | ||
} | ||
|
||
// Get retrieves information about an extension. | ||
func (s *ExtensionService) Get(id string) (*Extension, *Response, error) { | ||
u := fmt.Sprintf("/extensions/%s", id) | ||
v := new(Extension) | ||
|
||
resp, err := s.client.newRequestDo("GET", u, nil, nil, &v) | ||
if err != nil { | ||
return nil, nil, err | ||
} | ||
|
||
return v.Extension, resp, nil | ||
} | ||
|
||
// Update updates an existing extension. | ||
func (s *ExtensionService) Update(id string, extension *Extension) (*Extension, *Response, error) { | ||
u := fmt.Sprintf("/extensions/%s", id) | ||
v := new(Extension) | ||
resp, err := s.client.newRequestDo("PUT", u, nil, &Extension{Extension: extension}, &v) | ||
if err != nil { | ||
return nil, nil, err | ||
} | ||
|
||
return v.Extension, resp, nil | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,60 @@ | ||
package pagerduty | ||
|
||
import "fmt" | ||
|
||
// ExtensionSchemaService handles the communication with extension schemas related methods | ||
// of the PagerDuty API. | ||
type ExtensionSchemaService service | ||
|
||
// ExtensionSchema represents an extension schema. | ||
type ExtensionSchema struct { | ||
ExtensionSchema *ExtensionSchema `json:"extension_schema,omitempty"` | ||
Description string `json:"description,omitempty"` | ||
GuideURL string `json:"guide_url,omitempty"` | ||
HTMLURL string `json:"html_url,omitempty"` | ||
IconURL string `json:"icon_url,omitempty"` | ||
ID string `json:"id,omitempty"` | ||
Key string `json:"key,omitempty"` | ||
Label string `json:"label,omitempty"` | ||
LogoURL string `json:"logo_url,omitempty"` | ||
Self string `json:"self,omitempty"` | ||
SendTypes []string `json:"send_types,omitempty"` | ||
Summary string `json:"summary,omitempty"` | ||
Type string `json:"type,omitempty"` | ||
URL string `json:"url,omitempty"` | ||
} | ||
|
||
// ListExtensionSchemasResponse represents a list response of extension schemas. | ||
type ListExtensionSchemasResponse struct { | ||
ExtensionSchemas []*ExtensionSchema `json:"extension_schemas,omitempty"` | ||
Limit int `json:"limit,omitempty"` | ||
More bool `json:"more,omitempty"` | ||
Offset int `json:"offset,omitempty"` | ||
Total int `json:"total,omitempty"` | ||
} | ||
|
||
// List lists extension schemas. | ||
func (s *ExtensionSchemaService) List() (*ListExtensionSchemasResponse, *Response, error) { | ||
u := "/extension_schemas" | ||
v := new(ListExtensionSchemasResponse) | ||
|
||
resp, err := s.client.newRequestDo("GET", u, nil, nil, &v) | ||
if err != nil { | ||
return nil, nil, err | ||
} | ||
|
||
return v, resp, nil | ||
} | ||
|
||
// Get retrieves information about an extension schema. | ||
func (s *ExtensionSchemaService) Get(id string) (*ExtensionSchema, *Response, error) { | ||
u := fmt.Sprintf("/extension_schemas/%s", id) | ||
v := new(ExtensionSchema) | ||
|
||
resp, err := s.client.newRequestDo("GET", u, nil, nil, &v) | ||
if err != nil { | ||
return nil, nil, err | ||
} | ||
|
||
return v.ExtensionSchema, resp, nil | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,57 @@ | ||
package pagerduty | ||
|
||
import ( | ||
"net/http" | ||
"reflect" | ||
"testing" | ||
) | ||
|
||
func TestExtensionSchemasList(t *testing.T) { | ||
setup() | ||
defer teardown() | ||
|
||
mux.HandleFunc("/extension_schemas", func(w http.ResponseWriter, r *http.Request) { | ||
testMethod(t, r, "GET") | ||
w.Write([]byte(`{"extension_schemas": [{"id": "1"}]}`)) | ||
}) | ||
|
||
resp, _, err := client.ExtensionSchemas.List() | ||
if err != nil { | ||
t.Fatal(err) | ||
} | ||
|
||
want := &ListExtensionSchemasResponse{ | ||
ExtensionSchemas: []*ExtensionSchema{ | ||
{ | ||
ID: "1", | ||
}, | ||
}, | ||
} | ||
|
||
if !reflect.DeepEqual(resp, want) { | ||
t.Errorf("returned \n\n%#v want \n\n%#v", resp, want) | ||
} | ||
} | ||
|
||
func TestExtensionSchemasGet(t *testing.T) { | ||
setup() | ||
defer teardown() | ||
|
||
mux.HandleFunc("/extension_schemas/1", func(w http.ResponseWriter, r *http.Request) { | ||
testMethod(t, r, "GET") | ||
w.Write([]byte(`{"extension_schema": {"id": "1"}}`)) | ||
}) | ||
|
||
resp, _, err := client.ExtensionSchemas.Get("1") | ||
if err != nil { | ||
t.Fatal(err) | ||
} | ||
|
||
want := &ExtensionSchema{ | ||
ID: "1", | ||
} | ||
|
||
if !reflect.DeepEqual(resp, want) { | ||
t.Errorf("returned \n\n%#v want \n\n%#v", resp, want) | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,131 @@ | ||
package pagerduty | ||
|
||
import ( | ||
"encoding/json" | ||
"net/http" | ||
"reflect" | ||
"testing" | ||
) | ||
|
||
func TestExtensionsList(t *testing.T) { | ||
setup() | ||
defer teardown() | ||
|
||
mux.HandleFunc("/extensions", func(w http.ResponseWriter, r *http.Request) { | ||
testMethod(t, r, "GET") | ||
w.Write([]byte(`{"extensions": [{"id": "1"}]}`)) | ||
}) | ||
|
||
resp, _, err := client.Extensions.List(&ListExtensionsOptions{}) | ||
if err != nil { | ||
t.Fatal(err) | ||
} | ||
|
||
want := &ListExtensionsResponse{ | ||
Extensions: []*Extension{ | ||
{ | ||
ID: "1", | ||
}, | ||
}, | ||
} | ||
|
||
if !reflect.DeepEqual(resp, want) { | ||
t.Errorf("returned \n\n%#v want \n\n%#v", resp, want) | ||
} | ||
} | ||
|
||
func TestExtensionsCreate(t *testing.T) { | ||
setup() | ||
defer teardown() | ||
|
||
input := &Extension{Name: "foo"} | ||
|
||
mux.HandleFunc("/extensions", func(w http.ResponseWriter, r *http.Request) { | ||
testMethod(t, r, "POST") | ||
v := new(Extension) | ||
json.NewDecoder(r.Body).Decode(v) | ||
if !reflect.DeepEqual(v.Extension, input) { | ||
t.Errorf("Request body = %+v, want %+v", v, input) | ||
} | ||
w.Write([]byte(`{"extension": {"name": "foo", "id": "1"}}`)) | ||
}) | ||
|
||
resp, _, err := client.Extensions.Create(input) | ||
if err != nil { | ||
t.Fatal(err) | ||
} | ||
|
||
want := &Extension{ | ||
Name: "foo", | ||
ID: "1", | ||
} | ||
|
||
if !reflect.DeepEqual(resp, want) { | ||
t.Errorf("returned \n\n%#v want \n\n%#v", resp, want) | ||
} | ||
} | ||
|
||
func TestExtensionsDelete(t *testing.T) { | ||
setup() | ||
defer teardown() | ||
|
||
mux.HandleFunc("/extensions/1", func(w http.ResponseWriter, r *http.Request) { | ||
testMethod(t, r, "DELETE") | ||
w.WriteHeader(http.StatusNoContent) | ||
}) | ||
|
||
if _, err := client.Extensions.Delete("1"); err != nil { | ||
t.Fatal(err) | ||
} | ||
} | ||
|
||
func TestExtensionsGet(t *testing.T) { | ||
setup() | ||
defer teardown() | ||
|
||
mux.HandleFunc("/extensions/1", func(w http.ResponseWriter, r *http.Request) { | ||
testMethod(t, r, "GET") | ||
w.Write([]byte(`{"extension": {"id": "1"}}`)) | ||
}) | ||
|
||
resp, _, err := client.Extensions.Get("1") | ||
if err != nil { | ||
t.Fatal(err) | ||
} | ||
|
||
want := &Extension{ | ||
ID: "1", | ||
} | ||
|
||
if !reflect.DeepEqual(resp, want) { | ||
t.Errorf("returned \n\n%#v want \n\n%#v", resp, want) | ||
} | ||
} | ||
|
||
func TestExtensionsUpdate(t *testing.T) { | ||
setup() | ||
defer teardown() | ||
|
||
input := &Extension{ | ||
Name: "foo", | ||
} | ||
|
||
mux.HandleFunc("/extensions/1", func(w http.ResponseWriter, r *http.Request) { | ||
testMethod(t, r, "PUT") | ||
w.Write([]byte(`{"extension": {"name": "foo", "id": "1"}}`)) | ||
}) | ||
|
||
resp, _, err := client.Extensions.Update("1", input) | ||
if err != nil { | ||
t.Fatal(err) | ||
} | ||
|
||
want := &Extension{ | ||
Name: "foo", | ||
ID: "1", | ||
} | ||
|
||
if !reflect.DeepEqual(resp, want) { | ||
t.Errorf("returned \n\n%#v want \n\n%#v", resp, want) | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters