# coding: utf-8

# -------------------------------------------------------------------------
# Copyright (c) Microsoft Corporation. All rights reserved.
# Licensed under the MIT License. See License.txt in the project root for
# license information.
# --------------------------------------------------------------------------


# TEST SCENARIO COVERAGE
# ----------------------
# Methods Total   : 572
# Methods Covered : 111
# Examples Total  : 131
# Examples Tested : 131
# Coverage %      : 19
# ----------------------

# Current Operation Coverage:
#   AppServiceCertificateOrders: 0/20
#   CertificateRegistrationProvider: 1/1
#   Domains: 1/15
#   TopLevelDomains: 3/3
#   DomainRegistrationProvider: 1/1
#   Certificates: 6/6
#   DeletedWebApps: 2/3
#   Diagnostics: 22/22
#   Provider: 1/3
#   Recommendations: 0/15
#   : 1/16
#   WebApps: 33/372
#   StaticSites: 26/26
#   AppServiceEnvironments: 2/36
#   AppServicePlans: 6/27
#   ResourceHealthMetadata: 6/6

import unittest

import azure.mgmt.web
from devtools_testutils import AzureMgmtTestCase, RandomNameResourceGroupPreparer
from devtools_testutils.fake_credentials import FAKE_LOGIN_PASSWORD

AZURE_LOCATION = "eastus"


