Why Gemfury? Push, build, and install  RubyGems npm packages Python packages Maven artifacts PHP packages Go Modules Debian packages RPM packages NuGet packages

Repository URL to install this package:

Details    
urlparse3 / tests.py
Size: Mime:
# coding: utf8
import unittest
from unittest import TestCase
import urlparse3


class TestUrlParse(TestCase):
    """Test for urlparse3 module"""
    def test_parse_url(self):
        """Test parsing url"""
        url = 'http://yandex.ru/mail/?id=123#anchor'
        parsed_url = urlparse3.parse_url(url)
        self.assertEqual(parsed_url.scheme, 'http')
        self.assertEqual(parsed_url.domain, 'yandex.ru')
        self.assertEqual(parsed_url.path, '/mail/')
        self.assertEqual(parsed_url.query, {'id': '123'})
        self.assertEqual(parsed_url.fragment, 'anchor')
        url = 'http://yandex.ru/mail/?id=123&id=321&id=43#anchor'
        parsed_url = urlparse3.parse_url(url)
        self.assertIsNotNone(parsed_url.query.get('id'))
        for i in parsed_url.query['id']:
            if i not in ['123', '321', '43']:
                self.assertIn(i, ['123', '321', '43'])
        url = 'http://google.com/path/'
        parsed_url = urlparse3.parse_url(url)
        parsed_url.query['cardNumber'] = '12345678910'
        self.assertEqual(parsed_url.geturl(),
                         'http://google.com/path/?cardNumber=12345678910')
                         
    def def_parsed_3d_level_domain(self):
        """Test parse 3rd level domain domain"""
        url = 'http://domain.com.ru/?id=123'
        parsed_url = urlparse3.parse_url(url)
        self.assertEqual(parsed_url.domain, 'domain.com.ru')
        self.assertEqual(parsed_url.query, {'id': '123'})

    def test_parse_http_auth_url(self):
        """Test parse url with username and password (http basic auth)"""
        url = 'http://admin:password@domain.com/path/?id=123#anchor'
        parsed_url = urlparse3.parse_url(url)
        self.assertEqual(parsed_url.username, 'admin')
        self.assertEqual(parsed_url.password, 'password')
        self.assertEqual(parsed_url.domain, 'domain.com')
        self.assertEqual(parsed_url.path, '/path/')
        self.assertEqual(parsed_url.query, {'id': '123'})
        self.assertEqual(parsed_url.fragment, 'anchor')
        self.assertEqual(parsed_url.geturl(), url)
        
    def test_parse_semicolo_url(self):
        url = 'http://google.com/?name=alex;id=321'
        parsed_url = urlparse3.parse_url(url)
        self.assertEqual(parsed_url.query['name'], 'alex')
        self.assertEqual(parsed_url.query['id'], '321')
                
    def test_join_url(self):
        """Test parse url, add new values to 'query' and join url back"""
        url = 'http://yandex.ru/mail/?id=123#anchor'
        parsed_url = urlparse3.parse_url(url)
        parsed_url.query['name'] = 'alex'
        self.assertEqual('http://yandex.ru/mail/?id=123&name=alex#anchor',
                         parsed_url.geturl())
        parsed_url.fragment = 'fragment'
        self.assertEqual('http://yandex.ru/mail/?id=123&name=alex#fragment',
                         parsed_url.geturl())
        url = 'http://yandex.ru/path/?id=1&id=2&id=3&name=alex#anchor'
        parsed_url = urlparse3.parse_url(url)
        self.assertEqual(len(set(parsed_url.query['id'])), 3, 
                         'Missing parameters in query')
        for i in parsed_url.query['id']:
            self.assertIn(i, ['1', '2', '3'])
        parsed_url.query['id'] = ['1', '2']
        self.assertEqual('http://yandex.ru/path/?id=1&id=2&name=alex#anchor',
                         parsed_url.geturl())
                         
        url = 'http://yandex.ru'
        parsed_url = urlparse3.parse_url(url)
        parsed_url.path = 'search'
        self.assertEqual('http://yandex.ru/search', 
                         parsed_url.geturl())
        
        url = 'http://yandex.ru'
        parsed_url = urlparse3.parse_url(url)
        self.assertEqual('http://yandex.ru/', 
                         parsed_url.geturl())

    def test_parse_url_with_port(self):
        url = 'http://localhost:8000/news/1/'
        parsed_url = urlparse3.parse_url(url)
        self.assertEqual(url, parsed_url.geturl())

    def test_parse_url_with_dash(self):
        url = 'http://local-domain.sub-domain.ru:8000/news/1/'
        parsed_url = urlparse3.parse_url(url)
        self.assertEqual(url, parsed_url.geturl())

    def test_url_with_absolute_url_in_query_param(self):
        url = 'http://yandex.ru/sub/?dir=http://google.com/'
        parsed_url = urlparse3.parse_url(url)
        self.assertEqual(url, parsed_url.geturl())

    def test_parse_query_with_abs_path(self):
        location_query = 'http%3A%2F%2Fwww.google.ru%2Fc%2F922%2Fsubdir-one-two%2F%3Fsitelink%3DtopmenuW%26l%3D8' 
        url = 'https://domain.com/subdirectory/?location={0}'.format(location_query)
        parsed_url = urlparse3.parse_url(url)
        self.assertEqual(parsed_url.query['location'], location_query)
        self.assertEqual(url, parsed_url.geturl())

    def test_query_parameters_order(self):
        """
        Test that query parameters retain the order
        in which they were added.
        """
        url = 'http://domain.com/subdir/?url=http://google.com'
        parsed_url = urlparse3.parse_url(url)
        sort_action = 'sort'
        price_order = 'price'
        parsed_url.query['action'] = sort_action
        parsed_url.query['order'] = price_order
        new_url = parsed_url.geturl()
        self.assertEqual('{0}&action={1}&order={2}'.format(
            url, sort_action, price_order), new_url)

    def test_rearrage_parameters_order(self):
        """
        Test that query parameters retain new order
        after rearrange.
        """
        base_url = 'http://domain.com/subdir/'
        url = '{0}?url=http://google.com'.format(base_url)
        parsed_url = urlparse3.parse_url(url)
        url_parameter = parsed_url.query.pop('url')
        sort_action = 'sort'
        price_order = 'price'
        parsed_url.query['action'] = sort_action
        parsed_url.query['order'] = price_order
        parsed_url.query['url'] = url_parameter
        new_url = parsed_url.geturl()
        self.assertEqual('{0}?action={1}&order={2}&url={3}'.format(
            base_url, sort_action, price_order, url_parameter),
            new_url)
        


if __name__ == '__main__':
    unittest.main()