mirror of
https://github.com/StackExchange/dnscontrol.git
synced 2024-09-20 14:56:20 +08:00
7fd6a74e0c
Co-authored-by: Josh Zhang <jzhang1@stackoverflow.com>
352 lines
9.4 KiB
Go
352 lines
9.4 KiB
Go
package cloudflare
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"net/http"
|
|
"testing"
|
|
"time"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
)
|
|
|
|
var timestamp, _ = time.Parse(time.RFC3339Nano, "2014-01-01T05:20:00.12345Z")
|
|
var expectedCustomPage = CustomPage{
|
|
ID: "basic_challenge",
|
|
CreatedOn: timestamp,
|
|
ModifiedOn: timestamp,
|
|
URL: "http://www.example.com",
|
|
State: "default",
|
|
RequiredTokens: []string{"::CAPTCHA_BOX::"},
|
|
PreviewTarget: "preview:target",
|
|
Description: "Basic challenge",
|
|
}
|
|
var updatedCustomPage = CustomPage{
|
|
ID: "basic_challenge",
|
|
CreatedOn: timestamp,
|
|
ModifiedOn: timestamp,
|
|
URL: "https://mytestexample.com",
|
|
State: "customized",
|
|
RequiredTokens: []string{"::CAPTCHA_BOX::"},
|
|
PreviewTarget: "preview:target",
|
|
Description: "Basic challenge",
|
|
}
|
|
var defaultCustomPage = CustomPage{
|
|
ID: "basic_challenge",
|
|
CreatedOn: timestamp,
|
|
ModifiedOn: timestamp,
|
|
URL: nil,
|
|
State: "default",
|
|
RequiredTokens: []string{"::CAPTCHA_BOX::"},
|
|
PreviewTarget: "preview:target",
|
|
Description: "Basic challenge",
|
|
}
|
|
|
|
func TestCustomPagesWithoutZoneIDOrAccountID(t *testing.T) {
|
|
_, err := client.CustomPages(context.Background(), &CustomPageOptions{})
|
|
assert.EqualError(t, err, "either account ID or zone ID must be provided")
|
|
}
|
|
|
|
func TestCustomPagesWithZoneIDAndAccountID(t *testing.T) {
|
|
_, err := client.CustomPages(context.Background(), &CustomPageOptions{ZoneID: "abc123", AccountID: "321cba"})
|
|
assert.EqualError(t, err, "account ID and zone ID are mutually exclusive")
|
|
}
|
|
|
|
func TestCustomPagesForZone(t *testing.T) {
|
|
setup()
|
|
defer teardown()
|
|
|
|
handler := 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.Fprintf(w, `
|
|
{
|
|
"success": true,
|
|
"errors": [],
|
|
"messages": [],
|
|
"result": [
|
|
{
|
|
"id": "basic_challenge",
|
|
"created_on": "2014-01-01T05:20:00.12345Z",
|
|
"modified_on": "2014-01-01T05:20:00.12345Z",
|
|
"url": "http://www.example.com",
|
|
"state": "default",
|
|
"required_tokens": [
|
|
"::CAPTCHA_BOX::"
|
|
],
|
|
"preview_target": "preview:target",
|
|
"description": "Basic challenge"
|
|
}
|
|
],
|
|
"result_info": {
|
|
"page": 1,
|
|
"per_page": 20,
|
|
"count": 1,
|
|
"total_count": 1
|
|
}
|
|
}
|
|
`)
|
|
}
|
|
|
|
mux.HandleFunc("/zones/d992d6de698eaf2d8cf8fd53b89b18a4/custom_pages", handler)
|
|
want := []CustomPage{expectedCustomPage}
|
|
|
|
pages, err := client.CustomPages(context.Background(), &CustomPageOptions{ZoneID: "d992d6de698eaf2d8cf8fd53b89b18a4"})
|
|
|
|
if assert.NoError(t, err) {
|
|
assert.Equal(t, want, pages)
|
|
}
|
|
}
|
|
|
|
func TestCustomPagesForAccount(t *testing.T) {
|
|
setup()
|
|
defer teardown()
|
|
|
|
handler := 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.Fprintf(w, `
|
|
{
|
|
"success": true,
|
|
"errors": [],
|
|
"messages": [],
|
|
"result": [
|
|
{
|
|
"id": "basic_challenge",
|
|
"created_on": "2014-01-01T05:20:00.12345Z",
|
|
"modified_on": "2014-01-01T05:20:00.12345Z",
|
|
"url": "http://www.example.com",
|
|
"state": "default",
|
|
"required_tokens": [
|
|
"::CAPTCHA_BOX::"
|
|
],
|
|
"preview_target": "preview:target",
|
|
"description": "Basic challenge"
|
|
}
|
|
],
|
|
"result_info": {
|
|
"page": 1,
|
|
"per_page": 20,
|
|
"count": 1,
|
|
"total_count": 1
|
|
}
|
|
}
|
|
`)
|
|
}
|
|
|
|
mux.HandleFunc("/accounts/01a7362d577a6c3019a474fd6f485823/custom_pages", handler)
|
|
want := []CustomPage{expectedCustomPage}
|
|
|
|
pages, err := client.CustomPages(context.Background(), &CustomPageOptions{AccountID: "01a7362d577a6c3019a474fd6f485823"})
|
|
|
|
if assert.NoError(t, err) {
|
|
assert.Equal(t, want, pages)
|
|
}
|
|
}
|
|
|
|
func TestCustomPageForZone(t *testing.T) {
|
|
setup()
|
|
defer teardown()
|
|
|
|
handler := 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.Fprintf(w, `
|
|
{
|
|
"success": true,
|
|
"errors": [],
|
|
"messages": [],
|
|
"result": {
|
|
"id": "basic_challenge",
|
|
"created_on": "2014-01-01T05:20:00.12345Z",
|
|
"modified_on": "2014-01-01T05:20:00.12345Z",
|
|
"url": "http://www.example.com",
|
|
"state": "default",
|
|
"required_tokens": [
|
|
"::CAPTCHA_BOX::"
|
|
],
|
|
"preview_target": "preview:target",
|
|
"description": "Basic challenge"
|
|
},
|
|
"result_info": {
|
|
"page": 1,
|
|
"per_page": 20,
|
|
"count": 1,
|
|
"total_count": 1
|
|
}
|
|
}
|
|
`)
|
|
}
|
|
|
|
mux.HandleFunc("/zones/d992d6de698eaf2d8cf8fd53b89b18a4/custom_pages/basic_challenge", handler)
|
|
|
|
page, err := client.CustomPage(context.Background(), &CustomPageOptions{ZoneID: "d992d6de698eaf2d8cf8fd53b89b18a4"}, "basic_challenge")
|
|
|
|
if assert.NoError(t, err) {
|
|
assert.Equal(t, expectedCustomPage, page)
|
|
}
|
|
}
|
|
|
|
func TestCustomPageForAccount(t *testing.T) {
|
|
setup()
|
|
defer teardown()
|
|
|
|
handler := 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.Fprintf(w, `
|
|
{
|
|
"success": true,
|
|
"errors": [],
|
|
"messages": [],
|
|
"result": {
|
|
"id": "basic_challenge",
|
|
"created_on": "2014-01-01T05:20:00.12345Z",
|
|
"modified_on": "2014-01-01T05:20:00.12345Z",
|
|
"url": "http://www.example.com",
|
|
"state": "default",
|
|
"required_tokens": [
|
|
"::CAPTCHA_BOX::"
|
|
],
|
|
"preview_target": "preview:target",
|
|
"description": "Basic challenge"
|
|
},
|
|
"result_info": {
|
|
"page": 1,
|
|
"per_page": 20,
|
|
"count": 1,
|
|
"total_count": 1
|
|
}
|
|
}
|
|
`)
|
|
}
|
|
|
|
mux.HandleFunc("/accounts/01a7362d577a6c3019a474fd6f485823/custom_pages/basic_challenge", handler)
|
|
|
|
page, err := client.CustomPage(context.Background(), &CustomPageOptions{AccountID: "01a7362d577a6c3019a474fd6f485823"}, "basic_challenge")
|
|
|
|
if assert.NoError(t, err) {
|
|
assert.Equal(t, expectedCustomPage, page)
|
|
}
|
|
}
|
|
|
|
func TestUpdateCustomPagesForAccount(t *testing.T) {
|
|
setup()
|
|
defer teardown()
|
|
|
|
handler := func(w http.ResponseWriter, r *http.Request) {
|
|
assert.Equal(t, http.MethodPut, r.Method, "Expected method 'PUT', got %s", r.Method)
|
|
w.Header().Set("content-type", "application/json")
|
|
fmt.Fprintf(w, `
|
|
{
|
|
"success": true,
|
|
"errors": [],
|
|
"messages": [],
|
|
"result": {
|
|
"id": "basic_challenge",
|
|
"created_on": "2014-01-01T05:20:00.12345Z",
|
|
"modified_on": "2014-01-01T05:20:00.12345Z",
|
|
"url": "https://mytestexample.com",
|
|
"state": "customized",
|
|
"required_tokens": [
|
|
"::CAPTCHA_BOX::"
|
|
],
|
|
"preview_target": "preview:target",
|
|
"description": "Basic challenge"
|
|
},
|
|
"result_info": {
|
|
"page": 1,
|
|
"per_page": 20,
|
|
"count": 1,
|
|
"total_count": 1
|
|
}
|
|
}
|
|
`)
|
|
}
|
|
|
|
mux.HandleFunc("/accounts/01a7362d577a6c3019a474fd6f485823/custom_pages/basic_challenge", handler)
|
|
actual, err := client.UpdateCustomPage(context.Background(), &CustomPageOptions{AccountID: "01a7362d577a6c3019a474fd6f485823"}, "basic_challenge", CustomPageParameters{URL: "https://mytestexample.com", State: "customized"})
|
|
|
|
if assert.NoError(t, err) {
|
|
assert.Equal(t, updatedCustomPage, actual)
|
|
}
|
|
}
|
|
|
|
func TestUpdateCustomPagesForZone(t *testing.T) {
|
|
setup()
|
|
defer teardown()
|
|
|
|
handler := func(w http.ResponseWriter, r *http.Request) {
|
|
assert.Equal(t, http.MethodPut, r.Method, "Expected method 'PUT', got %s", r.Method)
|
|
w.Header().Set("content-type", "application/json")
|
|
fmt.Fprintf(w, `
|
|
{
|
|
"success": true,
|
|
"errors": [],
|
|
"messages": [],
|
|
"result": {
|
|
"id": "basic_challenge",
|
|
"created_on": "2014-01-01T05:20:00.12345Z",
|
|
"modified_on": "2014-01-01T05:20:00.12345Z",
|
|
"url": "https://mytestexample.com",
|
|
"state": "customized",
|
|
"required_tokens": [
|
|
"::CAPTCHA_BOX::"
|
|
],
|
|
"preview_target": "preview:target",
|
|
"description": "Basic challenge"
|
|
},
|
|
"result_info": {
|
|
"page": 1,
|
|
"per_page": 20,
|
|
"count": 1,
|
|
"total_count": 1
|
|
}
|
|
}
|
|
`)
|
|
}
|
|
|
|
mux.HandleFunc("/zones/d992d6de698eaf2d8cf8fd53b89b18a4/custom_pages/basic_challenge", handler)
|
|
actual, err := client.UpdateCustomPage(context.Background(), &CustomPageOptions{ZoneID: "d992d6de698eaf2d8cf8fd53b89b18a4"}, "basic_challenge", CustomPageParameters{URL: "https://mytestexample.com", State: "customized"})
|
|
|
|
if assert.NoError(t, err) {
|
|
assert.Equal(t, updatedCustomPage, actual)
|
|
}
|
|
}
|
|
|
|
func TestUpdateCustomPagesToDefault(t *testing.T) {
|
|
setup()
|
|
defer teardown()
|
|
|
|
handler := func(w http.ResponseWriter, r *http.Request) {
|
|
assert.Equal(t, http.MethodPut, r.Method, "Expected method 'PUT', got %s", r.Method)
|
|
w.Header().Set("content-type", "application/json")
|
|
fmt.Fprintf(w, `
|
|
{
|
|
"result":{
|
|
"id":"basic_challenge",
|
|
"description":"Basic challenge",
|
|
"required_tokens":[
|
|
"::CAPTCHA_BOX::"
|
|
],
|
|
"preview_target":"preview:target",
|
|
"created_on": "2014-01-01T05:20:00.12345Z",
|
|
"modified_on": "2014-01-01T05:20:00.12345Z",
|
|
"url":null,
|
|
"state":"default"
|
|
},
|
|
"success":true,
|
|
"errors":[],
|
|
"messages":[]
|
|
}
|
|
`)
|
|
}
|
|
|
|
mux.HandleFunc("/zones/d992d6de698eaf2d8cf8fd53b89b18a4/custom_pages/basic_challenge", handler)
|
|
actual, err := client.UpdateCustomPage(context.Background(), &CustomPageOptions{ZoneID: "d992d6de698eaf2d8cf8fd53b89b18a4"}, "basic_challenge", CustomPageParameters{URL: nil, State: "default"})
|
|
|
|
if assert.NoError(t, err) {
|
|
assert.Equal(t, defaultCustomPage, actual)
|
|
}
|
|
}
|