# -*- encoding: utf-8 -*-

import unittest

from isso import wsgi


class TestWSGIUtilities(unittest.TestCase):

    def test_urlsplit(self):

        examples = [
            ("http://example.tld/",  ('example.tld', 80, False)),
            ("https://example.tld/", ('example.tld', 443, True)),
            ("example.tld",          ('example.tld', 80, False)),
            ("example.tld:42",       ('example.tld', 42, False)),
            ("https://example.tld:80/", ('example.tld', 80, True))]

        for (hostname, result) in examples:
            self.assertEqual(wsgi.urlsplit(hostname), result)

    def test_urljoin(self):

        examples = [
            (("example.tld", 80, False), "http://example.tld"),
            (("example.tld", 42, True),  "https://example.tld:42"),
            (("example.tld", 443, True), "https://example.tld")]

        for (split, result) in examples:
            self.assertEqual(wsgi.urljoin(*split), result)

    def test_origin(self):

        self.assertEqual(wsgi.origin([])({}), "http://invalid.local")

        origin = wsgi.origin(["http://foo.bar/", "https://foo.bar"])
        self.assertEqual(origin({"HTTP_ORIGIN": "http://foo.bar"}),
                         "http://foo.bar")
        self.assertEqual(origin({"HTTP_ORIGIN": "https://foo.bar"}),
                         "https://foo.bar")
        self.assertEqual(origin({"HTTP_REFERER": "http://foo.bar"}),
                         "http://foo.bar")
        self.assertEqual(origin({"HTTP_ORIGIN": "http://spam.baz"}),
                         "http://foo.bar")
        self.assertEqual(origin({}), "http://foo.bar")
