jw-pkg/test/unit/python/jw/pkg/lib/Uri/test.py
Jan Lindemann 62803a4a1b
lib.Uri: Return 'file' scheme for local paths

The scheme property returns 'file://' for local paths instead of 'file', causing scheme_plus_authority to produce 'file://://' with a triple slash.

Also fix the test to expect 'file' instead of 'file://'.

Assisted-by: unsloth/Qwen3.6-35B-A3B-GGUF:IQ4_NL with pi.dev v0.80.2
Signed-off-by: Jan Lindemann <jan@janware.com>
2026-07-04 07:21:43 +02:00

82 lines
2.1 KiB
Python

from jw.pkg.lib.Uri import Uri
# Basic URL parsing
u = Uri('ssh://john.doe@host:22/path/to/repo')
assert u.protocol == 'ssh'
assert u.hostname == 'host'
assert u.port == 22
assert u.path == '/path/to/repo'
# Username and password
u = Uri('https://user:pass@example.com/repo')
assert u.username == 'user'
assert u.password == 'pass'
# Credentials in output
u = Uri('https://user:secret@example.com/repo')
assert 'secret' in u.full # full shows password
assert '<hidden>' in u.safe_full_with_username # safe version hides password
# Scheme defaults to file
u = Uri('/local/path')
assert u.scheme == 'file'
assert u.protocol == 'file'
# Pimp returns existing Uri unchanged
u1 = Uri('ssh://host/path')
u2 = Uri.pimp(u1)
assert u2 is u1
# New with path (add)
u = Uri('ssh://host/path')
u2 = u.new_add_path('subdir')
assert u2.to_string == 'ssh://host/path/subdir'
# New with path (replace) - to_string is updated
u3 = u.new_replace_path('/other')
assert u3.to_string == 'ssh://host/other'
# Authority includes credentials
u = Uri('ssh://user:pass@host:22/path')
assert u.authority == 'userpass@host:22'
# Origin excludes credentials
assert u.origin == 'host:22'
# ID and safe version hide password
assert u.id == 'ssh://user:<hidden>@host:22'
assert '<hidden>' in u.safe_full_with_username
# Full includes path and credentials
assert u.full == 'ssh://userpass@host:22/path'
# Simple URLs
u = Uri('https://example.com/repo.git')
assert u.hostname == 'example.com'
assert u.path == '/repo.git'
assert u.basename == 'repo.git'
# Username setter
u = Uri('ssh://host/path')
u.set_username('newuser')
assert u.username == 'newuser'
# Password setter
u = Uri('ssh://host/path')
u.set_password('newpass')
assert u.password == 'newpass'
# No port
u = Uri('ssh://host/path')
assert u.port is None
assert u.port_str is None
# to_string returns original
u = Uri('ssh://user:pass@host:22/path')
assert u.to_string == 'ssh://user:pass@host:22/path'
# String representation hides credentials
u = Uri('https://user:secret@example.com/repo.git')
assert '<hidden>' in str(u)
print('All Uri tests passed')