blob: daa4c6cdc7677e66dd45ac0e096a3bb7a80c8587 [file] [log] [blame]
// +build fixtures
package webhooks
import (
"fmt"
"net/http"
"testing"
"github.com/rackspace/gophercloud"
th "github.com/rackspace/gophercloud/testhelper"
"github.com/rackspace/gophercloud/testhelper/client"
)
// WebhookListBody contains the canned body of a webhooks.List response.
const WebhookListBody = `
{
"webhooks": [
{
"id": "2bd1822c-58c5-49fd-8b3d-ed44781a58d1",
"name": "first hook",
"links": [
{
"href": "https://dfw.autoscale.api.rackspacecloud.com/v1.0/123456/groups/60b15dad-5ea1-43fa-9a12-a1d737b4da07/policies/2b48d247-0282-4b9d-8775-5c4b67e8e649/webhooks/2bd1822c-58c5-49fd-8b3d-ed44781a58d1/",
"rel": "self"
},
{
"href": "https://dfw.autoscale.api.rackspacecloud.com/v1.0/execute/1/714c1c17c5e6ea5ef1e710d5ccc62e492575bab5216184d4c27dc0164db1bc06/",
"rel": "capability"
}
],
"metadata": {}
},
{
"id": "76711c36-dfbe-4f5e-bea6-cded99690515",
"name": "second hook",
"links": [
{
"href": "https://dfw.autoscale.api.rackspacecloud.com/v1.0/123456/groups/60b15dad-5ea1-43fa-9a12-a1d737b4da07/policies/2b48d247-0282-4b9d-8775-5c4b67e8e649/webhooks/76711c36-dfbe-4f5e-bea6-cded99690515/",
"rel": "self"
},
{
"href": "https://dfw.autoscale.api.rackspacecloud.com/v1.0/execute/1/982e24858723f9e8bc2afea42a73a3c357c8f518857735400a7f7d8b3f14ccdb/",
"rel": "capability"
}
],
"metadata": {
"notes": "a note about this webhook"
}
}
],
"webhooks_links": []
}
`
// WebhookCreateBody contains the canned body of a webhooks.Create response.
const WebhookCreateBody = WebhookListBody
// WebhookCreateRequest contains the canned body of a webhooks.Create request.
const WebhookCreateRequest = `
[
{
"name": "first hook"
},
{
"name": "second hook",
"metadata": {
"notes": "a note about this webhook"
}
}
]
`
// WebhookGetBody contains the canned body of a webhooks.Get response.
const WebhookGetBody = `
{
"webhook": {
"id": "2bd1822c-58c5-49fd-8b3d-ed44781a58d1",
"name": "first hook",
"links": [
{
"href": "https://dfw.autoscale.api.rackspacecloud.com/v1.0/123456/groups/60b15dad-5ea1-43fa-9a12-a1d737b4da07/policies/2b48d247-0282-4b9d-8775-5c4b67e8e649/webhooks/2bd1822c-58c5-49fd-8b3d-ed44781a58d1/",
"rel": "self"
},
{
"href": "https://dfw.autoscale.api.rackspacecloud.com/v1.0/execute/1/714c1c17c5e6ea5ef1e710d5ccc62e492575bab5216184d4c27dc0164db1bc06/",
"rel": "capability"
}
],
"metadata": {}
}
}
`
// WebhookUpdateRequest contains the canned body of a webhooks.Update request.
const WebhookUpdateRequest = `
{
"name": "updated hook",
"metadata": {
"new-key": "some data"
}
}
`
var (
// FirstWebhook is a Webhook corresponding to the first result in WebhookListBody.
FirstWebhook = Webhook{
ID: "2bd1822c-58c5-49fd-8b3d-ed44781a58d1",
Name: "first hook",
Links: []gophercloud.Link{
{
Href: "https://dfw.autoscale.api.rackspacecloud.com/v1.0/123456/groups/60b15dad-5ea1-43fa-9a12-a1d737b4da07/policies/2b48d247-0282-4b9d-8775-5c4b67e8e649/webhooks/2bd1822c-58c5-49fd-8b3d-ed44781a58d1/",
Rel: "self",
},
{
Href: "https://dfw.autoscale.api.rackspacecloud.com/v1.0/execute/1/714c1c17c5e6ea5ef1e710d5ccc62e492575bab5216184d4c27dc0164db1bc06/",
Rel: "capability",
},
},
Metadata: map[string]string{},
}
// SecondWebhook is a Webhook corresponding to the second result in WebhookListBody.
SecondWebhook = Webhook{
ID: "76711c36-dfbe-4f5e-bea6-cded99690515",
Name: "second hook",
Links: []gophercloud.Link{
{
Href: "https://dfw.autoscale.api.rackspacecloud.com/v1.0/123456/groups/60b15dad-5ea1-43fa-9a12-a1d737b4da07/policies/2b48d247-0282-4b9d-8775-5c4b67e8e649/webhooks/76711c36-dfbe-4f5e-bea6-cded99690515/",
Rel: "self",
},
{
Href: "https://dfw.autoscale.api.rackspacecloud.com/v1.0/execute/1/982e24858723f9e8bc2afea42a73a3c357c8f518857735400a7f7d8b3f14ccdb/",
Rel: "capability",
},
},
Metadata: map[string]string{
"notes": "a note about this webhook",
},
}
)
// HandleWebhookListSuccessfully sets up the test server to respond to a webhooks List request.
func HandleWebhookListSuccessfully(t *testing.T) {
path := "/groups/10eb3219-1b12-4b34-b1e4-e10ee4f24c65/policies/2b48d247-0282-4b9d-8775-5c4b67e8e649/webhooks"
th.Mux.HandleFunc(path, func(w http.ResponseWriter, r *http.Request) {
th.TestMethod(t, r, "GET")
th.TestHeader(t, r, "X-Auth-Token", client.TokenID)
w.Header().Add("Content-Type", "application/json")
fmt.Fprintf(w, WebhookListBody)
})
}
// HandleWebhookCreateSuccessfully sets up the test server to respond to a webhooks Create request.
func HandleWebhookCreateSuccessfully(t *testing.T) {
path := "/groups/10eb3219-1b12-4b34-b1e4-e10ee4f24c65/policies/2b48d247-0282-4b9d-8775-5c4b67e8e649/webhooks"
th.Mux.HandleFunc(path, func(w http.ResponseWriter, r *http.Request) {
th.TestMethod(t, r, "POST")
th.TestHeader(t, r, "X-Auth-Token", client.TokenID)
th.TestHeader(t, r, "Content-Type", "application/json")
th.TestHeader(t, r, "Accept", "application/json")
th.TestJSONRequest(t, r, WebhookCreateRequest)
w.Header().Add("Content-Type", "application/json")
w.WriteHeader(http.StatusCreated)
fmt.Fprintf(w, WebhookCreateBody)
})
}
// HandleWebhookGetSuccessfully sets up the test server to respond to a webhooks Get request.
func HandleWebhookGetSuccessfully(t *testing.T) {
groupID := "10eb3219-1b12-4b34-b1e4-e10ee4f24c65"
policyID := "2b48d247-0282-4b9d-8775-5c4b67e8e649"
webhookID := "2bd1822c-58c5-49fd-8b3d-ed44781a58d1"
path := fmt.Sprintf("/groups/%s/policies/%s/webhooks/%s", groupID, policyID, webhookID)
th.Mux.HandleFunc(path, func(w http.ResponseWriter, r *http.Request) {
th.TestMethod(t, r, "GET")
th.TestHeader(t, r, "X-Auth-Token", client.TokenID)
w.Header().Add("Content-Type", "application/json")
fmt.Fprintf(w, WebhookGetBody)
})
}
// HandleWebhookUpdateSuccessfully sets up the test server to respond to a webhooks Update request.
func HandleWebhookUpdateSuccessfully(t *testing.T) {
groupID := "10eb3219-1b12-4b34-b1e4-e10ee4f24c65"
policyID := "2b48d247-0282-4b9d-8775-5c4b67e8e649"
webhookID := "2bd1822c-58c5-49fd-8b3d-ed44781a58d1"
path := fmt.Sprintf("/groups/%s/policies/%s/webhooks/%s", groupID, policyID, webhookID)
th.Mux.HandleFunc(path, func(w http.ResponseWriter, r *http.Request) {
th.TestMethod(t, r, "PUT")
th.TestHeader(t, r, "X-Auth-Token", client.TokenID)
th.TestJSONRequest(t, r, WebhookUpdateRequest)
w.WriteHeader(http.StatusNoContent)
})
}
// HandleWebhookDeleteSuccessfully sets up the test server to respond to a webhooks Delete request.
func HandleWebhookDeleteSuccessfully(t *testing.T) {
groupID := "10eb3219-1b12-4b34-b1e4-e10ee4f24c65"
policyID := "2b48d247-0282-4b9d-8775-5c4b67e8e649"
webhookID := "2bd1822c-58c5-49fd-8b3d-ed44781a58d1"
path := fmt.Sprintf("/groups/%s/policies/%s/webhooks/%s", groupID, policyID, webhookID)
th.Mux.HandleFunc(path, func(w http.ResponseWriter, r *http.Request) {
th.TestMethod(t, r, "DELETE")
th.TestHeader(t, r, "X-Auth-Token", client.TokenID)
w.WriteHeader(http.StatusNoContent)
})
}