class MgmtWebSiteTest(AzureMgmtTestCase):

    def setUp(self):
        super(MgmtWebSiteTest, self).setUp()
        self.mgmt_client = self.create_mgmt_client(azure.mgmt.web.WebSiteManagementClient)

    @RandomNameResourceGroupPreparer(location=AZURE_LOCATION)
    def test_web(self, resource_group):

        SUBSCRIPTION_ID = self.settings.SUBSCRIPTION_ID
        TENANT_ID = self.settings.TENANT_ID
        RESOURCE_GROUP = resource_group.name
        DOMAIN_NAME = "myDomain"
        NAME = "my"
        DELETED_SITE_ID = "myDeletedSiteId"
        DETECTOR_NAME = "myDetector"
        SITE_NAME = "mySite"
        DIAGNOSTIC_CATEGORY = "myDiagnosticCategory"
        ANALYSIS_NAME = "myAnalysis"
        SLOT = "mySlot"
        BASIC_PUBLISHING_CREDENTIALS_POLICY_NAME = "myBasicPublishingCredentialsPolicy"
        CONFIG_NAME = "myConfig"
        APP_SETTING_KEY = "myAppSettingKey"
        INSTANCE_ID = "myInstanceId"
        NETWORK_TRACE_NAME = "myNetworkTrace"
        OPERATION_ID = "myOperationId"
        PRIVATE_ENDPOINT_CONNECTION_NAME = "myPrivateEndpointConnection"
        AUTHPROVIDER = "myAuthprovider"
        USERID = "myUserid"
        PR_ID = "myPrId"
        RESOURCE_HEALTH_METADATA_NAME = "myResourceHealthMetadata"

        # --------------------------------------------------------------------------
        # /AppServicePlans/put/Create Or Update App Service plan[put]
        # --------------------------------------------------------------------------
        BODY = {
            "kind": "app",
            "location": AZURE_LOCATION,
            "sku": {"name": "P1", "tier": "Premium", "size": "P1", "family": "P", "capacity": "1"},
        }
        result = self.mgmt_client.app_service_plans.begin_create_or_update(
            resource_group_name=RESOURCE_GROUP, name=NAME, app_service_plan=BODY
        )
        result = result.result()

        # --------------------------------------------------------------------------
        # /StaticSites/put/Create or update a static site[put]
        # --------------------------------------------------------------------------
        BODY = {
            "location": AZURE_LOCATION,
            "sku": {"name": "Basic", "tier": "Basic"},
            "repository_url": "https://github.com/username/RepoName",
            "branch": "master",
            "repository_token": "repoToken123",
            "build_properties": {"app_location": "app", "api_location": "api", "app_artifact_location": "build"},
        }
        result = self.mgmt_client.static_sites.create_or_update_static_site(
            resource_group_name=RESOURCE_GROUP, name=NAME, static_site_envelope=BODY
        )

        # --------------------------------------------------------------------------
        # /Certificates/put/Create Or Update Certificate[put]
        # --------------------------------------------------------------------------
        BODY = {
            "location": AZURE_LOCATION,
            "host_names": ["ServerCert"],
            "password": FAKE_LOGIN_PASSWORD,  # this may not work -- check when tests are active
        }
        result = self.mgmt_client.certificates.create_or_update(
            resource_group_name=RESOURCE_GROUP, name=NAME, certificate_envelope=BODY
        )

        # --------------------------------------------------------------------------
        # /StaticSites/put/Creates or updates the function app settings of a static site.[put]
        # --------------------------------------------------------------------------
        BODY = {"setting1": "someval", "setting2": "someval2"}
        result = self.mgmt_client.static_sites.create_or_update_static_site_function_app_settings(
            resource_group_name=RESOURCE_GROUP, name=NAME, config_name=CONFIG_NAME, app_settings=BODY
        )

        # --------------------------------------------------------------------------
        # /StaticSites/put/Create or update a custom domain for a static site[put]
        # --------------------------------------------------------------------------
        result = self.mgmt_client.static_sites.create_or_update_static_site_custom_domain(
            resource_group_name=RESOURCE_GROUP, name=NAME, domain_name=DOMAIN_NAME
        )

        # --------------------------------------------------------------------------
        # /StaticSites/put/Creates or updates the function app settings of a static site build.[put]
        # --------------------------------------------------------------------------
        BODY = {"setting1": "someval", "setting2": "someval2"}
        result = self.mgmt_client.static_sites.create_or_update_static_site_build_function_app_settings(
            resource_group_name=RESOURCE_GROUP, name=NAME, pr_id=PR_ID, config_name=CONFIG_NAME, app_settings=BODY
        )

        # --------------------------------------------------------------------------
        # /WebApps/put/Approves or rejects a private endpoint connection for a site.[put]
        # --------------------------------------------------------------------------
        BODY = {
            "private_link_service_connection_state": {
                "status": "Approved",
                "description": "Approved by admin.",
                "actions_required": "",
            }
        }
        result = self.mgmt_client.web_apps.begin_approve_or_reject_private_endpoint_connection(
            resource_group_name=RESOURCE_GROUP,
            name=NAME,
            private_endpoint_connection_name=PRIVATE_ENDPOINT_CONNECTION_NAME,
            private_endpoint_wrapper=BODY,
        )
        result = result.result()

        # --------------------------------------------------------------------------
        # /WebApps/put/Update SCM Allowed[put]
        # --------------------------------------------------------------------------
        BODY = {"allow": True}
        result = self.mgmt_client.web_apps.update_scm_allowed(
            resource_group_name=RESOURCE_GROUP,
            name=NAME,
            basic_publishing_credentials_policy_name=BASIC_PUBLISHING_CREDENTIALS_POLICY_NAME,
            csm_publishing_access_policies_entity=BODY,
        )

        # --------------------------------------------------------------------------
        # /WebApps/put/Update FTP Allowed[put]
        # --------------------------------------------------------------------------
        BODY = {"allow": True}
        result = self.mgmt_client.web_apps.update_ftp_allowed(
            resource_group_name=RESOURCE_GROUP,
            name=NAME,
            basic_publishing_credentials_policy_name=BASIC_PUBLISHING_CREDENTIALS_POLICY_NAME,
            csm_publishing_access_policies_entity=BODY,
        )

        # --------------------------------------------------------------------------
        # /WebApps/get/Get the current status of a network trace operation for a site[get]
        # --------------------------------------------------------------------------
        result = self.mgmt_client.web_apps.get_network_trace_operation(
            resource_group_name=RESOURCE_GROUP, name=NAME, network_trace_name=NETWORK_TRACE_NAME
        )

        # --------------------------------------------------------------------------
        # /Diagnostics/get/Get App Detector[get]
        # --------------------------------------------------------------------------
        result = self.mgmt_client.diagnostics.get_site_detector(
            resource_group_name=RESOURCE_GROUP,
            site_name=SITE_NAME,
            diagnostic_category=DIAGNOSTIC_CATEGORY,
            detector_name=DETECTOR_NAME,
        )

        # --------------------------------------------------------------------------
        # /Diagnostics/get/Get App Slot Detector[get]
        # --------------------------------------------------------------------------
        result = self.mgmt_client.diagnostics.get_site_detector(
            resource_group_name=RESOURCE_GROUP,
            site_name=SITE_NAME,
            diagnostic_category=DIAGNOSTIC_CATEGORY,
            detector_name=DETECTOR_NAME,
        )

        # --------------------------------------------------------------------------
        # /Diagnostics/get/Get App Analysis[get]
        # --------------------------------------------------------------------------
        result = self.mgmt_client.diagnostics.get_site_analysis(
            resource_group_name=RESOURCE_GROUP,
            site_name=SITE_NAME,
            diagnostic_category=DIAGNOSTIC_CATEGORY,
            analysis_name=ANALYSIS_NAME,
        )

        # --------------------------------------------------------------------------
        # /Diagnostics/get/Get App Slot Analysis[get]
        # --------------------------------------------------------------------------
        result = self.mgmt_client.diagnostics.get_site_analysis(
            resource_group_name=RESOURCE_GROUP,
            site_name=SITE_NAME,
            diagnostic_category=DIAGNOSTIC_CATEGORY,
            analysis_name=ANALYSIS_NAME,
        )

        # --------------------------------------------------------------------------
        # /WebApps/get/Get FTP Allowed[get]
        # --------------------------------------------------------------------------
        result = self.mgmt_client.web_apps.get_ftp_allowed(
            resource_group_name=RESOURCE_GROUP,
            name=NAME,
            basic_publishing_credentials_policy_name=BASIC_PUBLISHING_CREDENTIALS_POLICY_NAME,
        )

        # --------------------------------------------------------------------------
        # /WebApps/get/Get SCM Allowed[get]
        # --------------------------------------------------------------------------
        result = self.mgmt_client.web_apps.get_scm_allowed(
            resource_group_name=RESOURCE_GROUP,
            name=NAME,
            basic_publishing_credentials_policy_name=BASIC_PUBLISHING_CREDENTIALS_POLICY_NAME,
        )

        # --------------------------------------------------------------------------
        # /ResourceHealthMetadata/get/Get ResourceHealthMetadata[get]
        # --------------------------------------------------------------------------
        result = self.mgmt_client.resource_health_metadata.get_by_site(
            resource_group_name=RESOURCE_GROUP, name=NAME, resource_health_metadata_name=RESOURCE_HEALTH_METADATA_NAME
        )

        # --------------------------------------------------------------------------
        # /WebApps/get/Get the current status of a network trace operation for a site[get]
        # --------------------------------------------------------------------------
        result = self.mgmt_client.web_apps.get_network_trace_operation(
            resource_group_name=RESOURCE_GROUP, name=NAME, network_trace_name=NETWORK_TRACE_NAME
        )

        # --------------------------------------------------------------------------
        # /Diagnostics/get/Get App Detector[get]
        # --------------------------------------------------------------------------
        result = self.mgmt_client.diagnostics.get_site_detector(
            resource_group_name=RESOURCE_GROUP,
            site_name=SITE_NAME,
            diagnostic_category=DIAGNOSTIC_CATEGORY,
            detector_name=DETECTOR_NAME,
        )

        # --------------------------------------------------------------------------
        # /Diagnostics/get/Get App Slot Detector[get]
        # --------------------------------------------------------------------------
        result = self.mgmt_client.diagnostics.get_site_detector(
            resource_group_name=RESOURCE_GROUP,
            site_name=SITE_NAME,
            diagnostic_category=DIAGNOSTIC_CATEGORY,
            detector_name=DETECTOR_NAME,
        )

        # --------------------------------------------------------------------------
        # /Diagnostics/get/Get App Analysis[get]
        # --------------------------------------------------------------------------
        result = self.mgmt_client.diagnostics.get_site_analysis(
            resource_group_name=RESOURCE_GROUP,
            site_name=SITE_NAME,
            diagnostic_category=DIAGNOSTIC_CATEGORY,
            analysis_name=ANALYSIS_NAME,
        )

        # --------------------------------------------------------------------------
        # /Diagnostics/get/Get App Slot Analysis[get]
        # --------------------------------------------------------------------------
        result = self.mgmt_client.diagnostics.get_site_analysis(
            resource_group_name=RESOURCE_GROUP,
            site_name=SITE_NAME,
            diagnostic_category=DIAGNOSTIC_CATEGORY,
            analysis_name=ANALYSIS_NAME,
        )

        # --------------------------------------------------------------------------
        # /Diagnostics/get/List App Detectors[get]
        # --------------------------------------------------------------------------
        result = self.mgmt_client.diagnostics.list_site_detectors(
            resource_group_name=RESOURCE_GROUP, site_name=SITE_NAME, diagnostic_category=DIAGNOSTIC_CATEGORY
        )

        # --------------------------------------------------------------------------
        # /Diagnostics/get/List App Slot Detectors[get]
        # --------------------------------------------------------------------------
        result = self.mgmt_client.diagnostics.list_site_detectors(
            resource_group_name=RESOURCE_GROUP, site_name=SITE_NAME, diagnostic_category=DIAGNOSTIC_CATEGORY
        )

        # --------------------------------------------------------------------------
        # /Diagnostics/get/List App Analyses[get]
        # --------------------------------------------------------------------------
        result = self.mgmt_client.diagnostics.list_site_analyses(
            resource_group_name=RESOURCE_GROUP, site_name=SITE_NAME, diagnostic_category=DIAGNOSTIC_CATEGORY
        )

        # --------------------------------------------------------------------------
        # /Diagnostics/get/List App Slot Analyses[get]
        # --------------------------------------------------------------------------
        result = self.mgmt_client.diagnostics.list_site_analyses(
            resource_group_name=RESOURCE_GROUP, site_name=SITE_NAME, diagnostic_category=DIAGNOSTIC_CATEGORY
        )

        # --------------------------------------------------------------------------
        # /WebApps/get/Get the current status of a network trace operation for a site[get]
        # --------------------------------------------------------------------------
        result = self.mgmt_client.web_apps.get_network_trace_operation(
            resource_group_name=RESOURCE_GROUP, name=NAME, network_trace_name=NETWORK_TRACE_NAME
        )

        # --------------------------------------------------------------------------
        # /WebApps/get/Get a private endpoint connection for a site.[get]
        # --------------------------------------------------------------------------
        result = self.mgmt_client.web_apps.get_private_endpoint_connection(
            resource_group_name=RESOURCE_GROUP,
            name=NAME,
            private_endpoint_connection_name=PRIVATE_ENDPOINT_CONNECTION_NAME,
        )

        # --------------------------------------------------------------------------
        # /Diagnostics/get/Get App Diagnostic Category[get]
        # --------------------------------------------------------------------------
        result = self.mgmt_client.diagnostics.get_site_diagnostic_category(
            resource_group_name=RESOURCE_GROUP, site_name=SITE_NAME, diagnostic_category=DIAGNOSTIC_CATEGORY
        )

        # --------------------------------------------------------------------------
        # /Diagnostics/get/Get App Slot Diagnostic Category[get]
        # --------------------------------------------------------------------------
        result = self.mgmt_client.diagnostics.get_site_diagnostic_category(
            resource_group_name=RESOURCE_GROUP, site_name=SITE_NAME, diagnostic_category=DIAGNOSTIC_CATEGORY
        )

        # --------------------------------------------------------------------------
        # /WebApps/get/Get Azure Key Vault app setting reference[get]
        # --------------------------------------------------------------------------
        result = self.mgmt_client.web_apps.get_app_setting_key_vault_reference(
            resource_group_name=RESOURCE_GROUP, name=NAME, config_name=CONFIG_NAME, app_setting_key=APP_SETTING_KEY
        )

        # --------------------------------------------------------------------------
        # /ResourceHealthMetadata/get/Get ResourceHealthMetadata[get]
        # --------------------------------------------------------------------------
        result = self.mgmt_client.resource_health_metadata.get_by_site(
            resource_group_name=RESOURCE_GROUP, name=NAME, resource_health_metadata_name=RESOURCE_HEALTH_METADATA_NAME
        )

        # --------------------------------------------------------------------------
        # /Diagnostics/get/List App Detectors[get]
        # --------------------------------------------------------------------------
        result = self.mgmt_client.diagnostics.list_site_detectors(
            resource_group_name=RESOURCE_GROUP, site_name=SITE_NAME, diagnostic_category=DIAGNOSTIC_CATEGORY
        )

        # --------------------------------------------------------------------------
        # /Diagnostics/get/List App Slot Detectors[get]
        # --------------------------------------------------------------------------
        result = self.mgmt_client.diagnostics.list_site_detectors(
            resource_group_name=RESOURCE_GROUP, site_name=SITE_NAME, diagnostic_category=DIAGNOSTIC_CATEGORY
        )

        # --------------------------------------------------------------------------
        # /Diagnostics/get/List App Analyses[get]
        # --------------------------------------------------------------------------
        result = self.mgmt_client.diagnostics.list_site_analyses(
            resource_group_name=RESOURCE_GROUP, site_name=SITE_NAME, diagnostic_category=DIAGNOSTIC_CATEGORY
        )

        # --------------------------------------------------------------------------
        # /Diagnostics/get/List App Slot Analyses[get]
        # --------------------------------------------------------------------------
        result = self.mgmt_client.diagnostics.list_site_analyses(
            resource_group_name=RESOURCE_GROUP, site_name=SITE_NAME, diagnostic_category=DIAGNOSTIC_CATEGORY
        )

        # --------------------------------------------------------------------------
        # /Diagnostics/get/Get App Detector Response[get]
        # --------------------------------------------------------------------------
        result = self.mgmt_client.diagnostics.get_site_detector_response(
            resource_group_name=RESOURCE_GROUP, site_name=SITE_NAME, detector_name=DETECTOR_NAME
        )

        # --------------------------------------------------------------------------
        # /Diagnostics/get/Get App Slot Detector Response[get]
        # --------------------------------------------------------------------------
        result = self.mgmt_client.diagnostics.get_site_detector_response(
            resource_group_name=RESOURCE_GROUP, site_name=SITE_NAME, detector_name=DETECTOR_NAME
        )

        # --------------------------------------------------------------------------
        # /WebApps/get/Get the current status of a network trace operation for a site[get]
        # --------------------------------------------------------------------------
        result = self.mgmt_client.web_apps.get_network_trace_operation(
            resource_group_name=RESOURCE_GROUP, name=NAME, network_trace_name=NETWORK_TRACE_NAME
        )

        # --------------------------------------------------------------------------
        # /AppServiceEnvironments/get/Get Outbound Network Dependencies Endpoints[get]
        # --------------------------------------------------------------------------
        result = self.mgmt_client.app_service_environments.get_outbound_network_dependencies_endpoints(
            resource_group_name=RESOURCE_GROUP, name=NAME
        )

        # --------------------------------------------------------------------------
        # /WebApps/get/Get NetworkTraces for a site[get]
        # --------------------------------------------------------------------------
        result = self.mgmt_client.web_apps.get_network_traces(
            resource_group_name=RESOURCE_GROUP, name=NAME, operation_id=OPERATION_ID
        )

        # --------------------------------------------------------------------------
        # /AppServiceEnvironments/get/Get Inbound Network Dependencies Endpoints[get]
        # --------------------------------------------------------------------------
        result = self.mgmt_client.app_service_environments.get_inbound_network_dependencies_endpoints(
            resource_group_name=RESOURCE_GROUP, name=NAME
        )

        # --------------------------------------------------------------------------
        # /WebApps/get/Get NetworkTraces for a site[get]
        # --------------------------------------------------------------------------
        result = self.mgmt_client.web_apps.get_network_traces(
            resource_group_name=RESOURCE_GROUP, name=NAME, operation_id=OPERATION_ID
        )

        # --------------------------------------------------------------------------
        # /WebApps/get/Get site instance info[get]
        # --------------------------------------------------------------------------
        result = self.mgmt_client.web_apps.get_instance_info(
            resource_group_name=RESOURCE_GROUP, name=NAME, instance_id=INSTANCE_ID
        )

        # --------------------------------------------------------------------------
        # /Diagnostics/get/Get App Service Environment Detector Responses[get]
        # --------------------------------------------------------------------------
        result = self.mgmt_client.diagnostics.list_hosting_environment_detector_responses(
            resource_group_name=RESOURCE_GROUP, name=NAME
        )

        # --------------------------------------------------------------------------
        # /Diagnostics/get/Get App Diagnostic Category[get]
        # --------------------------------------------------------------------------
        result = self.mgmt_client.diagnostics.get_site_diagnostic_category(
            resource_group_name=RESOURCE_GROUP, site_name=SITE_NAME, diagnostic_category=DIAGNOSTIC_CATEGORY
        )

        # --------------------------------------------------------------------------
        # /Diagnostics/get/Get App Slot Diagnostic Category[get]
        # --------------------------------------------------------------------------
        result = self.mgmt_client.diagnostics.get_site_diagnostic_category(
            resource_group_name=RESOURCE_GROUP, site_name=SITE_NAME, diagnostic_category=DIAGNOSTIC_CATEGORY
        )

        # --------------------------------------------------------------------------
        # /ResourceHealthMetadata/get/List ResourceHealthMetadata for a site[get]
        # --------------------------------------------------------------------------
        result = self.mgmt_client.resource_health_metadata.list_by_site(resource_group_name=RESOURCE_GROUP, name=NAME)

        # --------------------------------------------------------------------------
        # /WebApps/get/Get Azure Key Vault references for app settings[get]
        # --------------------------------------------------------------------------
        result = self.mgmt_client.web_apps.get_app_settings_key_vault_references(
            resource_group_name=RESOURCE_GROUP, name=NAME, config_name=CONFIG_NAME
        )

        # --------------------------------------------------------------------------
        # /Diagnostics/get/Get App Detector Response[get]
        # --------------------------------------------------------------------------
        result = self.mgmt_client.diagnostics.get_site_detector_response(
            resource_group_name=RESOURCE_GROUP, site_name=SITE_NAME, detector_name=DETECTOR_NAME
        )

        # --------------------------------------------------------------------------
        # /Diagnostics/get/Get App Slot Detector Response[get]
        # --------------------------------------------------------------------------
        result = self.mgmt_client.diagnostics.get_site_detector_response(
            resource_group_name=RESOURCE_GROUP, site_name=SITE_NAME, detector_name=DETECTOR_NAME
        )

        # --------------------------------------------------------------------------
        # /WebApps/get/List Publishing Credentials Policies[get]
        # --------------------------------------------------------------------------
        result = self.mgmt_client.web_apps.get_basic_publishing_credentials_policies(
            resource_group_name=RESOURCE_GROUP, name=NAME
        )

        # --------------------------------------------------------------------------
        # /StaticSites/get/Gets the functions of a particular static site build[get]
        # --------------------------------------------------------------------------
        result = self.mgmt_client.static_sites.list_static_site_build_functions(
            resource_group_name=RESOURCE_GROUP, name=NAME, pr_id=PR_ID
        )

        # --------------------------------------------------------------------------
        # /Diagnostics/get/List App Diagnostic Categories[get]
        # --------------------------------------------------------------------------
        result = self.mgmt_client.diagnostics.list_site_diagnostic_categories(
            resource_group_name=RESOURCE_GROUP, site_name=SITE_NAME
        )

        # --------------------------------------------------------------------------
        # /Diagnostics/get/List App Slot Diagnostic Categories[get]
        # --------------------------------------------------------------------------
        result = self.mgmt_client.diagnostics.list_site_diagnostic_categories(
            resource_group_name=RESOURCE_GROUP, site_name=SITE_NAME
        )

        # --------------------------------------------------------------------------
        # /WebApps/get/Get NetworkTraces for a site[get]
        # --------------------------------------------------------------------------
        result = self.mgmt_client.web_apps.get_network_traces(
            resource_group_name=RESOURCE_GROUP, name=NAME, operation_id=OPERATION_ID
        )

        # --------------------------------------------------------------------------
        # /Diagnostics/get/Get App Detector Responses[get]
        # --------------------------------------------------------------------------
        result = self.mgmt_client.diagnostics.list_site_detector_responses(
            resource_group_name=RESOURCE_GROUP, site_name=SITE_NAME
        )

        # --------------------------------------------------------------------------
        # /Diagnostics/get/Get App Slot Detector Responses[get]
        # --------------------------------------------------------------------------
        result = self.mgmt_client.diagnostics.list_site_detector_responses(
            resource_group_name=RESOURCE_GROUP, site_name=SITE_NAME
        )

        # --------------------------------------------------------------------------
        # /WebApps/get/Get NetworkTraces for a site[get]
        # --------------------------------------------------------------------------
        result = self.mgmt_client.web_apps.get_network_traces(
            resource_group_name=RESOURCE_GROUP, name=NAME, operation_id=OPERATION_ID
        )

        # --------------------------------------------------------------------------
        # /WebApps/get/Get site instance info[get]
        # --------------------------------------------------------------------------
        result = self.mgmt_client.web_apps.get_instance_info(
            resource_group_name=RESOURCE_GROUP, name=NAME, instance_id=INSTANCE_ID
        )

        # --------------------------------------------------------------------------
        # /StaticSites/get/Get a static site build[get]
        # --------------------------------------------------------------------------
        result = self.mgmt_client.static_sites.get_static_site_build(
            resource_group_name=RESOURCE_GROUP, name=NAME, pr_id=PR_ID
        )

        # --------------------------------------------------------------------------
        # /Diagnostics/get/Get App Service Environment Detector Responses[get]
        # --------------------------------------------------------------------------
        result = self.mgmt_client.diagnostics.list_hosting_environment_detector_responses(
            resource_group_name=RESOURCE_GROUP, name=NAME
        )

        # --------------------------------------------------------------------------
        # /ResourceHealthMetadata/get/List ResourceHealthMetadata for a site[get]
        # --------------------------------------------------------------------------
        result = self.mgmt_client.resource_health_metadata.list_by_site(resource_group_name=RESOURCE_GROUP, name=NAME)

        # --------------------------------------------------------------------------
        # /WebApps/get/Get private link resources of a site[get]
        # --------------------------------------------------------------------------
        result = self.mgmt_client.web_apps.get_private_link_resources(resource_group_name=RESOURCE_GROUP, name=NAME)

        # --------------------------------------------------------------------------
        # /StaticSites/get/List custom domains for a static site[get]
        # --------------------------------------------------------------------------
        result = self.mgmt_client.static_sites.list_static_site_custom_domains(
            resource_group_name=RESOURCE_GROUP, name=NAME
        )

        # --------------------------------------------------------------------------
        # /Diagnostics/get/List App Diagnostic Categories[get]
        # --------------------------------------------------------------------------
        result = self.mgmt_client.diagnostics.list_site_diagnostic_categories(
            resource_group_name=RESOURCE_GROUP, site_name=SITE_NAME
        )

        # --------------------------------------------------------------------------
        # /Diagnostics/get/List App Slot Diagnostic Categories[get]
        # --------------------------------------------------------------------------
        result = self.mgmt_client.diagnostics.list_site_diagnostic_categories(
            resource_group_name=RESOURCE_GROUP, site_name=SITE_NAME
        )

        # --------------------------------------------------------------------------
        # /StaticSites/get/Gets the functions of a static site[get]
        # --------------------------------------------------------------------------
        result = self.mgmt_client.static_sites.list_static_site_functions(resource_group_name=RESOURCE_GROUP, name=NAME)

        # --------------------------------------------------------------------------
        # /Diagnostics/get/Get App Detector Responses[get]
        # --------------------------------------------------------------------------
        result = self.mgmt_client.diagnostics.list_site_detector_responses(
            resource_group_name=RESOURCE_GROUP, site_name=SITE_NAME
        )

        # --------------------------------------------------------------------------
        # /Diagnostics/get/Get App Slot Detector Responses[get]
        # --------------------------------------------------------------------------
        result = self.mgmt_client.diagnostics.list_site_detector_responses(
            resource_group_name=RESOURCE_GROUP, site_name=SITE_NAME
        )

        # --------------------------------------------------------------------------
        # /DeletedWebApps/get/Get Deleted Web App by Location[get]
        # --------------------------------------------------------------------------
        result = self.mgmt_client.deleted_web_apps.get_deleted_web_app_by_location(
            azure_location=AZURE_LOCATION, deleted_site_id=DELETED_SITE_ID
        )

        # --------------------------------------------------------------------------
        # /StaticSites/get/Get all builds for a static site[get]
        # --------------------------------------------------------------------------
        result = self.mgmt_client.static_sites.get_static_site_builds(resource_group_name=RESOURCE_GROUP, name=NAME)

        # --------------------------------------------------------------------------
        # /Certificates/get/Get Certificate[get]
        # --------------------------------------------------------------------------
        result = self.mgmt_client.certificates.get(resource_group_name=RESOURCE_GROUP, name=NAME)

        # --------------------------------------------------------------------------
        # /StaticSites/get/Get details for a static site[get]
        # --------------------------------------------------------------------------
        result = self.mgmt_client.static_sites.get_static_site(resource_group_name=RESOURCE_GROUP, name=NAME)

        # --------------------------------------------------------------------------
        # /AppServicePlans/get/Get App Service plan[get]
        # --------------------------------------------------------------------------
        result = self.mgmt_client.app_service_plans.get(resource_group_name=RESOURCE_GROUP, name=NAME)

        # --------------------------------------------------------------------------
        # /ResourceHealthMetadata/get/List ResourceHealthMetadata for a resource group[get]
        # --------------------------------------------------------------------------
        result = self.mgmt_client.resource_health_metadata.list_by_resource_group(resource_group_name=RESOURCE_GROUP)

        # --------------------------------------------------------------------------
        # /Certificates/get/List Certificates by resource group[get]
        # --------------------------------------------------------------------------
        result = self.mgmt_client.certificates.list_by_resource_group(resource_group_name=RESOURCE_GROUP)

        # --------------------------------------------------------------------------
        # /StaticSites/get/Get static sites for a resource group[get]
        # --------------------------------------------------------------------------
        result = self.mgmt_client.static_sites.get_static_sites_by_resource_group(resource_group_name=RESOURCE_GROUP)

        # --------------------------------------------------------------------------
        # /AppServicePlans/get/List App Service plans by resource group[get]
        # --------------------------------------------------------------------------
        result = self.mgmt_client.app_service_plans.list_by_resource_group(resource_group_name=RESOURCE_GROUP)

        # --------------------------------------------------------------------------
        # /DeletedWebApps/get/List Deleted Web App by Location[get]
        # --------------------------------------------------------------------------
        result = self.mgmt_client.deleted_web_apps.list_by_location(azure_location=AZURE_LOCATION)

        # --------------------------------------------------------------------------
        # /TopLevelDomains/get/Get Top Level Domain[get]
        # --------------------------------------------------------------------------
        result = self.mgmt_client.top_level_domains.get(name=NAME)

        # --------------------------------------------------------------------------
        # /TopLevelDomains/get/List Top Level Domains[get]
        # --------------------------------------------------------------------------
        result = self.mgmt_client.top_level_domains.list()

        # --------------------------------------------------------------------------
        # /ResourceHealthMetadata/get/List ResourceHealthMetadata for a subscription[get]
        # --------------------------------------------------------------------------
        result = self.mgmt_client.resource_health_metadata.list()

        # --------------------------------------------------------------------------
        # /Certificates/get/List Certificates for subscription[get]
        # --------------------------------------------------------------------------
        result = self.mgmt_client.certificates.list()

        # --------------------------------------------------------------------------
        # /StaticSites/get/Get all static sites in a subscription[get]
        # --------------------------------------------------------------------------
        result = self.mgmt_client.static_sites.list()

        # --------------------------------------------------------------------------
        # /AppServicePlans/get/List App Service plans[get]
        # --------------------------------------------------------------------------
        result = self.mgmt_client.app_service_plans.list()

        # --------------------------------------------------------------------------
        # /CertificateRegistrationProvider/get/List operations[get]
        # --------------------------------------------------------------------------
        result = self.mgmt_client.certificate_registration_provider.list_operations()

        # --------------------------------------------------------------------------
        # /DomainRegistrationProvider/get/List operations[get]
        # --------------------------------------------------------------------------
        result = self.mgmt_client.domain_registration_provider.list_operations()

        # --------------------------------------------------------------------------
        # /Provider/get/List operations[get]
        # --------------------------------------------------------------------------
        result = self.mgmt_client.provider.list_operations()

        # --------------------------------------------------------------------------
        # /Diagnostics/post/Execute site detector[post]
        # --------------------------------------------------------------------------
        result = self.mgmt_client.diagnostics.execute_site_detector(
            resource_group_name=RESOURCE_GROUP,
            site_name=SITE_NAME,
            diagnostic_category=DIAGNOSTIC_CATEGORY,
            detector_name=DETECTOR_NAME,
        )

        # --------------------------------------------------------------------------
        # /Diagnostics/post/Execute site slot detector[post]
        # --------------------------------------------------------------------------
        result = self.mgmt_client.diagnostics.execute_site_detector(
            resource_group_name=RESOURCE_GROUP,
            site_name=SITE_NAME,
            diagnostic_category=DIAGNOSTIC_CATEGORY,
            detector_name=DETECTOR_NAME,
        )

        # --------------------------------------------------------------------------
        # /Diagnostics/post/Execute site slot analysis[post]
        # --------------------------------------------------------------------------
        result = self.mgmt_client.diagnostics.execute_site_analysis(
            resource_group_name=RESOURCE_GROUP,
            site_name=SITE_NAME,
            diagnostic_category=DIAGNOSTIC_CATEGORY,
            analysis_name=ANALYSIS_NAME,
        )

        # --------------------------------------------------------------------------
        # /Diagnostics/post/Execute site analysis[post]
        # --------------------------------------------------------------------------
        result = self.mgmt_client.diagnostics.execute_site_analysis(
            resource_group_name=RESOURCE_GROUP,
            site_name=SITE_NAME,
            diagnostic_category=DIAGNOSTIC_CATEGORY,
            analysis_name=ANALYSIS_NAME,
        )

        # --------------------------------------------------------------------------
        # /Diagnostics/post/Execute site detector[post]
        # --------------------------------------------------------------------------
        result = self.mgmt_client.diagnostics.execute_site_detector(
            resource_group_name=RESOURCE_GROUP,
            site_name=SITE_NAME,
            diagnostic_category=DIAGNOSTIC_CATEGORY,
            detector_name=DETECTOR_NAME,
        )

        # --------------------------------------------------------------------------
        # /Diagnostics/post/Execute site slot detector[post]
        # --------------------------------------------------------------------------
        result = self.mgmt_client.diagnostics.execute_site_detector(
            resource_group_name=RESOURCE_GROUP,
            site_name=SITE_NAME,
            diagnostic_category=DIAGNOSTIC_CATEGORY,
            detector_name=DETECTOR_NAME,
        )

        # --------------------------------------------------------------------------
        # /Diagnostics/post/Execute site slot analysis[post]
        # --------------------------------------------------------------------------
        result = self.mgmt_client.diagnostics.execute_site_analysis(
            resource_group_name=RESOURCE_GROUP,
            site_name=SITE_NAME,
            diagnostic_category=DIAGNOSTIC_CATEGORY,
            analysis_name=ANALYSIS_NAME,
        )

        # --------------------------------------------------------------------------
        # /Diagnostics/post/Execute site analysis[post]
        # --------------------------------------------------------------------------
        result = self.mgmt_client.diagnostics.execute_site_analysis(
            resource_group_name=RESOURCE_GROUP,
            site_name=SITE_NAME,
            diagnostic_category=DIAGNOSTIC_CATEGORY,
            analysis_name=ANALYSIS_NAME,
        )

        # --------------------------------------------------------------------------
        # /StaticSites/patch/Create or update a user for a static site[patch]
        # --------------------------------------------------------------------------
        BODY = {"roles": "contributor"}
        result = self.mgmt_client.static_sites.update_static_site_user(
            resource_group_name=RESOURCE_GROUP,
            name=NAME,
            authprovider=AUTHPROVIDER,
            userid=USERID,
            static_site_user_envelope=BODY,
        )

        # --------------------------------------------------------------------------
        # /WebApps/post/Start a new network trace operation for a site[post]
        # --------------------------------------------------------------------------
        result = self.mgmt_client.web_apps.begin_start_web_site_network_trace_operation(
            resource_group_name=RESOURCE_GROUP,
            name=NAME,
            network_trace_name=NETWORK_TRACE_NAME,
            duration_in_seconds="60",
        )
        result = result.result()

        # --------------------------------------------------------------------------
        # /WebApps/post/Stop a currently running network trace operation for a site[post]
        # --------------------------------------------------------------------------
        result = self.mgmt_client.web_apps.stop_web_site_network_trace(
            resource_group_name=RESOURCE_GROUP, name=NAME, network_trace_name=NETWORK_TRACE_NAME
        )

        # --------------------------------------------------------------------------
        # /StaticSites/post/List users for a static site[post]
        # --------------------------------------------------------------------------
        result = self.mgmt_client.static_sites.list_static_site_users(
            resource_group_name=RESOURCE_GROUP, name=NAME, authprovider=AUTHPROVIDER
        )

        # --------------------------------------------------------------------------
        # /StaticSites/post/Get function app settings of a static site build[post]
        # --------------------------------------------------------------------------
        result = self.mgmt_client.static_sites.list_static_site_build_function_app_settings(
            resource_group_name=RESOURCE_GROUP, name=NAME, pr_id=PR_ID
        )

        # --------------------------------------------------------------------------
        # /StaticSites/post/Validate a custom domain for a static site[post]
        # --------------------------------------------------------------------------
        result = self.mgmt_client.static_sites.validate_custom_domain_can_be_added_to_static_site(
            resource_group_name=RESOURCE_GROUP, name=NAME, domain_name=DOMAIN_NAME
        )

        # --------------------------------------------------------------------------
        # /WebApps/post/Start a new network trace operation for a site[post]
        # --------------------------------------------------------------------------
        result = self.mgmt_client.web_apps.begin_start_web_site_network_trace_operation(
            resource_group_name=RESOURCE_GROUP,
            name=NAME,
            network_trace_name=NETWORK_TRACE_NAME,
            duration_in_seconds="60",
        )
        result = result.result()

        # --------------------------------------------------------------------------
        # /WebApps/post/Stop a currently running network trace operation for a site[post]
        # --------------------------------------------------------------------------
        result = self.mgmt_client.web_apps.stop_web_site_network_trace(
            resource_group_name=RESOURCE_GROUP, name=NAME, network_trace_name=NETWORK_TRACE_NAME
        )

        # --------------------------------------------------------------------------
        # /WebApps/post/Start a new network trace operation for a site[post]
        # --------------------------------------------------------------------------
        result = self.mgmt_client.web_apps.begin_start_web_site_network_trace_operation(
            resource_group_name=RESOURCE_GROUP,
            name=NAME,
            network_trace_name=NETWORK_TRACE_NAME,
            duration_in_seconds="60",
        )
        result = result.result()

        # --------------------------------------------------------------------------
        # /WebApps/post/Stop a currently running network trace operation for a site[post]
        # --------------------------------------------------------------------------
        result = self.mgmt_client.web_apps.stop_web_site_network_trace(
            resource_group_name=RESOURCE_GROUP, name=NAME, network_trace_name=NETWORK_TRACE_NAME
        )

        # --------------------------------------------------------------------------
        # /Domains/post/Renew an existing domain[post]
        # --------------------------------------------------------------------------
        result = self.mgmt_client.domains.renew(resource_group_name=RESOURCE_GROUP, domain_name=DOMAIN_NAME)

        # --------------------------------------------------------------------------
        # /StaticSites/post/Get function app settings of a static site[post]
        # --------------------------------------------------------------------------
        result = self.mgmt_client.static_sites.list_static_site_function_app_settings(
            resource_group_name=RESOURCE_GROUP, name=NAME
        )

        # --------------------------------------------------------------------------
        # /WebApps/post/List backups[post]
        # --------------------------------------------------------------------------
        result = self.mgmt_client.web_apps.list_site_backups(resource_group_name=RESOURCE_GROUP, name=NAME)

        # --------------------------------------------------------------------------
        # /StaticSites/post/Create an invitation link for a user for a static site[post]
        # --------------------------------------------------------------------------
        BODY = {
            "domain": "happy-sea-15afae3e.azurestaticwebsites.net",
            "provider": "aad",
            "user_details": "username",
            "roles": "admin,contributor",
            "num_hours_to_expiration": "1",
        }
        result = self.mgmt_client.static_sites.create_user_roles_invitation_link(
            resource_group_name=RESOURCE_GROUP, name=NAME, static_site_user_roles_invitation_envelope=BODY
        )

        # --------------------------------------------------------------------------
        # /WebApps/post/Copy slot[post]
        # --------------------------------------------------------------------------
        BODY = {"target_slot": "staging", "site_config": {"number_of_workers": "1", "http_logging_enabled": True}}
        result = self.mgmt_client.web_apps.begin_copy_production_slot(
            resource_group_name=RESOURCE_GROUP, name=NAME, copy_slot_entity=BODY
        )
        result = result.result()

        # --------------------------------------------------------------------------
        # /WebApps/post/Start a new network trace operation for a site[post]
        # --------------------------------------------------------------------------
        result = self.mgmt_client.web_apps.begin_start_web_site_network_trace_operation(
            resource_group_name=RESOURCE_GROUP,
            name=NAME,
            network_trace_name=NETWORK_TRACE_NAME,
            duration_in_seconds="60",
        )
        result = result.result()

        # --------------------------------------------------------------------------
        # /StaticSites/post/List secrets for a static site[post]
        # --------------------------------------------------------------------------
        result = self.mgmt_client.static_sites.list_static_site_secrets(resource_group_name=RESOURCE_GROUP, name=NAME)

        # --------------------------------------------------------------------------
        # /StaticSites/post/Reset the api key for a static site[post]
        # --------------------------------------------------------------------------
        BODY = {"should_update_repository": True, "repository_token": "repoToken123"}
        result = self.mgmt_client.static_sites.reset_static_site_api_key(
            resource_group_name=RESOURCE_GROUP, name=NAME, reset_properties_envelope=BODY
        )

        # --------------------------------------------------------------------------
        # /WebApps/post/Stop a currently running network trace operation for a site[post]
        # --------------------------------------------------------------------------
        result = self.mgmt_client.web_apps.stop_web_site_network_trace(
            resource_group_name=RESOURCE_GROUP, name=NAME, network_trace_name=NETWORK_TRACE_NAME
        )

        # --------------------------------------------------------------------------
        # /StaticSites/post/Detach a static site[post]
        # --------------------------------------------------------------------------
        result = self.mgmt_client.static_sites.detach_static_site(resource_group_name=RESOURCE_GROUP, name=NAME)

        # --------------------------------------------------------------------------
        # /WebApps/post/List backups[post]
        # --------------------------------------------------------------------------
        result = self.mgmt_client.web_apps.list_site_backups(resource_group_name=RESOURCE_GROUP, name=NAME)

        # --------------------------------------------------------------------------
        # /WebApps/post/Copy slot[post]
        # --------------------------------------------------------------------------
        BODY = {"target_slot": "staging", "site_config": {"number_of_workers": "1", "http_logging_enabled": True}}
        result = self.mgmt_client.web_apps.begin_copy_production_slot(
            resource_group_name=RESOURCE_GROUP, name=NAME, copy_slot_entity=BODY
        )
        result = result.result()

        # --------------------------------------------------------------------------
        # /Certificates/patch/Patch Certificate[patch]
        # --------------------------------------------------------------------------
        BODY = {"password": FAKE_LOGIN_PASSWORD}  # this may not work -- check when tests are active
        result = self.mgmt_client.certificates.update(
            resource_group_name=RESOURCE_GROUP, name=NAME, certificate_envelope=BODY
        )

        # --------------------------------------------------------------------------
        # /StaticSites/patch/Patch a static site[patch]
        # --------------------------------------------------------------------------
        BODY = {}
        result = self.mgmt_client.static_sites.update_static_site(
            resource_group_name=RESOURCE_GROUP, name=NAME, static_site_envelope=BODY
        )

        # --------------------------------------------------------------------------
        # /AppServicePlans/patch/Patch Service plan[patch]
        # --------------------------------------------------------------------------
        BODY = {"kind": "app"}
        result = self.mgmt_client.app_service_plans.update(
            resource_group_name=RESOURCE_GROUP, name=NAME, app_service_plan=BODY
        )

        # --------------------------------------------------------------------------
        # /TopLevelDomains/post/List Top Level Domain Agreements[post]
        # --------------------------------------------------------------------------
        BODY = {"include_privacy": True, "for_transfer": False}
        result = self.mgmt_client.top_level_domains.list_agreements(name=NAME, agreement_option=BODY)

        # --------------------------------------------------------------------------
        # //post/VerifyHostingEnvironmentVnet[post]
        # --------------------------------------------------------------------------
        BODY = {"vnet_resource_group": "vNet123rg", "vnet_name": "vNet123", "vnet_subnet_name": "vNet123SubNet"}
        result = self.mgmt_client.verify_hosting_environment_vnet(parameters=BODY)

        # --------------------------------------------------------------------------
        # /WebApps/delete/Delete a private endpoint connection for a site.[delete]
        # --------------------------------------------------------------------------
        result = self.mgmt_client.web_apps.begin_delete_private_endpoint_connection(
            resource_group_name=RESOURCE_GROUP,
            name=NAME,
            private_endpoint_connection_name=PRIVATE_ENDPOINT_CONNECTION_NAME,
        )
        result = result.result()

        # --------------------------------------------------------------------------
        # /StaticSites/delete/Delete a user for a static site[delete]
        # --------------------------------------------------------------------------
        result = self.mgmt_client.static_sites.delete_static_site_user(
            resource_group_name=RESOURCE_GROUP, name=NAME, authprovider=AUTHPROVIDER, userid=USERID
        )

        # --------------------------------------------------------------------------
        # /StaticSites/delete/Delete a custom domain for a static site[delete]
        # --------------------------------------------------------------------------
        result = self.mgmt_client.static_sites.delete_static_site_custom_domain(
            resource_group_name=RESOURCE_GROUP, name=NAME, domain_name=DOMAIN_NAME
        )

        # --------------------------------------------------------------------------
        # /StaticSites/delete/Delete a static site build[delete]
        # --------------------------------------------------------------------------
        result = self.mgmt_client.static_sites.delete_static_site_build(
            resource_group_name=RESOURCE_GROUP, name=NAME, pr_id=PR_ID
        )

        # --------------------------------------------------------------------------
        # /Certificates/delete/Delete Certificate[delete]
        # --------------------------------------------------------------------------
        result = self.mgmt_client.certificates.delete(resource_group_name=RESOURCE_GROUP, name=NAME)

        # --------------------------------------------------------------------------
        # /StaticSites/delete/Delete a static site[delete]
        # --------------------------------------------------------------------------
        result = self.mgmt_client.static_sites.delete_static_site(resource_group_name=RESOURCE_GROUP, name=NAME)

        # --------------------------------------------------------------------------
        # /AppServicePlans/delete/Delete App Service plan[delete]
        # --------------------------------------------------------------------------
        result = self.mgmt_client.app_service_plans.delete(resource_group_name=RESOURCE_GROUP, name=NAME)


# ------------------------------------------------------------------------------
if __name__ == "__main__":
    unittest.main()
