def test_with_auth_with_two_args_replaces_whole_auth_string_with_username_and_password(self): # Replaces username-only auth string url = URL('https://[email protected]/') assert url.with_auth('zack', '1234') == 'https://*****:*****@github.com/' # Replaces username and password. url = URL('https://*****:*****@github.com/') assert url.with_auth('zack', '1234') == 'https://*****:*****@github.com/'
def test_set_query_params_with_multiple_values_adds_or_replaces_the_same_parameter_multiple_times(self): assert (self.url.set_query_params({'spam': ['bar', 'baz']}) == 'https://github.com/zacharyvoase/urlblocks?spam=bar&spam=baz#foo') assert (self.url.set_query_params({'foo': ['bar', 'baz']}) == 'https://github.com/zacharyvoase/urlblocks?spam=eggs&foo=bar&foo=baz#foo') # Ensure it removes all appearances of an existing name before adding # the new ones. url = URL('https://github.com/zacharyvoase/urlblocks?foo=bar&foo=baz#foo') assert (url.set_query_params({'foo': ['spam', 'ham']}) == 'https://github.com/zacharyvoase/urlblocks?foo=spam&foo=ham#foo')
def test_without_auth_removes_entire_auth_string(self): # No username or password => no-op. url = URL('https://github.com/') assert url.without_auth() == 'https://github.com/' # Username-only. url = URL('https://[email protected]/') assert url.without_auth() == 'https://github.com/' # Username and password. url = URL('https://*****:*****@github.com/') assert url.without_auth() == 'https://github.com/'
def test_with_username_replaces_username(self): url = URL('https://[email protected]/') assert url.with_username('alice') == 'https://[email protected]/'
def test_del_query_params_removes_multiple_query_parameters(self): url = URL('https://github.com/zacharyvoase/urlblocks?foo=bar&baz=spam#foo') assert (url.del_query_params(['foo', 'baz']) == 'https://github.com/zacharyvoase/urlblocks#foo')
def test_with_hostname_replaces_hostname(self): url = URL('https://*****:*****@github.com/') assert (url.with_hostname('example.com') == 'https://*****:*****@example.com/')
def test_add_path_adds_a_partial_path(self): url = URL('https://github.com/zacharyvoase/urlblocks') assert (url.add_path('tree') == 'https://github.com/zacharyvoase/urlblocks/tree') assert (url.add_path('tree/master') == 'https://github.com/zacharyvoase/urlblocks/tree/master')
def test_with_password_adds_password(self): url = URL('https://[email protected]/') assert url.with_password('1234') == 'https://*****:*****@github.com/'
class URLObjectRelativeTest(unittest.TestCase): def setUp(self): self.url = URL("https://github.com/zacharyvoase/urlblocks?spam=eggs#foo") def test_relative_with_scheme_returns_the_given_URL(self): assert self.url.relative('http://example.com/abc') == 'http://example.com/abc' def test_relative_with_netloc_returns_the_given_URL_but_preserves_scheme(self): assert self.url.relative('//example.com/abc') == 'https://example.com/abc' def test_relative_with_path_replaces_path_and_removes_query_string_and_fragment(self): assert self.url.relative('another-project') == 'https://github.com/zacharyvoase/another-project' assert self.url.relative('.') == 'https://github.com/zacharyvoase/' assert self.url.relative('/dvxhouse/intessa') == 'https://github.com/dvxhouse/intessa' assert self.url.relative('/dvxhouse/intessa') == 'https://github.com/dvxhouse/intessa' def test_relative_with_empty_string_removes_fragment_but_preserves_query(self): # The empty string is treated as a path meaning 'the current location'. assert self.url.relative('') == self.url.without_fragment() def test_relative_with_query_string_removes_fragment(self): assert self.url.relative('?name=value') == self.url.without_fragment().with_query('name=value') def test_relative_with_fragment_removes_nothing(self): assert self.url.relative('#foobar') == self.url.with_fragment('foobar') def test_compound_relative_urls(self): assert self.url.relative('//example.com/a/b') == 'https://example.com/a/b' assert self.url.relative('//example.com/a/b#bar') == 'https://example.com/a/b#bar' assert self.url.relative('//example.com/a/b?c=d#bar') == 'https://example.com/a/b?c=d#bar' assert self.url.relative('/a/b?c=d#bar') == 'https://github.com/a/b?c=d#bar' assert self.url.relative('?c=d#bar') == 'https://github.com/zacharyvoase/urlblocks?c=d#bar' assert self.url.relative('#bar') == 'https://github.com/zacharyvoase/urlblocks?spam=eggs#bar'
def test_with_auth_with_two_args_adds_username_and_password(self): url = URL('https://github.com/') assert url.with_auth('zack', '1234') == 'https://*****:*****@github.com/'
def test_encode_path(self): assert (URL.from_iri(u('https://example.com/p\xe5th/path2')) == 'https://example.com/p%C3%A5th/path2')
def test_with_auth_with_one_arg_adds_username(self): url = URL('https://github.com/') assert url.with_auth('zack') == 'https://[email protected]/'
def test_with_auth_with_one_arg_replaces_whole_auth_string_with_username(self): url = URL('https://*****:*****@github.com/') assert url.with_auth('zack') == 'https://[email protected]/'
def test_without_password_removes_password(self): url = URL('https://*****:*****@github.com/') assert url.without_password() == 'https://[email protected]/'
def test_with_password_replaces_password(self): url = URL('https://*****:*****@github.com/') assert url.with_password('5678') == 'https://*****:*****@github.com/'
def test_with_password_raises_ValueError_when_there_is_no_username(self): url = URL('https://github.com/') assert_raises(ValueError, lambda: url.with_password('1234'))
def test_encode_hostname_idna(self): assert (URL.from_iri(u('https://\xe9xample.com/')) == 'https://xn--xample-9ua.com/')
def test_encode_fragment(self): assert (URL.from_iri(u('https://example.com/#fr\xe5gment')) == 'https://example.com/#fr%C3%A5gment')
def test_port_maintained(self): assert (URL.from_iri(u('https://\xe9xample.com:80/')) == 'https://xn--xample-9ua.com:80/')
def test_quoted_iri(self): """ If an IRI already has some quoted characters, they will be maintained as is. """ assert (URL.from_iri(u('https://example.com/foo%20b\xe5r/')) == 'https://example.com/foo%20b%C3%A5r/')
def test_encode_query(self): assert (URL.from_iri(u('https://example.com/?k\xe9y=v\xe5l&key2=val2')) == 'https://example.com/?k%C3%A9y=v%C3%A5l&key2=val2')
def test_without_username_removes_username(self): url = URL('https://[email protected]/') assert url.without_username() == 'https://github.com/'
def test_path_params(self): assert (URL.from_iri(u('https://example.com/foo;p\xe5rameter')) == 'https://example.com/foo;p%C3%A5rameter')
def test_with_port_replaces_port_number(self): url = URL('https://github.com:59/') assert url.with_port(67) == 'https://github.com:67/'
def test_quote_other_special_characters(self): assert (URL.from_iri(u('https://example.com/foo bar/')) == 'https://example.com/foo%20bar/')
def test_without_port_removes_port_number(self): url = URL('https://github.com:59/') assert url.without_port() == 'https://github.com/'
def setUp(self): self.url = URL("https://github.com/zacharyvoase/urlblocks?spam=eggs#foo")
class URLObjectModificationTest(unittest.TestCase): def setUp(self): self.url = URL('https://github.com/zacharyvoase/urlblocks?spam=eggs#foo') def test_with_scheme_replaces_scheme(self): assert (self.url.with_scheme('http') == 'http://github.com/zacharyvoase/urlblocks?spam=eggs#foo') def test_with_netloc_replaces_netloc(self): assert (self.url.with_netloc('example.com') == 'https://example.com/zacharyvoase/urlblocks?spam=eggs#foo') def test_with_hostname_replaces_hostname(self): url = URL('https://*****:*****@github.com/') assert (url.with_hostname('example.com') == 'https://*****:*****@example.com/') def test_with_username_adds_username(self): url = URL('https://github.com/') assert url.with_username('zack') == 'https://[email protected]/' def test_with_username_replaces_username(self): url = URL('https://[email protected]/') assert url.with_username('alice') == 'https://[email protected]/' def test_without_username_removes_username(self): url = URL('https://[email protected]/') assert url.without_username() == 'https://github.com/' def test_with_password_adds_password(self): url = URL('https://[email protected]/') assert url.with_password('1234') == 'https://*****:*****@github.com/' def test_with_password_raises_ValueError_when_there_is_no_username(self): url = URL('https://github.com/') assert_raises(ValueError, lambda: url.with_password('1234')) def test_with_password_replaces_password(self): url = URL('https://*****:*****@github.com/') assert url.with_password('5678') == 'https://*****:*****@github.com/' def test_without_password_removes_password(self): url = URL('https://*****:*****@github.com/') assert url.without_password() == 'https://[email protected]/' def test_with_auth_with_one_arg_adds_username(self): url = URL('https://github.com/') assert url.with_auth('zack') == 'https://[email protected]/' def test_with_auth_with_one_arg_replaces_whole_auth_string_with_username(self): url = URL('https://*****:*****@github.com/') assert url.with_auth('zack') == 'https://[email protected]/' def test_with_auth_with_two_args_adds_username_and_password(self): url = URL('https://github.com/') assert url.with_auth('zack', '1234') == 'https://*****:*****@github.com/' def test_with_auth_with_two_args_replaces_whole_auth_string_with_username_and_password(self): # Replaces username-only auth string url = URL('https://[email protected]/') assert url.with_auth('zack', '1234') == 'https://*****:*****@github.com/' # Replaces username and password. url = URL('https://*****:*****@github.com/') assert url.with_auth('zack', '1234') == 'https://*****:*****@github.com/' def test_without_auth_removes_entire_auth_string(self): # No username or password => no-op. url = URL('https://github.com/') assert url.without_auth() == 'https://github.com/' # Username-only. url = URL('https://[email protected]/') assert url.without_auth() == 'https://github.com/' # Username and password. url = URL('https://*****:*****@github.com/') assert url.without_auth() == 'https://github.com/' def test_with_port_adds_port_number(self): assert (self.url.with_port(24) == 'https://github.com:24/zacharyvoase/urlblocks?spam=eggs#foo') def test_with_port_replaces_port_number(self): url = URL('https://github.com:59/') assert url.with_port(67) == 'https://github.com:67/' def test_without_port_removes_port_number(self): url = URL('https://github.com:59/') assert url.without_port() == 'https://github.com/' def test_with_path_replaces_path(self): assert (self.url.with_path('/dvxhouse/intessa') == 'https://github.com/dvxhouse/intessa?spam=eggs#foo') def test_root_goes_to_root_path(self): assert self.url.root == 'https://github.com/?spam=eggs#foo' def test_parent_jumps_up_one_level(self): url = URL('https://github.com/zacharyvoase/urlblocks') assert url.parent == 'https://github.com/zacharyvoase/' assert url.parent.parent == 'https://github.com/' def test_add_path_segment_adds_a_path_segment(self): url = URL('https://github.com/zacharyvoase/urlblocks') assert (url.add_path_segment('tree') == 'https://github.com/zacharyvoase/urlblocks/tree') assert (url.add_path_segment('tree/master') == 'https://github.com/zacharyvoase/urlblocks/tree%2Fmaster') def test_add_path_adds_a_partial_path(self): url = URL('https://github.com/zacharyvoase/urlblocks') assert (url.add_path('tree') == 'https://github.com/zacharyvoase/urlblocks/tree') assert (url.add_path('tree/master') == 'https://github.com/zacharyvoase/urlblocks/tree/master') def test_is_leaf(self): assert URL('https://github.com/zacharyvoase/urlblocks').is_leaf assert not URL('https://github.com/zacharyvoase/').is_leaf def test_with_query_replaces_query(self): assert (self.url.with_query('spam-ham-eggs') == 'https://github.com/zacharyvoase/urlblocks?spam-ham-eggs#foo') def test_without_query_removes_query(self): assert (self.url.without_query() == 'https://github.com/zacharyvoase/urlblocks#foo') def test_add_query_param_adds_one_query_parameter(self): assert (self.url.add_query_param('spam', 'ham') == 'https://github.com/zacharyvoase/urlblocks?spam=eggs&spam=ham#foo') def test_add_query_params_adds_multiple_query_parameters(self): assert (self.url.add_query_params([('spam', 'ham'), ('foo', 'bar')]) == 'https://github.com/zacharyvoase/urlblocks?spam=eggs&spam=ham&foo=bar#foo') def test_add_query_params_with_multiple_values_adds_the_same_query_parameter_multiple_times(self): assert (self.url.add_query_params({'foo': ['bar', 'baz']}) == 'https://github.com/zacharyvoase/urlblocks?spam=eggs&foo=bar&foo=baz#foo') def test_set_query_param_adds_or_replaces_one_query_parameter(self): assert (self.url.set_query_param('spam', 'ham') == 'https://github.com/zacharyvoase/urlblocks?spam=ham#foo') def test_set_query_params_adds_or_replaces_multiple_query_parameters(self): assert (self.url.set_query_params({'foo': 'bar'}, spam='ham') == 'https://github.com/zacharyvoase/urlblocks?foo=bar&spam=ham#foo') def test_set_query_params_with_multiple_values_adds_or_replaces_the_same_parameter_multiple_times(self): assert (self.url.set_query_params({'spam': ['bar', 'baz']}) == 'https://github.com/zacharyvoase/urlblocks?spam=bar&spam=baz#foo') assert (self.url.set_query_params({'foo': ['bar', 'baz']}) == 'https://github.com/zacharyvoase/urlblocks?spam=eggs&foo=bar&foo=baz#foo') # Ensure it removes all appearances of an existing name before adding # the new ones. url = URL('https://github.com/zacharyvoase/urlblocks?foo=bar&foo=baz#foo') assert (url.set_query_params({'foo': ['spam', 'ham']}) == 'https://github.com/zacharyvoase/urlblocks?foo=spam&foo=ham#foo') def test_del_query_param_removes_one_query_parameter(self): assert (self.url.del_query_param('spam') == 'https://github.com/zacharyvoase/urlblocks#foo') def test_del_query_params_removes_multiple_query_parameters(self): url = URL('https://github.com/zacharyvoase/urlblocks?foo=bar&baz=spam#foo') assert (url.del_query_params(['foo', 'baz']) == 'https://github.com/zacharyvoase/urlblocks#foo') def test_with_fragment_replaces_fragment(self): assert (self.url.with_fragment('part') == 'https://github.com/zacharyvoase/urlblocks?spam=eggs#part') def test_with_fragment_encodes_fragment_correctly(self): assert (self.url.with_fragment('foo bar#baz') == 'https://github.com/zacharyvoase/urlblocks?spam=eggs#foo%20bar%23baz') def test_without_fragment_removes_fragment(self): assert (self.url.without_fragment() == 'https://github.com/zacharyvoase/urlblocks?spam=eggs')