"""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