"""Test the Mythic Beasts DNS component."""
import logging
import asynctest

from homeassistant.setup import async_setup_component
from homeassistant.components import mythicbeastsdns

_LOGGER = logging.getLogger(__name__)


async def mbddns_update_mock(domain, password, host, ttl=60, session=None):
    """Mock out mythic beasts updater."""
    if password == "incorrect":
        _LOGGER.error("Updating Mythic Beasts failed: Not authenticated")
        return False
    if host[0] == "$":
        _LOGGER.error("Updating Mythic Beasts failed: Invalid Character")
        return False
    return True


@asynctest.mock.patch("mbddns.update", new=mbddns_update_mock)
async def test_update(hass):
    """Run with correct values and check true is returned."""
    result = await async_setup_component(
        hass,
        mythicbeastsdns.DOMAIN,
        {
            mythicbeastsdns.DOMAIN: {
                "domain": "example.org",
                "password": "correct",
                "host": "hass",
            }
        },
    )
    assert result


@asynctest.mock.patch("mbddns.update", new=mbddns_update_mock)
async def test_update_fails_if_wrong_token(hass):
    """Run with incorrect token and check false is returned."""
    result = await async_setup_component(
        hass,
        mythicbeastsdns.DOMAIN,
        {
            mythicbeastsdns.DOMAIN: {
                "domain": "example.org",
                "password": "incorrect",
                "host": "hass",
            }
        },
    )
    assert not result


@asynctest.mock.patch("mbddns.update", new=mbddns_update_mock)
async def test_update_fails_if_invalid_host(hass):
    """Run with invalid characters in host and check false is returned."""
    result = await async_setup_component(
        hass,
        mythicbeastsdns.DOMAIN,
        {
            mythicbeastsdns.DOMAIN: {
                "domain": "example.org",
                "password": "correct",
                "host": "$hass",
            }
        },
    )
    assert not result