131 lines
3 KiB
Go
131 lines
3 KiB
Go
package internal
|
|
|
|
import (
|
|
"context"
|
|
"net/http"
|
|
"net/http/httptest"
|
|
"net/url"
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func setupTest(t *testing.T) (*Client, *http.ServeMux) {
|
|
t.Helper()
|
|
|
|
mux := http.NewServeMux()
|
|
server := httptest.NewServer(mux)
|
|
t.Cleanup(server.Close)
|
|
|
|
client := NewClient(context.Background(), "STACK_ID", "CLIENT_ID", "CLIENT_SECRET")
|
|
client.httpClient = server.Client()
|
|
client.baseURL, _ = url.Parse(server.URL + "/")
|
|
|
|
return client, mux
|
|
}
|
|
|
|
func TestClient_GetZoneRecords(t *testing.T) {
|
|
client, mux := setupTest(t)
|
|
|
|
mux.HandleFunc("/STACK_ID/zones/A/records", func(w http.ResponseWriter, _ *http.Request) {
|
|
content := `
|
|
{
|
|
"records": [
|
|
{"id":"1","name":"foo1","type":"TXT","ttl":120,"data":"txtTXTtxt"},
|
|
{"id":"2","name":"foo2","type":"TXT","ttl":121,"data":"TXTtxtTXT"}
|
|
]
|
|
}`
|
|
|
|
_, err := w.Write([]byte(content))
|
|
if err != nil {
|
|
http.Error(w, err.Error(), http.StatusInternalServerError)
|
|
return
|
|
}
|
|
})
|
|
|
|
records, err := client.GetZoneRecords(context.Background(), "foo1", &Zone{ID: "A", Domain: "test"})
|
|
require.NoError(t, err)
|
|
|
|
expected := []Record{
|
|
{ID: "1", Name: "foo1", Type: "TXT", TTL: 120, Data: "txtTXTtxt"},
|
|
{ID: "2", Name: "foo2", Type: "TXT", TTL: 121, Data: "TXTtxtTXT"},
|
|
}
|
|
|
|
assert.Equal(t, expected, records)
|
|
}
|
|
|
|
func TestClient_GetZoneRecords_apiError(t *testing.T) {
|
|
client, mux := setupTest(t)
|
|
|
|
mux.HandleFunc("/STACK_ID/zones/A/records", func(w http.ResponseWriter, _ *http.Request) {
|
|
content := `
|
|
{
|
|
"code": 401,
|
|
"error": "an unauthorized request is attempted."
|
|
}`
|
|
|
|
w.WriteHeader(http.StatusUnauthorized)
|
|
_, err := w.Write([]byte(content))
|
|
if err != nil {
|
|
http.Error(w, err.Error(), http.StatusInternalServerError)
|
|
return
|
|
}
|
|
})
|
|
|
|
_, err := client.GetZoneRecords(context.Background(), "foo1", &Zone{ID: "A", Domain: "test"})
|
|
|
|
expected := &ErrorResponse{Code: 401, Message: "an unauthorized request is attempted."}
|
|
assert.Equal(t, expected, err)
|
|
}
|
|
|
|
func TestClient_GetZones(t *testing.T) {
|
|
client, mux := setupTest(t)
|
|
|
|
mux.HandleFunc("/STACK_ID/zones", func(w http.ResponseWriter, _ *http.Request) {
|
|
content := `
|
|
{
|
|
"pageInfo": {
|
|
"totalCount": "5",
|
|
"hasPreviousPage": false,
|
|
"hasNextPage": false,
|
|
"startCursor": "1",
|
|
"endCursor": "1"
|
|
},
|
|
"zones": [
|
|
{
|
|
"stackId": "my_stack",
|
|
"accountId": "my_account",
|
|
"id": "A",
|
|
"domain": "foo.com",
|
|
"version": "1",
|
|
"labels": {
|
|
"property1": "val1",
|
|
"property2": "val2"
|
|
},
|
|
"created": "2018-10-07T02:31:49Z",
|
|
"updated": "2018-10-07T02:31:49Z",
|
|
"nameservers": [
|
|
"1.1.1.1"
|
|
],
|
|
"verified": "2018-10-07T02:31:49Z",
|
|
"status": "ACTIVE",
|
|
"disabled": false
|
|
}
|
|
]
|
|
}`
|
|
|
|
_, err := w.Write([]byte(content))
|
|
if err != nil {
|
|
http.Error(w, err.Error(), http.StatusInternalServerError)
|
|
return
|
|
}
|
|
})
|
|
|
|
zone, err := client.GetZones(context.Background(), "sub.foo.com")
|
|
require.NoError(t, err)
|
|
|
|
expected := &Zone{ID: "A", Domain: "foo.com"}
|
|
|
|
assert.Equal(t, expected, zone)
|
|
}
|