# Disable logging for a cleaner testing output
import logging

from helpers import AppriseURLTester
import requests

from apprise.plugins.lark import NotifyLark

logging.disable(logging.CRITICAL)

# Our Testing URLs
apprise_url_tests = (
    (
        "lark://",
        {
            # Teams Token missing
            "instance": TypeError,
        },
    ),
    (
        "lark://:@/",
        {
            # We don't have strict host checking on for lark, so this URL
            # actually becomes parseable and :@ becomes a hostname.
            # The below errors because a second token wasn't found
            "instance": TypeError,
        },
    ),
    (
        "lark://{}".format("abcd-1234"),
        {
            # token provided - we're good
            "instance": NotifyLark,
            # Our expected url(privacy=True) startswith() response:
            "privacy_url": "lark://****/",
        },
    ),
    (
        "lark://{}".format("abcd-1234"),
        {
            # token provided - we're good
            "instance": NotifyLark,
            # Our expected url(privacy=True) startswith() response:
            "privacy_url": "lark://****/",
        },
    ),
    (
        "lark://?token={}".format("abcd-1234"),
        {
            # token provided - we're good
            "instance": NotifyLark,
            # Our expected url(privacy=True) startswith() response:
            "privacy_url": "lark://****/",
        },
    ),
    # Support Native URLs with arguments
    (
        "https://open.larksuite.com/open-apis/bot/v2/hook/{}".format(
            "abcd-1234"
        ),
        {
            # token provided - we're good
            "instance": NotifyLark,
        },
    ),
    (
        "lark://{}".format("abcd-1234"),
        {
            "instance": NotifyLark,
            # force a failure
            "response": False,
            "requests_response_code": requests.codes.internal_server_error,
        },
    ),
    (
        "lark://{}".format("abcd-1234"),
        {
            "instance": NotifyLark,
            # throw a bizarre code forcing us to fail to look it up
            "response": False,
            "requests_response_code": 999,
        },
    ),
    (
        "lark://{}".format("a" * 80),
        {
            "instance": NotifyLark,
            # Throws a series of i/o exceptions with this flag
            # is set and tests that we gracefully handle them
            "test_requests_exceptions": True,
        },
    ),
)


def test_plugin_lark_urls():
    """NotifyLark() Apprise URLs."""

    # Run our general tests
    AppriseURLTester(tests=apprise_url_tests).run_all()
