from sanic import helpers
import pytest


def test_has_message_body():
    tests = (
        (100, False),
        (102, False),
        (204, False),
        (200, True),
        (304, False),
        (400, True),
    )
    for status_code, expected in tests:
        assert helpers.has_message_body(status_code) is expected


def test_is_entity_header():
    tests = (
        ("allow", True),
        ("extension-header", True),
        ("", False),
        ("test", False),
    )
    for header, expected in tests:
        assert helpers.is_entity_header(header) is expected


def test_is_hop_by_hop_header():
    tests = (
        ("connection", True),
        ("upgrade", True),
        ("", False),
        ("test", False),
    )
    for header, expected in tests:
        assert helpers.is_hop_by_hop_header(header) is expected


def test_remove_entity_headers():
    tests = (
        (
            {},
            {}
        ),
        (
            {
                "Allow": "GET, POST, HEAD",
            },
            {}
        ),
        (
            {
                "Content-Type": "application/json",
                "Expires": "Wed, 21 Oct 2015 07:28:00 GMT",
                "Foo": "Bar"
            },
            {
                "Expires": "Wed, 21 Oct 2015 07:28:00 GMT",
                "Foo": "Bar"
            },
        ),
        (
            {
                "Allow": "GET, POST, HEAD",
                "Content-Location": "/test"
            },
            {
                "Content-Location": "/test"
            },
        ),
    )

    for header, expected in tests:
        assert helpers.remove_entity_headers(header) == expected


def test_import_string():
    from sanic.config import Config
    obj = helpers.import_string('sanic.config.Config')
    assert isinstance(obj, Config)


def test_import_string_exception():
    with pytest.raises(ImportError):
        helpers.import_string('test.test.test')

from sanic import helpers
from sanic.config import Config
import pytest


def test_has_message_body():
    tests = (
        (100, False),
        (102, False),
        (204, False),
        (200, True),
        (304, False),
        (400, True),
    )
    for status_code, expected in tests:
        assert helpers.has_message_body(status_code) is expected


def test_is_entity_header():
    tests = (
        ("allow", True),
        ("extension-header", True),
        ("", False),
        ("test", False),
    )
    for header, expected in tests:
        assert helpers.is_entity_header(header) is expected


def test_is_hop_by_hop_header():
    tests = (
        ("connection", True),
        ("upgrade", True),
        ("", False),
        ("test", False),
    )
    for header, expected in tests:
        assert helpers.is_hop_by_hop_header(header) is expected


def test_remove_entity_headers():
    tests = (
        (
            {},
            {}
        ),
        (
            {
                "Allow": "GET, POST, HEAD",
            },
            {}
        ),
        (
            {
                "Content-Type": "application/json",
                "Expires": "Wed, 21 Oct 2015 07:28:00 GMT",
                "Foo": "Bar"
            },
            {
                "Expires": "Wed, 21 Oct 2015 07:28:00 GMT",
                "Foo": "Bar"
            },
        ),
        (
            {
                "Allow": "GET, POST, HEAD",
                "Content-Location": "/test"
            },
            {
                "Content-Location": "/test"
            },
        ),
    )

    for header, expected in tests:
        assert helpers.remove_entity_headers(header) == expected


def test_import_string():
    obj = helpers.import_string('sanic.config.Config')
    assert isinstance(obj, Config)


def test_import_string_exception():
    with pytest.raises(ImportError):
        helpers.import_string('test.test.test')

fix pep8 errors