class Test_Create_Forwarded_Url(TestCase):
    def setUp(self):
        super(Test_Create_Forwarded_Url, self).setUp()

        self.url_patterns = ['https://www.example.com']
        self.forwarding_url = 'https://new.example.com'
        self.forwarding_route = ForwardingRoute(self.url_patterns,
                                                self.forwarding_url)

    def test_matched_once(self):
        path = '/path?redirect={0}/index.html'.format(self.url_patterns[0])
        url = self.url_patterns[0] + path

        forwarded_url = self.forwarding_route._create_forwarded_url(url)

        self.assertEqual(self.forwarding_url + path, forwarded_url)

    def test_matched_path(self):
        path = '/path?and=query#hash'
        url = self.url_patterns[0] + path

        forwarded_url = self.forwarding_route._create_forwarded_url(url)

        self.assertEqual(self.forwarding_url + path, forwarded_url)

    def test_matched_path_empty(self):
        url = self.url_patterns[0]

        forwarded_url = self.forwarding_route._create_forwarded_url(url)

        self.assertEqual(self.forwarding_url, forwarded_url)

    def test_unmatched(self):
        with ExpectedException(RequestError):
            url = 'https://bad.example.com/bad'

            self.forwarding_route._create_forwarded_url(url)