Repository: cloudflare/cloudflare-go
Pull request #955 (2022-06-27 22:02:22)

add queueing_method to waiting room struct
Add `queueing_method` to `WaitingRoom` struct.
This is already documented in the public API and exists on the `WaitingRoomEvent` struct. 

## Description

## Has your change been tested?
Unit tests have been updated and pass.

## Types of changes

What sort of change does your code introduce/modify?

- [ ] Bug fix (non-breaking change which fixes an issue)
- [x] New feature (non-breaking change which adds functionality)
- [ ] Breaking change (fix or feature that would cause existing functionality to change)

## Checklist:

- [x] My code follows the code style of this project.
- [ ] My change requires a change to the documentation.
- [ ] I have updated the documentation accordingly.
- [x] I have added tests to cover my changes.
- [x] All new and existing tests passed.
- [x] This change is using publicly documented (api.cloudflare.com or developers.cloudflare.com) and stable APIs.


Patch:
diff --git a/go.mod b/go.mod
index 763de6102..906c70d33 100644
--- a/go.mod
+++ b/go.mod
@@ -7,8 +7,8 @@ require (
 	github.com/olekukonko/tablewriter v0.0.5
 	github.com/orijtech/structslop v0.0.6
 	github.com/pkg/errors v0.9.1
-	github.com/stretchr/testify v1.7.5
-	github.com/urfave/cli/v2 v2.10.3
+	github.com/stretchr/testify v1.7.4
+	github.com/urfave/cli/v2 v2.10.2
 	golang.org/x/net v0.0.0-20220225172249-27dd8689420f
 	golang.org/x/time v0.0.0-20220224211638-0e9765cccd65
 )
diff --git a/go.sum b/go.sum
index 9d44b4401..6dadecd22 100644
--- a/go.sum
+++ b/go.sum
@@ -39,10 +39,10 @@ github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+
 github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
 github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
 github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
-github.com/stretchr/testify v1.7.5 h1:s5PTfem8p8EbKQOctVV53k6jCJt3UX4IEJzwh+C324Q=
-github.com/stretchr/testify v1.7.5/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
-github.com/urfave/cli/v2 v2.10.3 h1:oi571Fxz5aHugfBAJd5nkwSk3fzATXtMlpxdLylSCMo=
-github.com/urfave/cli/v2 v2.10.3/go.mod h1:f8iq5LtQ/bLxafbdBSLPPNsgaW0l/2fYYEHhAyPlwvo=
+github.com/stretchr/testify v1.7.4 h1:wZRexSlwd7ZXfKINDLsO4r7WBt3gTKONc6K/VesHvHM=
+github.com/stretchr/testify v1.7.4/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
+github.com/urfave/cli/v2 v2.10.2 h1:x3p8awjp/2arX+Nl/G2040AZpOCHS/eMJJ1/a+mye4Y=
+github.com/urfave/cli/v2 v2.10.2/go.mod h1:f8iq5LtQ/bLxafbdBSLPPNsgaW0l/2fYYEHhAyPlwvo=
 github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673 h1:bAn7/zixMGCfxrRTfdpNzjtPYqr8smhKouy9mxVdGPU=
 github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673/go.mod h1:N3UwUGtsrSj3ccvlPHLoLsHnpR27oXr4ZE984MbSER8=
 github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
