mirror of
https://github.com/StackExchange/dnscontrol.git
synced 2025-10-03 02:14:25 +08:00
277 lines
8.5 KiB
Go
277 lines
8.5 KiB
Go
package cloudflare
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"net/http"
|
|
"testing"
|
|
"time"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
)
|
|
|
|
const testPagesProjectName = "page-project"
|
|
|
|
var testCreatedOn, _ = time.Parse(time.RFC3339, "2017-01-01T00:00:00Z")
|
|
|
|
var testPagesDomain = PagesDomain{
|
|
ID: "8232210c-6818-4e34-8d95-cc386874b8d2",
|
|
Name: "example.com",
|
|
Status: "pending",
|
|
VerificationData: VerificationData{
|
|
Status: "active",
|
|
},
|
|
ValidationData: ValidationData{
|
|
Status: "active",
|
|
Method: "http",
|
|
},
|
|
ZoneTag: "023e105f4ecef8ad9ca31a8372d0c353",
|
|
CreatedOn: &testCreatedOn,
|
|
}
|
|
|
|
func TestPages_GetDomains(t *testing.T) {
|
|
setup()
|
|
defer teardown()
|
|
|
|
mux.HandleFunc("/accounts/"+testAccountID+"/pages/projects/"+testPagesProjectName+"/domains", func(w http.ResponseWriter, r *http.Request) {
|
|
assert.Equal(t, http.MethodGet, r.Method, "Expected method 'GET', got %s", r.Method)
|
|
w.Header().Set("content-type", "application/json")
|
|
fmt.Fprint(w, `
|
|
{
|
|
"success": true,
|
|
"errors": [],
|
|
"messages": [],
|
|
"result": [
|
|
{
|
|
"id": "8232210c-6818-4e34-8d95-cc386874b8d2",
|
|
"name": "example.com",
|
|
"status": "pending",
|
|
"verification_data": {
|
|
"status": "active"
|
|
},
|
|
"validation_data": {
|
|
"status": "active",
|
|
"method": "http"
|
|
},
|
|
"zone_tag": "023e105f4ecef8ad9ca31a8372d0c353",
|
|
"created_on": "2017-01-01T00:00:00Z"
|
|
}
|
|
]
|
|
}`)
|
|
})
|
|
|
|
// Make sure missing account ID is thrown
|
|
_, err := client.GetPagesDomains(context.Background(), PagesDomainsParameters{})
|
|
if assert.Error(t, err) {
|
|
assert.Equal(t, ErrMissingAccountID, err)
|
|
}
|
|
|
|
// Make sure missing project name is thrown
|
|
_, err = client.GetPagesDomains(context.Background(), PagesDomainsParameters{AccountID: testAccountID})
|
|
if assert.Error(t, err) {
|
|
assert.Equal(t, ErrMissingProjectName, err)
|
|
}
|
|
|
|
out, err := client.GetPagesDomains(context.Background(), PagesDomainsParameters{AccountID: testAccountID, ProjectName: testPagesProjectName})
|
|
if assert.NoError(t, err) {
|
|
assert.Equal(t, 1, len(out), "Domains length not correct")
|
|
assert.Equal(t, out[0], testPagesDomain, "structs not equal")
|
|
}
|
|
}
|
|
|
|
func TestPages_GetDomain(t *testing.T) {
|
|
setup()
|
|
defer teardown()
|
|
|
|
mux.HandleFunc("/accounts/"+testAccountID+"/pages/projects/"+testPagesProjectName+"/domains/example.com", func(w http.ResponseWriter, r *http.Request) {
|
|
assert.Equal(t, http.MethodGet, r.Method, "Expected method 'GET', got %s", r.Method)
|
|
w.Header().Set("content-type", "application/json")
|
|
fmt.Fprint(w, `
|
|
{
|
|
"success": true,
|
|
"errors": [],
|
|
"messages": [],
|
|
"result": {
|
|
"id": "8232210c-6818-4e34-8d95-cc386874b8d2",
|
|
"name": "example.com",
|
|
"status": "pending",
|
|
"verification_data": {
|
|
"status": "active"
|
|
},
|
|
"validation_data": {
|
|
"status": "active",
|
|
"method": "http"
|
|
},
|
|
"zone_tag": "023e105f4ecef8ad9ca31a8372d0c353",
|
|
"created_on": "2017-01-01T00:00:00Z"
|
|
}
|
|
}`)
|
|
})
|
|
|
|
// Make sure missing account ID is thrown
|
|
_, err := client.GetPagesDomain(context.Background(), PagesDomainParameters{})
|
|
if assert.Error(t, err) {
|
|
assert.Equal(t, ErrMissingAccountID, err)
|
|
}
|
|
|
|
// Make sure missing project name is thrown
|
|
_, err = client.GetPagesDomain(context.Background(), PagesDomainParameters{AccountID: testAccountID})
|
|
if assert.Error(t, err) {
|
|
assert.Equal(t, ErrMissingProjectName, err)
|
|
}
|
|
|
|
// Make sure missing domain is thrown
|
|
_, err = client.GetPagesDomain(context.Background(), PagesDomainParameters{AccountID: testAccountID, ProjectName: testPagesProjectName})
|
|
if assert.Error(t, err) {
|
|
assert.Equal(t, ErrMissingDomain, err)
|
|
}
|
|
|
|
out, err := client.GetPagesDomain(context.Background(), PagesDomainParameters{AccountID: testAccountID, ProjectName: testPagesProjectName, DomainName: "example.com"})
|
|
if assert.NoError(t, err) {
|
|
assert.Equal(t, out, testPagesDomain, "structs not equal")
|
|
}
|
|
}
|
|
|
|
func TestPages_PatchDomain(t *testing.T) {
|
|
setup()
|
|
defer teardown()
|
|
|
|
mux.HandleFunc("/accounts/"+testAccountID+"/pages/projects/"+testPagesProjectName+"/domains/example.com", func(w http.ResponseWriter, r *http.Request) {
|
|
assert.Equal(t, http.MethodPatch, r.Method, "Expected method 'PATCH', got %s", r.Method)
|
|
w.Header().Set("content-type", "application/json")
|
|
fmt.Fprint(w, `
|
|
{
|
|
"success": true,
|
|
"errors": [],
|
|
"messages": [],
|
|
"result": {
|
|
"id": "8232210c-6818-4e34-8d95-cc386874b8d2",
|
|
"name": "example.com",
|
|
"status": "pending",
|
|
"verification_data": {
|
|
"status": "active"
|
|
},
|
|
"validation_data": {
|
|
"status": "active",
|
|
"method": "http"
|
|
},
|
|
"zone_tag": "023e105f4ecef8ad9ca31a8372d0c353",
|
|
"created_on": "2017-01-01T00:00:00Z"
|
|
}
|
|
}`)
|
|
})
|
|
|
|
// Make sure missing account ID is thrown
|
|
_, err := client.PagesPatchDomain(context.Background(), PagesDomainParameters{})
|
|
if assert.Error(t, err) {
|
|
assert.Equal(t, ErrMissingAccountID, err)
|
|
}
|
|
|
|
// Make sure missing project name is thrown
|
|
_, err = client.PagesPatchDomain(context.Background(), PagesDomainParameters{AccountID: testAccountID})
|
|
if assert.Error(t, err) {
|
|
assert.Equal(t, ErrMissingProjectName, err)
|
|
}
|
|
|
|
// Make sure missing domain is thrown
|
|
_, err = client.PagesPatchDomain(context.Background(), PagesDomainParameters{AccountID: testAccountID, ProjectName: testPagesProjectName})
|
|
if assert.Error(t, err) {
|
|
assert.Equal(t, ErrMissingDomain, err)
|
|
}
|
|
|
|
out, err := client.PagesPatchDomain(context.Background(), PagesDomainParameters{AccountID: testAccountID, ProjectName: testPagesProjectName, DomainName: "example.com"})
|
|
if assert.NoError(t, err) {
|
|
assert.Equal(t, out, testPagesDomain, "structs not equal")
|
|
}
|
|
}
|
|
|
|
func TestPages_AddDomain(t *testing.T) {
|
|
setup()
|
|
defer teardown()
|
|
|
|
mux.HandleFunc("/accounts/"+testAccountID+"/pages/projects/"+testPagesProjectName+"/domains", func(w http.ResponseWriter, r *http.Request) {
|
|
assert.Equal(t, http.MethodPost, r.Method, "Expected method 'POST', got %s", r.Method)
|
|
w.Header().Set("content-type", "application/json")
|
|
fmt.Fprint(w, `
|
|
{
|
|
"success": true,
|
|
"errors": [],
|
|
"messages": [],
|
|
"result": {
|
|
"id": "8232210c-6818-4e34-8d95-cc386874b8d2",
|
|
"name": "example.com",
|
|
"status": "pending",
|
|
"verification_data": {
|
|
"status": "active"
|
|
},
|
|
"validation_data": {
|
|
"status": "active",
|
|
"method": "http"
|
|
},
|
|
"zone_tag": "023e105f4ecef8ad9ca31a8372d0c353",
|
|
"created_on": "2017-01-01T00:00:00Z"
|
|
}
|
|
}`)
|
|
})
|
|
|
|
// Make sure missing account ID is thrown
|
|
_, err := client.PagesAddDomain(context.Background(), PagesDomainParameters{})
|
|
if assert.Error(t, err) {
|
|
assert.Equal(t, ErrMissingAccountID, err)
|
|
}
|
|
|
|
// Make sure missing project name is thrown
|
|
_, err = client.PagesAddDomain(context.Background(), PagesDomainParameters{AccountID: testAccountID})
|
|
if assert.Error(t, err) {
|
|
assert.Equal(t, ErrMissingProjectName, err)
|
|
}
|
|
|
|
// Make sure missing domain is thrown
|
|
_, err = client.PagesAddDomain(context.Background(), PagesDomainParameters{AccountID: testAccountID, ProjectName: testPagesProjectName})
|
|
if assert.Error(t, err) {
|
|
assert.Equal(t, ErrMissingDomain, err)
|
|
}
|
|
|
|
out, err := client.PagesAddDomain(context.Background(), PagesDomainParameters{AccountID: testAccountID, ProjectName: testPagesProjectName, DomainName: "example.com"})
|
|
if assert.NoError(t, err) {
|
|
assert.Equal(t, out, testPagesDomain, "structs not equal")
|
|
}
|
|
}
|
|
|
|
func TestPages_DeleteDomain(t *testing.T) {
|
|
setup()
|
|
defer teardown()
|
|
|
|
mux.HandleFunc("/accounts/"+testAccountID+"/pages/projects/"+testPagesProjectName+"/domains/example.com", func(w http.ResponseWriter, r *http.Request) {
|
|
assert.Equal(t, http.MethodDelete, r.Method, "Expected method 'DELETE', got %s", r.Method)
|
|
w.Header().Set("content-type", "application/json")
|
|
fmt.Fprint(w, `
|
|
{
|
|
"success": true,
|
|
"errors": [],
|
|
"messages": [],
|
|
"result": null
|
|
}`)
|
|
})
|
|
|
|
// Make sure missing account ID is thrown
|
|
err := client.PagesDeleteDomain(context.Background(), PagesDomainParameters{})
|
|
if assert.Error(t, err) {
|
|
assert.Equal(t, ErrMissingAccountID, err)
|
|
}
|
|
|
|
// Make sure missing project name is thrown
|
|
err = client.PagesDeleteDomain(context.Background(), PagesDomainParameters{AccountID: testAccountID})
|
|
if assert.Error(t, err) {
|
|
assert.Equal(t, ErrMissingProjectName, err)
|
|
}
|
|
|
|
// Make sure missing domain is thrown
|
|
err = client.PagesDeleteDomain(context.Background(), PagesDomainParameters{AccountID: testAccountID, ProjectName: testPagesProjectName})
|
|
if assert.Error(t, err) {
|
|
assert.Equal(t, ErrMissingDomain, err)
|
|
}
|
|
|
|
err = client.PagesDeleteDomain(context.Background(), PagesDomainParameters{AccountID: testAccountID, ProjectName: testPagesProjectName, DomainName: "example.com"})
|
|
assert.NoError(t, err)
|
|
}
|