diff --git a/logpush.go b/logpush.go
index 856f2270f..724cc35e4 100644
--- a/logpush.go
+++ b/logpush.go
@@ -15,7 +15,6 @@ type LogpushJob struct {
 	ID                 int                `json:"id,omitempty"`
 	Dataset            string             `json:"dataset"`
 	Enabled            bool               `json:"enabled"`
-	Kind               string             `json:"kind,omitempty"`
 	Name               string             `json:"name"`
 	LogpullOptions     string             `json:"logpull_options"`
 	DestinationConf    string             `json:"destination_conf"`
@@ -37,9 +36,9 @@ const (
 	Equal              Operator = "eq"
 	NotEqual           Operator = "!eq"
 	LessThan           Operator = "lt"
-	LessThanOrEqual    Operator = "leq"
+	LessThanOrEqual    Operator = "lte"
 	GreaterThan        Operator = "gt"
-	GreaterThanOrEqual Operator = "geq"
+	GreaterThanOrEqual Operator = "gte"
 	StartsWith         Operator = "startsWith"
 	EndsWith           Operator = "endsWith"
 	NotStartsWith      Operator = "!startsWith"
diff --git a/magic_transit_ipsec_tunnel.go b/magic_transit_ipsec_tunnel.go
index 4824e6123..1838b6a1c 100644
--- a/magic_transit_ipsec_tunnel.go
+++ b/magic_transit_ipsec_tunnel.go
@@ -41,7 +41,6 @@ type MagicTransitIPsecTunnel struct {
 	Psk                string                              `json:"psk,omitempty"`
 	PskMetadata        *MagicTransitIPsecTunnelPskMetadata `json:"psk_metadata,omitempty"`
 	RemoteIdentities   *RemoteIdentities                   `json:"remote_identities,omitempty"`
-	AllowNullCipher    bool                                `json:"allow_null_cipher"`
 }
 
 // ListMagicTransitIPsecTunnelsResponse contains a response including IPsec tunnels.
diff --git a/pages_deployment.go b/pages_deployment.go
index ab643f294..af7d6d778 100644
--- a/pages_deployment.go
+++ b/pages_deployment.go
@@ -5,6 +5,8 @@ import (
 	"encoding/json"
 	"fmt"
 	"net/http"
+	"net/url"
+	"strconv"
 	"time"
 
 	"github.com/pkg/errors"
@@ -15,12 +17,12 @@ import (
 //
 // This should be swapped to ResultInfoCursors once the types are corrected.
 type SizeOptions struct {
-	Size   int  `json:"size,omitempty" url:"size,omitempty"`
-	Before *int `json:"before,omitempty" url:"before,omitempty"`
-	After  *int `json:"after,omitempty" url:"after,omitempty"`
+	Size   int `json:"size,omitempty"`
+	Before int `json:"before,omitempty"`
+	After  int `json:"after,omitempty"`
 }
 
-// PagesDeploymentStageLogs represents the logs for a Pages deployment stage.
+// PagesDeploymentStageLogEntry represents the logs for a Pages deployment stage.
 type PagesDeploymentStageLogs struct {
 	Name      string                         `json:"name"`
 	StartedOn *time.Time                     `json:"started_on"`
@@ -39,19 +41,6 @@ type PagesDeploymentStageLogEntry struct {
 	Message   string     `json:"message"`
 }
 
-// PagesDeploymentLogs represents the logs for a Pages deployment.
-type PagesDeploymentLogs struct {
-	Total                 int                       `json:"total"`
-	IncludesContainerLogs bool                      `json:"includes_container_logs"`
-	Data                  []PagesDeploymentLogEntry `json:"data"`
-}
-
-// PagesDeploymentLogEntry represents a single log entry in a Pages deployment.
-type PagesDeploymentLogEntry struct {
-	Timestamp *time.Time `json:"ts"`
-	Line      string     `json:"line"`
-}
-
 type pagesDeploymentListResponse struct {
 	Response
 	Result     []PagesProjectDeployment `json:"result"`
@@ -69,12 +58,6 @@ type pagesDeploymentStageLogsResponse struct {
 	ResultInfo `json:"result_info"`
 }
 
-type pagesDeploymentLogsResponse struct {
-	Response
-	Result     PagesDeploymentLogs `json:"result"`
-	ResultInfo `json:"result_info"`
-}
-
 type ListPagesDeploymentsParams struct {
 	AccountID   string
 	ProjectName string
@@ -97,14 +80,6 @@ type GetPagesDeploymentStageLogsParams struct {
 	SizeOptions
 }
 
-type GetPagesDeploymentLogsParams struct {
-	AccountID    string
-	ProjectName  string
-	DeploymentID string
-
-	SizeOptions
-}
-
 type DeletePagesDeploymentParams struct {
 	AccountID    string
 	ProjectName  string
@@ -128,25 +103,22 @@ type RollbackPagesDeploymentParams struct {
 	DeploymentID string
 }
 
-var (
-	ErrMissingProjectName  = errors.New("required missing project name")
-	ErrMissingDeploymentID = errors.New("required missing deployment ID")
-	ErrMissingStageName    = errors.New("required missing stage name")
-)
-
 // ListPagesDeployments returns all deployments for a Pages project.
 //
 // API reference: https://api.cloudflare.com/#pages-deployment-get-deployments
 func (api *API) ListPagesDeployments(ctx context.Context, params ListPagesDeploymentsParams) ([]PagesProjectDeployment, ResultInfo, error) {
-	if params.AccountID == "" {
-		return []PagesProjectDeployment{}, ResultInfo{}, ErrMissingAccountID
+	v := url.Values{}
+	if params.PerPage > 0 {
+		v.Set("per_page", strconv.Itoa(params.PerPage))
 	}
-
-	if params.ProjectName == "" {
-		return []PagesProjectDeployment{}, ResultInfo{}, ErrMissingProjectName
+	if params.Page > 0 {
+		v.Set("page", strconv.Itoa(params.Page))
 	}
 
-	uri := buildURI(fmt.Sprintf("/accounts/%s/pages/projects/%s/deployments", params.AccountID, params.ProjectName), params.PaginationOptions)
+	uri := fmt.Sprintf("/accounts/%s/pages/projects/%s/deployments", params.AccountID, params.ProjectName)
+	if len(v) > 0 {
+		uri = fmt.Sprintf("%s?%s", uri, v.Encode())
+	}
 
 	res, err := api.makeRequestContext(ctx, http.MethodGet, uri, nil)
 	if err != nil {
@@ -164,18 +136,6 @@ func (api *API) ListPagesDeployments(ctx context.Context, params ListPagesDeploy
 //
 // API reference: https://api.cloudflare.com/#pages-deployment-get-deployment-info
 func (api *API) GetPagesDeploymentInfo(ctx context.Context, params GetPagesDeploymentInfoParams) (PagesProjectDeployment, error) {
-	if params.AccountID == "" {
-		return PagesProjectDeployment{}, ErrMissingAccountID
-	}
-
-	if params.ProjectName == "" {
-		return PagesProjectDeployment{}, ErrMissingProjectName
-	}
-
-	if params.DeploymentID == "" {
-		return PagesProjectDeployment{}, ErrMissingDeploymentID
-	}
-
 	uri := fmt.Sprintf("/accounts/%s/pages/projects/%s/deployments/%s", params.AccountID, params.ProjectName, params.DeploymentID)
 
 	res, err := api.makeRequestContext(ctx, http.MethodGet, uri, nil)
@@ -193,30 +153,22 @@ func (api *API) GetPagesDeploymentInfo(ctx context.Context, params GetPagesDeplo
 // GetPagesDeploymentStageLogs returns the logs for a Pages deployment stage.
 //
 // API reference: https://api.cloudflare.com/#pages-deployment-get-deployment-stage-logs
-//
-// Deprecated: Use GetPagesDeploymentLogs instead.
 func (api *API) GetPagesDeploymentStageLogs(ctx context.Context, params GetPagesDeploymentStageLogsParams) (PagesDeploymentStageLogs, error) {
-	if params.AccountID == "" {
-		return PagesDeploymentStageLogs{}, ErrMissingAccountID
+	v := url.Values{}
+	if params.Size > 0 {
+		v.Set("size", strconv.Itoa(params.Size))
 	}
-
-	if params.ProjectName == "" {
-		return PagesDeploymentStageLogs{}, ErrMissingProjectName
-	}
-
-	if params.DeploymentID == "" {
-		return PagesDeploymentStageLogs{}, ErrMissingDeploymentID
+	if params.Before > 0 {
+		v.Set("before", strconv.Itoa(params.Before))
+	} else if params.After > 0 {
+		v.Set("after", strconv.Itoa(params.After))
 	}
 
-	if params.StageName == "" {
-		return PagesDeploymentStageLogs{}, ErrMissingStageName
+	uri := fmt.Sprintf("/accounts/%s/pages/projects/%s/deployments/%s/history/%s/logs", params.AccountID, params.ProjectName, params.DeploymentID, params.StageName)
+	if len(v) > 0 {
+		uri = fmt.Sprintf("%s?%s", uri, v.Encode())
 	}
 
-	uri := buildURI(
-		fmt.Sprintf("/accounts/%s/pages/projects/%s/deployments/%s/history/%s/logs", params.AccountID, params.ProjectName, params.DeploymentID, params.StageName),
-		params.SizeOptions,
-	)
-
 	res, err := api.makeRequestContext(ctx, http.MethodGet, uri, nil)
 	if err != nil {
 		return PagesDeploymentStageLogs{}, err
@@ -229,55 +181,10 @@ func (api *API) GetPagesDeploymentStageLogs(ctx context.Context, params GetPages
 	return r.Result, nil
 }
 
-// GetPagesDeploymentStageLogs returns the logs for a Pages deployment stage.
-//
-// API reference: https://api.cloudflare.com/#pages-deployment-get-deployment-logs
-func (api *API) GetPagesDeploymentLogs(ctx context.Context, params GetPagesDeploymentLogsParams) (PagesDeploymentLogs, error) {
-	if params.AccountID == "" {
-		return PagesDeploymentLogs{}, ErrMissingAccountID
-	}
-
-	if params.ProjectName == "" {
-		return PagesDeploymentLogs{}, ErrMissingProjectName
-	}
-
-	if params.DeploymentID == "" {
-		return PagesDeploymentLogs{}, ErrMissingDeploymentID
-	}
-
-	uri := buildURI(
-		fmt.Sprintf("/accounts/%s/pages/projects/%s/deployments/%s/history/logs", params.AccountID, params.ProjectName, params.DeploymentID),
-		params.SizeOptions,
-	)
-
-	res, err := api.makeRequestContext(ctx, http.MethodGet, uri, nil)
-	if err != nil {
-		return PagesDeploymentLogs{}, err
-	}
-	var r pagesDeploymentLogsResponse
-	err = json.Unmarshal(res, &r)
-	if err != nil {
-		return PagesDeploymentLogs{}, errors.Wrap(err, errUnmarshalError)
-	}
-	return r.Result, nil
-}
-
 // DeletePagesDeployment deletes a Pages deployment.
 //
 // API reference: https://api.cloudflare.com/#pages-deployment-delete-deployment
 func (api *API) DeletePagesDeployment(ctx context.Context, params DeletePagesDeploymentParams) error {
-	if params.AccountID == "" {
-		return ErrMissingAccountID
-	}
-
-	if params.ProjectName == "" {
-		return ErrMissingProjectName
-	}
-
-	if params.DeploymentID == "" {
-		return ErrMissingDeploymentID
-	}
-
 	uri := fmt.Sprintf("/accounts/%s/pages/projects/%s/deployments/%s", params.AccountID, params.ProjectName, params.DeploymentID)
 
 	_, err := api.makeRequestContext(ctx, http.MethodDelete, uri, nil)
@@ -291,14 +198,6 @@ func (api *API) DeletePagesDeployment(ctx context.Context, params DeletePagesDep
 //
 // API reference: https://api.cloudflare.com/#pages-deployment-create-deployment
 func (api *API) CreatePagesDeployment(ctx context.Context, params CreatePagesDeploymentParams) (PagesProjectDeployment, error) {
-	if params.AccountID == "" {
-		return PagesProjectDeployment{}, ErrMissingAccountID
-	}
-
-	if params.ProjectName == "" {
-		return PagesProjectDeployment{}, ErrMissingProjectName
-	}
-
 	uri := fmt.Sprintf("/accounts/%s/pages/projects/%s/deployments", params.AccountID, params.ProjectName)
 
 	res, err := api.makeRequestContext(ctx, http.MethodPost, uri, nil)
@@ -317,18 +216,6 @@ func (api *API) CreatePagesDeployment(ctx context.Context, params CreatePagesDep
 //
 // API reference: https://api.cloudflare.com/#pages-deployment-retry-deployment
 func (api *API) RetryPagesDeployment(ctx context.Context, params RetryPagesDeploymentParams) (PagesProjectDeployment, error) {
-	if params.AccountID == "" {
-		return PagesProjectDeployment{}, ErrMissingAccountID
-	}
-
-	if params.ProjectName == "" {
-		return PagesProjectDeployment{}, ErrMissingProjectName
-	}
-
-	if params.DeploymentID == "" {
-		return PagesProjectDeployment{}, ErrMissingDeploymentID
-	}
-
 	uri := fmt.Sprintf("/accounts/%s/pages/projects/%s/deployments/%s/retry", params.AccountID, params.ProjectName, params.DeploymentID)
 
 	res, err := api.makeRequestContext(ctx, http.MethodPost, uri, nil)
@@ -347,18 +234,6 @@ func (api *API) RetryPagesDeployment(ctx context.Context, params RetryPagesDeplo
 //
 // API reference: https://api.cloudflare.com/#pages-deployment-rollback-deployment
 func (api *API) RollbackPagesDeployment(ctx context.Context, params RollbackPagesDeploymentParams) (PagesProjectDeployment, error) {
-	if params.AccountID == "" {
-		return PagesProjectDeployment{}, ErrMissingAccountID
-	}
-
-	if params.ProjectName == "" {
-		return PagesProjectDeployment{}, ErrMissingProjectName
-	}
-
-	if params.DeploymentID == "" {
-		return PagesProjectDeployment{}, ErrMissingDeploymentID
-	}
-
 	uri := fmt.Sprintf("/accounts/%s/pages/projects/%s/deployments/%s/rollback", params.AccountID, params.ProjectName, params.DeploymentID)
 
 	res, err := api.makeRequestContext(ctx, http.MethodPost, uri, nil)
diff --git a/rulesets.go b/rulesets.go
index aefa66f1a..eafdfdda8 100644
--- a/rulesets.go
+++ b/rulesets.go
@@ -17,25 +17,24 @@ const (
 	RulesetKindSchema  RulesetKind = "schema"
 	RulesetKindZone    RulesetKind = "zone"
 
-	RulesetPhaseDDoSL4                              RulesetPhase = "ddos_l4"
-	RulesetPhaseDDoSL7                              RulesetPhase = "ddos_l7"
-	RulesetPhaseHTTPLogCustomFields                 RulesetPhase = "http_log_custom_fields"
-	RulesetPhaseHTTPRequestCacheSettings            RulesetPhase = "http_request_cache_settings"
-	RulesetPhaseHTTPRequestFirewallCustom           RulesetPhase = "http_request_firewall_custom"
-	RulesetPhaseHTTPRequestFirewallManaged          RulesetPhase = "http_request_firewall_managed"
-	RulesetPhaseHTTPRequestLateTransform            RulesetPhase = "http_request_late_transform"
-	RulesetPhaseHTTPRequestLateTransformManaged     RulesetPhase = "http_request_late_transform_managed"
-	RulesetPhaseHTTPRequestMain                     RulesetPhase = "http_request_main"
-	RulesetPhaseHTTPRequestOrigin                   RulesetPhase = "http_request_origin"
-	RulesetPhaseHTTPRequestRedirect                 RulesetPhase = "http_request_redirect"
-	RulesetPhaseHTTPRequestSanitize                 RulesetPhase = "http_request_sanitize"
-	RulesetPhaseHTTPRequestTransform                RulesetPhase = "http_request_transform"
-	RulesetPhaseHTTPResponseFirewallManaged         RulesetPhase = "http_response_firewall_managed"
-	RulesetPhaseHTTPResponseHeadersTransform        RulesetPhase = "http_response_headers_transform"
-	RulesetPhaseHTTPResponseHeadersTransformManaged RulesetPhase = "http_response_headers_transform_managed"
-	RulesetPhaseMagicTransit                        RulesetPhase = "magic_transit"
-	RulesetPhaseRateLimit                           RulesetPhase = "http_ratelimit"
-	RulesetPhaseSuperBotFightMode                   RulesetPhase = "http_request_sbfm"
+	RulesetPhaseDDoSL4                          RulesetPhase = "ddos_l4"
+	RulesetPhaseDDoSL7                          RulesetPhase = "ddos_l7"
+	RulesetPhaseHTTPLogCustomFields             RulesetPhase = "http_log_custom_fields"
+	RulesetPhaseHTTPRequestCacheSettings        RulesetPhase = "http_request_cache_settings"
+	RulesetPhaseHTTPRequestFirewallCustom       RulesetPhase = "http_request_firewall_custom"
+	RulesetPhaseHTTPRequestFirewallManaged      RulesetPhase = "http_request_firewall_managed"
+	RulesetPhaseHTTPRequestLateTransform        RulesetPhase = "http_request_late_transform"
+	RulesetPhaseHTTPRequestLateTransformManaged RulesetPhase = "http_request_late_transform_managed"
+	RulesetPhaseHTTPRequestMain                 RulesetPhase = "http_request_main"
+	RulesetPhaseHTTPRequestOrigin               RulesetPhase = "http_request_origin"
+	RulesetPhaseHTTPRequestRedirect             RulesetPhase = "http_request_redirect"
+	RulesetPhaseHTTPRequestSanitize             RulesetPhase = "http_request_sanitize"
+	RulesetPhaseHTTPRequestTransform            RulesetPhase = "http_request_transform"
+	RulesetPhaseHTTPResponseFirewallManaged     RulesetPhase = "http_response_firewall_managed"
+	RulesetPhaseHTTPResponseHeadersTransform    RulesetPhase = "http_response_headers_transform"
+	RulesetPhaseMagicTransit                    RulesetPhase = "magic_transit"
+	RulesetPhaseRateLimit                       RulesetPhase = "http_ratelimit"
+	RulesetPhaseSuperBotFightMode               RulesetPhase = "http_request_sbfm"
 
 	RulesetRuleActionBlock                RulesetRuleAction = "block"
 	RulesetRuleActionChallenge            RulesetRuleAction = "challenge"
@@ -96,7 +95,6 @@ func RulesetPhaseValues() []string {
 		string(RulesetPhaseHTTPRequestTransform),
 		string(RulesetPhaseHTTPResponseFirewallManaged),
 		string(RulesetPhaseHTTPResponseHeadersTransform),
-		string(RulesetPhaseHTTPResponseHeadersTransformManaged),
 		string(RulesetPhaseMagicTransit),
 		string(RulesetPhaseRateLimit),
 		string(RulesetPhaseSuperBotFightMode),
diff --git a/tunnel.go b/tunnel.go
index 04025423d..2204b7ac8 100644
--- a/tunnel.go
+++ b/tunnel.go
@@ -10,10 +10,6 @@ import (
 	"github.com/pkg/errors"
 )
 
-// ErrMissingTunnelID is for when a required tunnel ID is missing from the
-// parameters.
-var ErrMissingTunnelID = errors.New("required missing tunnel ID")
-
 // Tunnel is the struct definition of a tunnel.
 type Tunnel struct {
 	ID             string             `json:"id,omitempty"`
@@ -51,34 +47,6 @@ type TunnelDetailResponse struct {
 	Response
 }
 
-// TunnelConfigurationStringifiedConfigResult is the raw result from the API with
-// the `Config` value as a string. You probably don't want to use this anywhere
-// other than in the HTTP response unmarshaling. Use `TunnelConfigurationResult`
-// for the correct types.
-type TunnelConfigurationStringifiedConfigResult struct {
-	TunnelID string `json:"tunnel_id,omitempty"`
-	Config   string `json:"config,omitempty"`
-	Version  int    `json:"version,omitempty"`
-}
-
-type TunnelConfigurationStringifiedConfigResponse struct {
-	Result TunnelConfigurationStringifiedConfigResult `json:"result"`
-	Response
-}
-
-type TunnelConfigurationResult struct {
-	TunnelID string              `json:"tunnel_id,omitempty"`
-	Config   TunnelConfiguration `json:"config,omitempty"`
-	Version  int                 `json:"version,omitempty"`
-}
-
-// TunnelConfigurationResponse is used for representing the API response payload
-// for a single tunnel.
-type TunnelConfigurationResponse struct {
-	Result TunnelConfigurationResult `json:"result"`
-	Response
-}
-
 // TunnelTokenResponse is  the API response for a tunnel token.
 type TunnelTokenResponse struct {
 	Result string `json:"result"`
@@ -102,82 +70,6 @@ type TunnelUpdateParams struct {
 	Secret    string `json:"tunnel_secret,omitempty"`
 }
 
-type UnvalidatedIngressRule struct {
-	Hostname string `json:"hostname,omitempty"`
-	Path     string `json:"path,omitempty"`
-	Service  string `json:"service,omitempty"`
-}
-
-// OriginRequestConfig is a set of optional fields that users may set to
-// customize how cloudflared sends requests to origin services. It is used to set
-// up general config that apply to all rules, and also, specific per-rule
-// config.
-type OriginRequestConfig struct {
-	// HTTP proxy timeout for establishing a new connection
-	ConnectTimeout *time.Duration `json:"connectTimeout,omitempty"`
-	// HTTP proxy timeout for completing a TLS handshake
-	TLSTimeout *time.Duration `json:"tlsTimeout,omitempty"`
-	// HTTP proxy TCP keepalive duration
-	TCPKeepAlive *time.Duration `json:"tcpKeepAlive,omitempty"`
-	// HTTP proxy should disable "happy eyeballs" for IPv4/v6 fallback
-	NoHappyEyeballs *bool `json:"noHappyEyeballs,omitempty"`
-	// HTTP proxy maximum keepalive connection pool size
-	KeepAliveConnections *int `json:"keepAliveConnections,omitempty"`
-	// HTTP proxy timeout for closing an idle connection
-	KeepAliveTimeout *time.Duration `json:"keepAliveTimeout,omitempty"`
-	// Sets the HTTP Host header for the local webserver.
-	HTTPHostHeader *string `json:"httpHostHeader,omitempty"`
-	// Hostname on the origin server certificate.
-	OriginServerName *string `json:"originServerName,omitempty"`
-	// Path to the CA for the certificate of your origin.
-	// This option should be used only if your certificate is not signed by Cloudflare.
-	CAPool *string `json:"caPool,omitempty"`
-	// Disables TLS verification of the certificate presented by your origin.
-	// Will allow any certificate from the origin to be accepted.
-	// Note: The connection from your machine to Cloudflare's Edge is still encrypted.
-	NoTLSVerify *bool `json:"noTLSVerify,omitempty"`
-	// Disables chunked transfer encoding.
-	// Useful if you are running a WSGI server.
-	DisableChunkedEncoding *bool `json:"disableChunkedEncoding,omitempty"`
-	// Runs as jump host
-	BastionMode *bool `json:"bastionMode,omitempty"`
-	// Listen address for the proxy.
-	ProxyAddress *string `json:"proxyAddress,omitempty"`
-	// Listen port for the proxy.
-	ProxyPort *uint `json:"proxyPort,omitempty"`
-	// Valid options are 'socks' or empty.
-	ProxyType *string `json:"proxyType,omitempty"`
-	// IP rules for the proxy service
-	IPRules []IngressIPRule `json:"ipRules,omitempty"`
-}
-
-type IngressIPRule struct {
-	Prefix *string `json:"prefix,omitempty"`
-	Ports  []int   `json:"ports,omitempty"`
-	Allow  bool    `json:"allow,omitempty"`
-}
-
-type TunnelConfiguration struct {
-	Ingress       []UnvalidatedIngressRule `json:"ingress,omitempty"`
-	WarpRouting   *WarpRoutingConfig       `json:"warp-routing,omitempty"`
-	OriginRequest OriginRequestConfig      `json:"originRequest,omitempty"`
-}
-
-type WarpRoutingConfig struct {
-	Enabled bool `json:"enabled,omitempty"`
-}
-
-type TunnelConfigurationParams struct {
-	AccountID string              `json:"-"`
-	TunnelID  string              `json:"-"`
-	Config    TunnelConfiguration `json:"config,omitempty"`
-}
-
-type GetTunnelConfigurationParams struct {
-	AccountID string `json:"-"`
-	TunnelID  string `json:"-"`
-}
-
 type TunnelDeleteParams struct {
 	AccountID string
 	ID        string
@@ -211,7 +103,7 @@ func (api *API) Tunnels(ctx context.Context, params TunnelListParams) ([]Tunnel,
 
 	uri := buildURI(fmt.Sprintf("/accounts/%s/cfd_tunnel", params.AccountID), params)
 
-	res, err := api.makeRequestContext(ctx, http.MethodGet, uri, nil)
+	res, err := api.makeRequestContextWithHeaders(ctx, http.MethodGet, uri, nil, nil)
 	if err != nil {
 		return []Tunnel{}, err
 	}
@@ -238,7 +130,7 @@ func (api *API) Tunnel(ctx context.Context, params TunnelParams) (Tunnel, error)
 
 	uri := fmt.Sprintf("/accounts/%s/cfd_tunnel/%s", params.AccountID, params.ID)
 
-	res, err := api.makeRequestContext(ctx, http.MethodGet, uri, nil)
+	res, err := api.makeRequestContextWithHeaders(ctx, http.MethodGet, uri, nil, nil)
 	if err != nil {
 		return Tunnel{}, err
 	}
@@ -271,7 +163,7 @@ func (api *API) CreateTunnel(ctx context.Context, params TunnelCreateParams) (Tu
 
 	tunnel := Tunnel{Name: params.Name, Secret: params.Secret}
 
-	res, err := api.makeRequestContext(ctx, http.MethodPost, uri, tunnel)
+	res, err := api.makeRequestContextWithHeaders(ctx, http.MethodPost, uri, tunnel, nil)
 	if err != nil {
 		return Tunnel{}, err
 	}
@@ -305,7 +197,7 @@ func (api *API) UpdateTunnel(ctx context.Context, params TunnelUpdateParams) (Tu
 		tunnel.Secret = params.Secret
 	}
 
-	res, err := api.makeRequestContext(ctx, http.MethodPatch, uri, tunnel)
+	res, err := api.makeRequestContextWithHeaders(ctx, http.MethodPatch, uri, tunnel, nil)
 	if err != nil {
 		return Tunnel{}, err
 	}
@@ -319,101 +211,13 @@ func (api *API) UpdateTunnel(ctx context.Context, params TunnelUpdateParams) (Tu
 	return argoDetailsResponse.Result, nil
 }
 
-// UpdateTunnelConfiguration updates an existing tunnel for the account.
-//
-// API reference: https://api.cloudflare.com/#cloudflare-tunnel-configuration-properties
-func (api *API) UpdateTunnelConfiguration(ctx context.Context, params TunnelConfigurationParams) (TunnelConfigurationResult, error) {
-	if len(params.AccountID) == 0 {
-		return TunnelConfigurationResult{}, ErrMissingAccountID
-	}
-
-	if len(params.TunnelID) == 0 {
-		return TunnelConfigurationResult{}, ErrMissingTunnelID
-	}
-
-	uri := fmt.Sprintf("/accounts/%s/cfd_tunnel/%s/configurations", params.AccountID, params.TunnelID)
-	res, err := api.makeRequestContext(ctx, http.MethodPut, uri, params.Config)
-	if err != nil {
-		return TunnelConfigurationResult{}, err
-	}
-
-	// `config` comes back as a stringified representation of the configuration
-	// so we need to double unmarshal the result. First, `config` => the string
-	// struct field and if that is successful, then attempt putting it into a typed
-	// struct field.
-
-	var tunnelDetailsResponse TunnelConfigurationStringifiedConfigResponse
-	err = json.Unmarshal(res, &tunnelDetailsResponse)
-	if err != nil {
-		return TunnelConfigurationResult{}, errors.Wrap(err, errUnmarshalError)
-	}
-
-	var tunnelDetails TunnelConfigurationResult
-	var tunnelConfig TunnelConfiguration
-
-	err = json.Unmarshal([]byte(tunnelDetailsResponse.Result.Config), &tunnelConfig)
-	if err != nil {
-		return TunnelConfigurationResult{}, errors.Wrap(err, errUnmarshalError)
-	}
-
-	tunnelDetails.Config = tunnelConfig
-	tunnelDetails.TunnelID = tunnelDetailsResponse.Result.TunnelID
-	tunnelDetails.Version = tunnelDetailsResponse.Result.Version
-
-	return tunnelDetails, nil
-}
-
-// GetTunnelConfiguration updates an existing tunnel for the account.
-//
-// API reference: https://api.cloudflare.com/#cloudflare-tunnel-configuration-properties
-func (api *API) GetTunnelConfiguration(ctx context.Context, params GetTunnelConfigurationParams) (TunnelConfigurationResult, error) {
-	if len(params.AccountID) == 0 {
-		return TunnelConfigurationResult{}, ErrMissingAccountID
-	}
-
-	if len(params.TunnelID) == 0 {
-		return TunnelConfigurationResult{}, ErrMissingTunnelID
-	}
-
-	uri := fmt.Sprintf("/accounts/%s/cfd_tunnel/%s/configurations", params.AccountID, params.TunnelID)
-	res, err := api.makeRequestContext(ctx, http.MethodGet, uri, nil)
-	if err != nil {
-		return TunnelConfigurationResult{}, err
-	}
-
-	// `config` comes back as a stringified representation of the configuration
-	// so we need to double unmarshal the result. First, `config` => the string
-	// struct field and if that is successful, then attempt putting it into a typed
-	// struct field.
-
-	var tunnelDetailsResponse TunnelConfigurationStringifiedConfigResponse
-	err = json.Unmarshal(res, &tunnelDetailsResponse)
-	if err != nil {
-		return TunnelConfigurationResult{}, errors.Wrap(err, errUnmarshalError)
-	}
-
-	var tunnelDetails TunnelConfigurationResult
-	var tunnelConfig TunnelConfiguration
-
-	err = json.Unmarshal([]byte(tunnelDetailsResponse.Result.Config), &tunnelConfig)
-	if err != nil {
-		return TunnelConfigurationResult{}, errors.Wrap(err, errUnmarshalError)
-	}
-
-	tunnelDetails.Config = tunnelConfig
-	tunnelDetails.TunnelID = tunnelDetailsResponse.Result.TunnelID
-	tunnelDetails.Version = tunnelDetailsResponse.Result.Version
-
-	return tunnelDetails, nil
-}
-
 // DeleteTunnel removes a single Argo tunnel.
 //
 // API reference: https://api.cloudflare.com/#cloudflare-tunnel-delete-cloudflare-tunnel
 func (api *API) DeleteTunnel(ctx context.Context, params TunnelDeleteParams) error {
 	uri := fmt.Sprintf("/accounts/%s/cfd_tunnel/%s", params.AccountID, params.ID)
 
-	res, err := api.makeRequestContext(ctx, http.MethodDelete, uri, nil)
+	res, err := api.makeRequestContextWithHeaders(ctx, http.MethodDelete, uri, nil, nil)
 	if err != nil {
 		return err
 	}
@@ -441,7 +245,7 @@ func (api *API) CleanupTunnelConnections(ctx context.Context, params TunnelClean
 
 	uri := fmt.Sprintf("/accounts/%s/cfd_tunnel/%s/connections", params.AccountID, params.ID)
 
-	res, err := api.makeRequestContext(ctx, http.MethodDelete, uri, nil)
+	res, err := api.makeRequestContextWithHeaders(ctx, http.MethodDelete, uri, nil, nil)
 	if err != nil {
 		return err
 	}
@@ -469,7 +273,7 @@ func (api *API) TunnelToken(ctx context.Context, params TunnelTokenParams) (stri
 
 	uri := fmt.Sprintf("/accounts/%s/cfd_tunnel/%s/token", params.AccountID, params.ID)
 
-	res, err := api.makeRequestContext(ctx, http.MethodGet, uri, nil)
+	res, err := api.makeRequestContextWithHeaders(ctx, http.MethodGet, uri, nil, nil)
 	if err != nil {
 		return "", err
 	}
diff --git a/user.go b/user.go
index 60012c690..50b7f2071 100644
--- a/user.go
+++ b/user.go
@@ -60,35 +60,6 @@ type UserBillingProfile struct {
 	EditedOn        *time.Time `json:"edited_on,omitempty"`
 }
 
-type UserBillingHistoryResponse struct {
-	Response
-	Result     []UserBillingHistory `json:"result"`
-	ResultInfo ResultInfo           `json:"result_info"`
-}
-
-type UserBillingHistory struct {
-	ID          string                 `json:"id,omitempty"`
-	Type        string                 `json:"type,omitempty"`
-	Action      string                 `json:"action,omitempty"`
-	Description string                 `json:"description,omitempty"`
-	OccurredAt  *time.Time             `json:"occurred_at,omitempty"`
-	Amount      float32                `json:"amount,omitempty"`
-	Currency    string                 `json:"currency,omitempty"`
-	Zone        userBillingHistoryZone `json:"zone"`
-}
-
-type userBillingHistoryZone struct {
-	Name string `json:"name,omitempty"`
-}
-
-type UserBillingOptions struct {
-	PaginationOptions
-	Order      string     `url:"order,omitempty"`
-	Type       string     `url:"type,omitempty"`
-	OccurredAt *time.Time `url:"occurred_at,omitempty"`
-	Action     string     `url:"action,omitempty"`
-}
-
 // UserDetails provides information about the logged-in user.
 //
 // API reference: https://api.cloudflare.com/#user-user-details
@@ -142,20 +113,3 @@ func (api *API) UserBillingProfile(ctx context.Context) (UserBillingProfile, err
 
 	return r.Result, nil
 }
-
-// UserBillingHistory return the billing history of the user
-//
-// API reference: https://api.cloudflare.com/#user-billing-history-billing-history-details
-func (api *API) UserBillingHistory(ctx context.Context, pageOpts UserBillingOptions) ([]UserBillingHistory, error) {
-	uri := buildURI("/user/billing/history", pageOpts)
-	res, err := api.makeRequestContext(ctx, http.MethodGet, uri, nil)
-	if err != nil {
-		return []UserBillingHistory{}, err
-	}
-	var r UserBillingHistoryResponse
-	err = json.Unmarshal(res, &r)
-	if err != nil {
-		return []UserBillingHistory{}, errors.Wrap(err, errUnmarshalError)
-	}
-	return r.Result, nil
-}
diff --git a/waiting_room.go b/waiting_room.go
index ff34dcf53..9b4b5e312 100644
--- a/waiting_room.go
+++ b/waiting_room.go
@@ -17,6 +17,7 @@ type WaitingRoom struct {
 	Path                       string     `json:"path"`
 	Name                       string     `json:"name"`
 	Description                string     `json:"description,omitempty"`
+	QueueingMethod             string     `json:"queueing_method,omitempty"`
 	CustomPageHTML             string     `json:"custom_page_html,omitempty"`
 	DefaultTemplateLanguage    string     `json:"default_template_language,omitempty"`
 	Host                       string     `json:"host"`
diff --git a/workers.go b/workers.go
index 8bfb88685..82f0c7a7c 100644
--- a/workers.go
+++ b/workers.go
@@ -89,8 +89,6 @@ func (b WorkerBindingType) String() string {
 }
 
 const (
-	// WorkerDurableObjectBindingType is the type for Durable Object bindings.
-	WorkerDurableObjectBindingType WorkerBindingType = "durable_object_namespace"
 	// WorkerInheritBindingType is the type for inherited bindings.
 	WorkerInheritBindingType WorkerBindingType = "inherit"
 	// WorkerKvNamespaceBindingType is the type for KV Namespace bindings.
@@ -101,8 +99,6 @@ const (
 	WorkerSecretTextBindingType WorkerBindingType = "secret_text"
 	// WorkerPlainTextBindingType is the type for plain text bindings.
 	WorkerPlainTextBindingType WorkerBindingType = "plain_text"
-	// WorkerServiceBindingType is the type for service bindings.
-	WorkerServiceBindingType WorkerBindingType = "service"
 )
 
 // WorkerBindingListItem a struct representing an individual binding in a list of bindings.
@@ -190,32 +186,6 @@ func (b WorkerKvNamespaceBinding) serialize(bindingName string) (workerBindingMe
 	}, nil, nil
 }
 
-// WorkerDurableObjectBinding is a binding to a Workers Durable Object
-//
-// https://api.cloudflare.com/#durable-objects-namespace-properties
-type WorkerDurableObjectBinding struct {
-	ClassName  string
-	ScriptName string
-}
-
-// Type returns the type of the binding.
-func (b WorkerDurableObjectBinding) Type() WorkerBindingType {
-	return WorkerDurableObjectBindingType
-}
-
-func (b WorkerDurableObjectBinding) serialize(bindingName string) (workerBindingMeta, workerBindingBodyWriter, error) {
-	if b.ClassName == "" {
-		return nil, nil, errors.Errorf(`ClassName for binding "%s" cannot be empty`, bindingName)
-	}
-
-	return workerBindingMeta{
-		"name":        bindingName,
-		"type":        b.Type(),
-		"class_name":  b.ClassName,
-		"script_name": b.ScriptName,
-	}, nil, nil
-}
-
 // WorkerWebAssemblyBinding is a binding to a WebAssembly module
 //
 // https://developers.cloudflare.com/workers/archive/api/resource-bindings/webassembly-modules/
@@ -298,33 +268,6 @@ func (b WorkerSecretTextBinding) serialize(bindingName string) (workerBindingMet
 	}, nil, nil
 }
 
-type WorkerServiceBinding struct {
-	Service     string
-	Environment *string
-}
-
-func (b WorkerServiceBinding) Type() WorkerBindingType {
-	return WorkerServiceBindingType
-}
-
-func (b WorkerServiceBinding) serialize(bindingName string) (workerBindingMeta, workerBindingBodyWriter, error) {
-	if b.Service == "" {
-		return nil, nil, errors.Errorf(`Service for binding "%s" cannot be empty`, bindingName)
-	}
-
-	meta := workerBindingMeta{
-		"name":    bindingName,
-		"type":    b.Type(),
-		"service": b.Service,
-	}
-
-	if b.Environment != nil {
-		meta["environment"] = *b.Environment
-	}
-
-	return meta, nil, nil
-}
-
 // Each binding that adds a part to the multipart form body will need
 // a unique part name so we just generate a random 128bit hex string.
 func getRandomPartName() string {
@@ -454,13 +397,6 @@ func (api *API) ListWorkerBindings(ctx context.Context, requestParams *WorkerReq
 		}
 
 		switch WorkerBindingType(bType) {
-		case WorkerDurableObjectBindingType:
-			class_name := jsonBinding["class_name"].(string)
-			script_name := jsonBinding["script_name"].(string)
-			bindingListItem.Binding = WorkerDurableObjectBinding{
-				ClassName:  class_name,
-				ScriptName: script_name,
-			}
 		case WorkerKvNamespaceBindingType:
 			namespaceID := jsonBinding["namespace_id"].(string)
 			bindingListItem.Binding = WorkerKvNamespaceBinding{
@@ -479,13 +415,6 @@ func (api *API) ListWorkerBindings(ctx context.Context, requestParams *WorkerReq
 			bindingListItem.Binding = WorkerPlainTextBinding{
 				Text: text,
 			}
-		case WorkerServiceBindingType:
-			service := jsonBinding["service"].(string)
-			environment := jsonBinding["environment"].(string)
-			bindingListItem.Binding = WorkerServiceBinding{
-				Service:     service,
-				Environment: &environment,
-			}
 		case WorkerSecretTextBindingType:
 			bindingListItem.Binding = WorkerSecretTextBinding{}
 		default:


Test patch:
diff --git a/logpush_test.go b/logpush_test.go
index 7f1f297a6..bc96220a1 100644
--- a/logpush_test.go
+++ b/logpush_test.go
@@ -4,7 +4,6 @@ import (
 	"context"
 	"encoding/json"
 	"fmt"
-	"io/ioutil"
 	"log"
 	"net/http"
 	"strconv"
@@ -20,24 +19,9 @@ const (
 	serverLogpushJobDescription = `{
 	"id": %d,
 	"dataset": "http_requests",
-	"kind": "",
-	"enabled": false,
+    "enabled": false,
 	"name": "example.com",
-	"logpull_options": "fields=RayID,ClientIP,EdgeStartTimestamp&timestamps=rfc3339",
-	"destination_conf": "s3://mybucket/logs?region=us-west-2",
-	"last_complete": "%[2]s",
-	"last_error": "%[2]s",
-	"error_message": "test",
-	"frequency": "high"
-  }
-`
-	serverEdgeLogpushJobDescription = `{
-	"id": %d,
-	"dataset": "http_requests",
-	"kind": "edge",
-	"enabled": true,
-	"name": "example.com",
-	"logpull_options": "fields=RayID,ClientIP,EdgeStartTimestamp&timestamps=rfc3339",
+    "logpull_options": "fields=RayID,ClientIP,EdgeStartTimestamp&timestamps=rfc3339",
 	"destination_conf": "s3://mybucket/logs?region=us-west-2",
 	"last_complete": "%[2]s",
 	"last_error": "%[2]s",
@@ -46,13 +30,13 @@ const (
   }
 `
 	serverLogpushGetOwnershipChallengeDescription = `{
-	"filename": "logs/challenge-filename.txt",
+    "filename": "logs/challenge-filename.txt",
 	"valid": true,
 	"message": ""
   }
 `
 	serverLogpushGetOwnershipChallengeInvalidResponseDescription = `{
-	"filename": "logs/challenge-filename.txt",
+    "filename": "logs/challenge-filename.txt",
 	"valid": false,
 	"message": "destination is invalid"
   }
@@ -73,19 +57,6 @@ var (
 		ErrorMessage:    "test",
 		Frequency:       "high",
 	}
-	expectedEdgeLogpushJobStruct = LogpushJob{
-		ID:              jobID,
-		Dataset:         "http_requests",
-		Kind:            "edge",
-		Enabled:         true,
-		Name:            "example.com",
-		LogpullOptions:  "fields=RayID,ClientIP,EdgeStartTimestamp&timestamps=rfc3339",
-		DestinationConf: "s3://mybucket/logs?region=us-west-2",
-		LastComplete:    &testLogpushTimestamp,
-		LastError:       &testLogpushTimestamp,
-		ErrorMessage:    "test",
-		Frequency:       "high",
-	}
 	expectedLogpushGetOwnershipChallengeStruct = LogpushGetOwnershipChallenge{
 		Filename: "logs/challenge-filename.txt",
 		Valid:    true,
@@ -127,149 +98,58 @@ func TestLogpushJobs(t *testing.T) {
 }
 
 func TestGetLogpushJob(t *testing.T) {
-	testCases := map[string]struct {
-		result string
-		want   LogpushJob
-	}{
-		"core logpush job": {
-			result: serverLogpushJobDescription,
-			want:   expectedLogpushJobStruct,
-		},
-		"edge logpush job": {
-			result: serverEdgeLogpushJobDescription,
-			want:   expectedEdgeLogpushJobStruct,
-		},
-	}
-
-	for name, tc := range testCases {
-		t.Run(name, func(t *testing.T) {
-			setup()
-			defer teardown()
+	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, `{
-				  "result": %s,
-				  "success": true,
-				  "errors": null,
-				  "messages": null
-				}
-				`, fmt.Sprintf(tc.result, jobID, testLogpushTimestamp.Format(time.RFC3339Nano)))
-			}
+	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, `{
+		  "result": %s,
+		  "success": true,
+		  "errors": null,
+		  "messages": null
+		}
+		`, fmt.Sprintf(serverLogpushJobDescription, jobID, testLogpushTimestamp.Format(time.RFC3339Nano)))
+	}
 
-			mux.HandleFunc("/zones/"+testZoneID+"/logpush/jobs/"+strconv.Itoa(jobID), handler)
+	mux.HandleFunc("/zones/"+testZoneID+"/logpush/jobs/"+strconv.Itoa(jobID), handler)
+	want := expectedLogpushJobStruct
 
-			actual, err := client.GetZoneLogpushJob(context.Background(), testZoneID, jobID)
-			if assert.NoError(t, err) {
-				assert.Equal(t, tc.want, actual)
-			}
-		})
+	actual, err := client.GetZoneLogpushJob(context.Background(), testZoneID, jobID)
+	if assert.NoError(t, err) {
+		assert.Equal(t, want, actual)
 	}
 }
 
 func TestCreateLogpushJob(t *testing.T) {
-	testCases := map[string]struct {
-		newJob  LogpushJob
-		payload string
-		result  string
-		want    LogpushJob
-	}{
-		"core logpush job": {
-			newJob: LogpushJob{
-				Dataset:         "http_requests",
-				Enabled:         false,
-				Name:            "example.com",
-				LogpullOptions:  "fields=RayID,ClientIP,EdgeStartTimestamp&timestamps=rfc3339",
-				DestinationConf: "s3://mybucket/logs?region=us-west-2",
-			},
-			payload: `{
-				"dataset": "http_requests",
-				"enabled":false,
-				"name":"example.com",
-				"logpull_options":"fields=RayID,ClientIP,EdgeStartTimestamp&timestamps=rfc3339",
-				"destination_conf":"s3://mybucket/logs?region=us-west-2"
-			}`,
-			result: serverLogpushJobDescription,
-			want:   expectedLogpushJobStruct,
-		},
-		"edge logpush job": {
-			newJob: LogpushJob{
-				Dataset:         "http_requests",
-				Enabled:         true,
-				Name:            "example.com",
-				Kind:            "edge",
-				LogpullOptions:  "fields=RayID,ClientIP,EdgeStartTimestamp&timestamps=rfc3339",
-				DestinationConf: "s3://mybucket/logs?region=us-west-2",
-			},
-			payload: `{
-				"dataset": "http_requests",
-				"enabled":true,
-				"name":"example.com",
-				"kind":"edge",
-				"logpull_options":"fields=RayID,ClientIP,EdgeStartTimestamp&timestamps=rfc3339",
-				"destination_conf":"s3://mybucket/logs?region=us-west-2"
-			}`,
-			result: serverEdgeLogpushJobDescription,
-			want:   expectedEdgeLogpushJobStruct,
-		},
-		"filtered edge logpush job": {
-			newJob: LogpushJob{
-				Dataset:         "http_requests",
-				Enabled:         true,
-				Name:            "example.com",
-				Kind:            "edge",
-				LogpullOptions:  "fields=RayID,ClientIP,EdgeStartTimestamp&timestamps=rfc3339",
-				DestinationConf: "s3://mybucket/logs?region=us-west-2",
-				Filter: &LogpushJobFilters{
-					Where: LogpushJobFilter{Key: "ClientRequestHost", Operator: "eq", Value: "example.com"},
-				},
-			},
-			payload: `{
-				"dataset": "http_requests",
-				"enabled":true,
-				"name":"example.com",
-				"kind":"edge",
-				"logpull_options":"fields=RayID,ClientIP,EdgeStartTimestamp&timestamps=rfc3339",
-				"destination_conf":"s3://mybucket/logs?region=us-west-2",
-				"filter":"{\"where\":{\"key\":\"ClientRequestHost\",\"operator\":\"eq\",\"value\":\"example.com\"}}"
-			}`,
-			result: serverEdgeLogpushJobDescription,
-			want:   expectedEdgeLogpushJobStruct,
-		},
+	setup()
+	defer teardown()
+	newJob := LogpushJob{
+		Enabled:         false,
+		Name:            "example.com",
+		LogpullOptions:  "fields=RayID,ClientIP,EdgeStartTimestamp&timestamps=rfc3339",
+		DestinationConf: "s3://mybucket/logs?region=us-west-2",
 	}
 
-	for name, tc := range testCases {
-		t.Run(name, func(t *testing.T) {
-			setup()
-			defer teardown()
-
-			handler := func(w http.ResponseWriter, r *http.Request) {
-				assert.Equal(t, http.MethodPost, r.Method, "Expected method 'POST', got %s", r.Method)
-				b, err := ioutil.ReadAll(r.Body)
-				defer r.Body.Close()
-
-				if assert.NoError(t, err) {
-					assert.JSONEq(t, tc.payload, string(b), "JSON payload not equal")
-				}
-
-				w.Header().Set("content-type", "application/json")
-				fmt.Fprintf(w, `{
-				"result": %s,
-				"success": true,
-				"errors": null,
-				"messages": null
-				}
-				`, fmt.Sprintf(tc.result, jobID, testLogpushTimestamp.Format(time.RFC3339Nano)))
-			}
+	handler := 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.Fprintf(w, `{
+		  "result": %s,
+		  "success": true,
+		  "errors": null,
+		  "messages": null
+		}
+		`, fmt.Sprintf(serverLogpushJobDescription, jobID, testLogpushTimestamp.Format(time.RFC3339Nano)))
+	}
 
-			mux.HandleFunc("/zones/"+testZoneID+"/logpush/jobs", handler)
+	mux.HandleFunc("/zones/"+testZoneID+"/logpush/jobs", handler)
+	want := &expectedLogpushJobStruct
 
-			actual, err := client.CreateZoneLogpushJob(context.Background(), testZoneID, tc.newJob)
-			if assert.NoError(t, err) {
-				assert.Equal(t, tc.want, *actual)
-			}
-		})
+	actual, err := client.CreateZoneLogpushJob(context.Background(), testZoneID, newJob)
+	if assert.NoError(t, err) {
+		assert.Equal(t, want, actual)
 	}
 }
 
diff --git a/magic_transit_ipsec_tunnel_test.go b/magic_transit_ipsec_tunnel_test.go
index ef7a0624a..6bb21c5e4 100644
--- a/magic_transit_ipsec_tunnel_test.go
+++ b/magic_transit_ipsec_tunnel_test.go
@@ -82,8 +82,7 @@ func TestGetMagicTransitIPsecTunnel(t *testing.T) {
           "customer_endpoint": "203.0.113.1",
           "cloudflare_endpoint": "203.0.113.2",
           "interface_address": "192.0.2.0/31",
-          "description": "Tunnel for ISP X",
-          "allow_null_cipher": true
+          "description": "Tunnel for ISP X"
         }
       }
     }`)
@@ -103,7 +102,6 @@ func TestGetMagicTransitIPsecTunnel(t *testing.T) {
 		CloudflareEndpoint: "203.0.113.2",
 		InterfaceAddress:   "192.0.2.0/31",
 		Description:        "Tunnel for ISP X",
-		AllowNullCipher:    true,
 	}
 
 	actual, err := client.GetMagicTransitIPsecTunnel(context.Background(), testAccountID, "c4a7362d577a6c3019a474fd6f485821")
@@ -183,8 +181,7 @@ func TestUpdateMagicTransitIPsecTunnel(t *testing.T) {
           "customer_endpoint": "203.0.113.1",
           "cloudflare_endpoint": "203.0.113.2",
           "interface_address": "192.0.2.0/31",
-          "description": "Tunnel for ISP X",
-          "allow_null_cipher": true
+          "description": "Tunnel for ISP X"
         }
       }
     }`)
@@ -204,7 +201,6 @@ func TestUpdateMagicTransitIPsecTunnel(t *testing.T) {
 		CloudflareEndpoint: "203.0.113.2",
 		InterfaceAddress:   "192.0.2.0/31",
 		Description:        "Tunnel for ISP X",
-		AllowNullCipher:    true,
 	}
 
 	actual, err := client.UpdateMagicTransitIPsecTunnel(context.Background(), testAccountID, "c4a7362d577a6c3019a474fd6f485821", want)
diff --git a/pages_deployment_test.go b/pages_deployment_test.go
index ea809528e..55fb1bdfa 100644
--- a/pages_deployment_test.go
+++ b/pages_deployment_test.go
@@ -138,42 +138,6 @@ const (
 			}
 		]
 	}`
-
-	testPagesDeploymentLogsResponse = `
-	{
-		"total": 6,
-		"includes_container_logs": true,
-		"data": [
-			{
-				"ts": "2021-01-01T00:00:00Z",
-				"line": "Installing dependencies"
-			},
-			{
-				"ts": "2021-01-01T00:00:00Z",
-				"line": "Verify run directory"
-			},
-			{
-				"ts": "2021-01-01T00:00:00Z",
-				"line": "Executing user command: bash test.sh"
-			},
-			{
-				"ts": "2021-01-01T00:00:00Z",
-				"line": "Finished"
-			},
-			{
-				"ts": "2021-01-01T00:00:00Z",
-				"line": "Building functions..."
-			},
-			{
-				"ts": "2021-01-01T00:00:00Z",
-				"line": "Validating asset output directory"
-			},
-			{
-				"ts": "2021-01-01T00:00:00Z",
-				"line": "Parsed 2 valid header rules."
-			}
-		]
-	}`
 )
 
 var (
@@ -303,43 +267,6 @@ var (
 			Message:   "Parsed 2 valid header rules.",
 		},
 	}
-
-	expectedPagesDeploymentLogs = &PagesDeploymentLogs{
-		Total:                 6,
-		IncludesContainerLogs: true,
-		Data:                  expectedPagesDeploymentLogEntries,
-	}
-
-	expectedPagesDeploymentLogEntries = []PagesDeploymentLogEntry{
-		{
-			Timestamp: &pagesDeploymentDummyTime,
-			Line:      "Installing dependencies",
-		},
-		{
-			Timestamp: &pagesDeploymentDummyTime,
-			Line:      "Verify run directory",
-		},
-		{
-			Timestamp: &pagesDeploymentDummyTime,
-			Line:      "Executing user command: bash test.sh",
-		},
-		{
-			Timestamp: &pagesDeploymentDummyTime,
-			Line:      "Finished",
-		},
-		{
-			Timestamp: &pagesDeploymentDummyTime,
-			Line:      "Building functions...",
-		},
-		{
-			Timestamp: &pagesDeploymentDummyTime,
-			Line:      "Validating asset output directory",
-		},
-		{
-			Timestamp: &pagesDeploymentDummyTime,
-			Line:      "Parsed 2 valid header rules.",
-		},
-	}
 )
 
 func TestListPagesDeployments(t *testing.T) {
@@ -446,35 +373,6 @@ func TestGetPagesDeploymentStageLogs(t *testing.T) {
 	}
 }
 
-func TestGetPagesDeploymentLogs(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": %s
-		}`, testPagesDeploymentLogsResponse)
-	}
-
-	mux.HandleFunc("/accounts/"+testAccountID+"/pages/projects/test/deployments/0012e50b-fa5d-44db-8cb5-1f372785dcbe/history/logs", handler)
-
-	actual, err := client.GetPagesDeploymentLogs(context.Background(), GetPagesDeploymentLogsParams{
-		AccountID:    testAccountID,
-		ProjectName:  "test",
-		DeploymentID: "0012e50b-fa5d-44db-8cb5-1f372785dcbe",
-		SizeOptions:  SizeOptions{},
-	})
-	if assert.NoError(t, err) {
-		assert.Equal(t, *expectedPagesDeploymentLogs, actual)
-	}
-}
-
 func TestDeletePagesDeployment(t *testing.T) {
 	setup()
 	defer teardown()
diff --git a/tunnel_test.go b/tunnel_test.go
index 7db030165..50819828f 100644
--- a/tunnel_test.go
+++ b/tunnel_test.go
@@ -189,126 +189,6 @@ func TestCreateTunnel(t *testing.T) {
 	}
 }
 
-func TestUpdateTunnelConfiguration(t *testing.T) {
-	setup()
-	defer teardown()
-
-	handler := func(w http.ResponseWriter, r *http.Request) {
-		assert.Equal(t, http.MethodPut, r.Method, "Expected method '%s', got %s", http.MethodPut, r.Method)
-
-		w.Header().Set("content-type", "application/json")
-		fmt.Fprintf(w, `{
-			"success": true,
-			"errors": [],
-			"messages": [],
-			"result": {
-			  "config": "{\"warp-routing\": {\"enabled\": true},  \"originRequest\" : {\"connectTimeout\": 10}, \"ingress\" : [ {\"hostname\": \"test.example.com\", \"service\": \"https://localhost:8000\" } , {\"service\": \"http_status:404\"} ]}",
-			  "tunnel_id": "f174e90a-fafe-4643-bbbc-4a0ed4fc8415",
-			  "version": 5,
-			  "created_at": "2021-01-25T18:22:34.317854Z"
-			}
-		  }`)
-	}
-
-	mux.HandleFunc("/accounts/"+testAccountID+"/cfd_tunnel/f174e90a-fafe-4643-bbbc-4a0ed4fc8415/configurations", handler)
-	want := TunnelConfigurationResult{
-		TunnelID: "f174e90a-fafe-4643-bbbc-4a0ed4fc8415",
-		Version:  5,
-		Config: TunnelConfiguration{
-			Ingress: []UnvalidatedIngressRule{
-				{
-					Hostname: "test.example.com",
-					Service:  "https://localhost:8000",
-				},
-				{
-					Service: "http_status:404",
-				},
-			},
-			WarpRouting: &WarpRoutingConfig{
-				Enabled: true,
-			},
-			OriginRequest: OriginRequestConfig{
-				ConnectTimeout: DurationPtr(10),
-			},
-		}}
-
-	actual, err := client.UpdateTunnelConfiguration(context.Background(), TunnelConfigurationParams{
-		AccountID: testAccountID,
-		TunnelID:  "f174e90a-fafe-4643-bbbc-4a0ed4fc8415",
-		Config: TunnelConfiguration{
-			Ingress: []UnvalidatedIngressRule{
-				{
-					Hostname: "test.example.com",
-					Service:  "https://localhost:8000",
-				},
-				{
-					Service: "http_status:404",
-				},
-			},
-			WarpRouting: &WarpRoutingConfig{
-				Enabled: true,
-			},
-			OriginRequest: OriginRequestConfig{
-				ConnectTimeout: DurationPtr(10 * time.Second),
-			},
-		},
-	})
-
-	if assert.NoError(t, err) {
-		assert.Equal(t, want, actual)
-	}
-}
-
-func TestGetTunnelConfiguration(t *testing.T) {
-	setup()
-	defer teardown()
-
-	handler := func(w http.ResponseWriter, r *http.Request) {
-		assert.Equal(t, http.MethodGet, r.Method, "Expected method '%s', got %s", http.MethodGet, r.Method)
-
-		w.Header().Set("content-type", "application/json")
-		fmt.Fprintf(w, `{
-			"success": true,
-			"errors": [],
-			"messages": [],
-			"result": {
-			  "config": "{\"warp-routing\": {\"enabled\": true},  \"originRequest\" : {\"connectTimeout\": 10}, \"ingress\" : [ {\"hostname\": \"test.example.com\", \"service\": \"https://localhost:8000\" } , {\"service\": \"http_status:404\"} ]}",
-			  "tunnel_id": "f174e90a-fafe-4643-bbbc-4a0ed4fc8415",
-			  "version": 5,
-			  "created_at": "2021-01-25T18:22:34.317854Z"
-			}
-		  }`)
-	}
-
-	mux.HandleFunc("/accounts/"+testAccountID+"/cfd_tunnel/f174e90a-fafe-4643-bbbc-4a0ed4fc8415/configurations", handler)
-	want := TunnelConfigurationResult{
-		TunnelID: "f174e90a-fafe-4643-bbbc-4a0ed4fc8415",
-		Version:  5,
-		Config: TunnelConfiguration{
-			Ingress: []UnvalidatedIngressRule{
-				{
-					Hostname: "test.example.com",
-					Service:  "https://localhost:8000",
-				},
-				{
-					Service: "http_status:404",
-				},
-			},
-			WarpRouting: &WarpRoutingConfig{
-				Enabled: true,
-			},
-			OriginRequest: OriginRequestConfig{
-				ConnectTimeout: DurationPtr(10),
-			},
-		}}
-
-	actual, err := client.GetTunnelConfiguration(context.Background(), GetTunnelConfigurationParams{AccountID: testAccountID, TunnelID: "f174e90a-fafe-4643-bbbc-4a0ed4fc8415"})
-
-	if assert.NoError(t, err) {
-		assert.Equal(t, want, actual)
-	}
-}
-
 func TestDeleteTunnel(t *testing.T) {
 	setup()
 	defer teardown()
diff --git a/user_test.go b/user_test.go
index 021d747f9..9a47c096f 100644
--- a/user_test.go
+++ b/user_test.go
@@ -195,50 +195,3 @@ func TestUser_UserBillingProfile(t *testing.T) {
 		assert.Equal(t, userBillingProfile, want, "structs not equal")
 	}
 }
-
-func TestUser_UserBillingHistory(t *testing.T) {
-	setup()
-	defer teardown()
-	mux.HandleFunc("/user/billing/history", 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": "b69a9f3492637782896352daae219e7d",
-      "type": "charge",
-      "action": "subscription",
-      "description": "The billing item description",
-      "occurred_at": "2014-03-01T12:21:59.3456Z",
-      "amount": 20.99,
-      "currency": "USD",
-      "zone": {
-        "name": "example.com"
-      }
-    }
-  ]
-}`)
-	})
-
-	userBillingProfile, err := client.UserBillingHistory(context.Background(), UserBillingOptions{})
-
-	OccurredAt, _ := time.Parse(time.RFC3339, "2014-03-01T12:21:59.3456Z")
-
-	want := []UserBillingHistory{{
-		ID:          "b69a9f3492637782896352daae219e7d",
-		Type:        "charge",
-		Action:      "subscription",
-		Description: "The billing item description",
-		OccurredAt:  &OccurredAt,
-		Amount:      20.99,
-		Currency:    "USD",
-		Zone:        userBillingHistoryZone{Name: "example.com"},
-	}}
-
-	if assert.NoError(t, err) {
-		assert.Equal(t, userBillingProfile, want, "structs not equal")
-	}
-}
diff --git a/waiting_room_test.go b/waiting_room_test.go
index 3377c2a52..0018e3f42 100644
--- a/waiting_room_test.go
+++ b/waiting_room_test.go
@@ -25,6 +25,7 @@ var waitingRoomJSON = fmt.Sprintf(`
       "modified_on": "%s",
       "name": "production_webinar",
       "description": "Production - DO NOT MODIFY",
+      "queueing_method": "random",
       "suspended": false,
       "host": "shop.example.com",
       "path": "/shop/checkout",
@@ -89,6 +90,7 @@ var waitingRoom = WaitingRoom{
 	ModifiedOn:                 testTimestampWaitingRoom,
 	Name:                       "production_webinar",
 	Description:                "Production - DO NOT MODIFY",
+	QueueingMethod:             "random",
 	Suspended:                  false,
 	Host:                       "shop.example.com",
 	Path:                       "/shop/checkout",
diff --git a/workers_test.go b/workers_test.go
index 35e8a8a01..282cf7754 100644
--- a/workers_test.go
+++ b/workers_test.go
@@ -127,12 +127,6 @@ const (
 				"name": "MY_SECRET_TEXT",
 				"type": "secret_text"
 			},
-			{
-				"name": "MY_SERVICE_BINDING",
-				"type": "service",
-				"service": "MY_SERVICE",
-				"environment": "MY_ENVIRONMENT"
-			},
 			{
 				"name": "MY_NEW_BINDING",
 				"type": "some_imaginary_new_binding_type"
@@ -455,45 +449,6 @@ func TestWorkers_UploadWorkerWithNameErrorsWithoutAccountId(t *testing.T) {
 	assert.Error(t, err)
 }
 
-func TestWorkers_UploadWorkerWithDurableObjectBinding(t *testing.T) {
-	setup(UsingAccount("foo"))
-	defer teardown()
-
-	handler := func(w http.ResponseWriter, r *http.Request) {
-		assert.Equal(t, http.MethodPut, r.Method, "Expected method 'PUT', got %s", r.Method)
-
-		mpUpload, err := parseMultipartUpload(r)
-		assert.NoError(t, err)
-
-		expectedBindings := map[string]workerBindingMeta{
-			"b1": {
-				"name":        "b1",
-				"type":        "durable_object_namespace",
-				"class_name":  "TheClass",
-				"script_name": "the_script",
-			},
-		}
-		assert.Equal(t, workerScript, mpUpload.Script)
-		assert.Equal(t, expectedBindings, mpUpload.BindingMeta)
-
-		w.Header().Set("content-type", "application/json")
-		fmt.Fprintf(w, uploadWorkerResponseData) //nolint
-	}
-	mux.HandleFunc("/accounts/foo/workers/scripts/bar", handler)
-
-	scriptParams := WorkerScriptParams{
-		Script: workerScript,
-		Bindings: map[string]WorkerBinding{
-			"b1": WorkerDurableObjectBinding{
-				ClassName:  "TheClass",
-				ScriptName: "the_script",
-			},
-		},
-	}
-	_, err := client.UploadWorkerWithBindings(context.Background(), &WorkerRequestParams{ScriptName: "bar"}, &scriptParams)
-	assert.NoError(t, err)
-}
-
 func TestWorkers_UploadWorkerWithInheritBinding(t *testing.T) {
 	setup(UsingAccount("foo"))
 	defer teardown()
@@ -714,54 +669,6 @@ func TestWorkers_UploadWorkerWithSecretTextBinding(t *testing.T) {
 	assert.NoError(t, err)
 }
 
-func TestWorkers_UploadWorkerWithServiceBinding(t *testing.T) {
-	setup(UsingAccount("foo"))
-	defer teardown()
-
-	handler := func(w http.ResponseWriter, r *http.Request) {
-		assert.Equal(t, http.MethodPut, r.Method, "Expected method 'PUT', got %s", r.Method)
-
-		mpUpload, err := parseMultipartUpload(r)
-		assert.NoError(t, err)
-
-		expectedBindings := map[string]workerBindingMeta{
-			"b1": {
-				"name":    "b1",
-				"type":    "service",
-				"service": "the_service",
-			},
-			"b2": {
-				"name":        "b2",
-				"type":        "service",
-				"service":     "the_service",
-				"environment": "the_environment",
-			},
-		}
-		assert.Equal(t, workerScript, mpUpload.Script)
-		assert.Equal(t, expectedBindings, mpUpload.BindingMeta)
-
-		w.Header().Set("content-type", "application/json")
-		fmt.Fprintf(w, uploadWorkerResponseData) //nolint
-	}
-	mux.HandleFunc("/accounts/foo/workers/scripts/bar", handler)
-
-	environment := "the_environment"
-	scriptParams := WorkerScriptParams{
-		Script: workerScript,
-		Bindings: map[string]WorkerBinding{
-			"b1": WorkerServiceBinding{
-				Service: "the_service",
-			},
-			"b2": WorkerServiceBinding{
-				Service:     "the_service",
-				Environment: &environment,
-			},
-		},
-	}
-	_, err := client.UploadWorkerWithBindings(context.Background(), &WorkerRequestParams{ScriptName: "bar"}, &scriptParams)
-	assert.NoError(t, err)
-}
-
 func TestWorkers_CreateWorkerRoute(t *testing.T) {
 	setup()
 	defer teardown()
@@ -1029,7 +936,7 @@ func TestWorkers_ListWorkerBindingsMultiScript(t *testing.T) {
 	assert.NoError(t, err)
 
 	assert.Equal(t, successResponse, res.Response)
-	assert.Equal(t, 6, len(res.BindingList))
+	assert.Equal(t, 5, len(res.BindingList))
 
 	assert.Equal(t, res.BindingList[0], WorkerBindingListItem{
 		Name: "MY_KV",
@@ -1060,21 +967,11 @@ func TestWorkers_ListWorkerBindingsMultiScript(t *testing.T) {
 	})
 	assert.Equal(t, WorkerSecretTextBindingType, res.BindingList[3].Binding.Type())
 
-	environment := "MY_ENVIRONMENT"
 	assert.Equal(t, res.BindingList[4], WorkerBindingListItem{
-		Name: "MY_SERVICE_BINDING",
-		Binding: WorkerServiceBinding{
-			Service:     "MY_SERVICE",
-			Environment: &environment,
-		},
-	})
-	assert.Equal(t, WorkerServiceBindingType, res.BindingList[4].Binding.Type())
-
-	assert.Equal(t, res.BindingList[5], WorkerBindingListItem{
 		Name:    "MY_NEW_BINDING",
 		Binding: WorkerInheritBinding{},
 	})
-	assert.Equal(t, WorkerInheritBindingType, res.BindingList[5].Binding.Type())
+	assert.Equal(t, WorkerInheritBindingType, res.BindingList[4].Binding.Type())
 }
 
 func TestWorkers_UpdateWorkerRouteErrorsWhenMixingSingleAndMultiScriptProperties(t *testing.T) {