Source code for cherrypy.test.test_httputil

"""Test helpers from ``cherrypy.lib.httputil`` module."""
import pytest
import http.client

from cherrypy.lib import httputil


[docs]@pytest.mark.parametrize( 'script_name,path_info,expected_url', [ ('/sn/', '/pi/', '/sn/pi/'), ('/sn/', '/pi', '/sn/pi'), ('/sn/', '/', '/sn/'), ('/sn/', '', '/sn/'), ('/sn', '/pi/', '/sn/pi/'), ('/sn', '/pi', '/sn/pi'), ('/sn', '/', '/sn/'), ('/sn', '', '/sn'), ('/', '/pi/', '/pi/'), ('/', '/pi', '/pi'), ('/', '/', '/'), ('/', '', '/'), ('', '/pi/', '/pi/'), ('', '/pi', '/pi'), ('', '/', '/'), ('', '', '/'), ] ) def test_urljoin(script_name, path_info, expected_url): """Test all slash+atom combinations for SCRIPT_NAME and PATH_INFO.""" actual_url = httputil.urljoin(script_name, path_info) assert actual_url == expected_url
EXPECTED_200 = (200, 'OK', 'Request fulfilled, document follows') EXPECTED_500 = ( 500, 'Internal Server Error', 'The server encountered an unexpected condition which ' 'prevented it from fulfilling the request.', ) EXPECTED_404 = (404, 'Not Found', 'Nothing matches the given URI') EXPECTED_444 = (444, 'Non-existent reason', '')
[docs]@pytest.mark.parametrize( 'status,expected_status', [ (None, EXPECTED_200), (200, EXPECTED_200), ('500', EXPECTED_500), (http.client.NOT_FOUND, EXPECTED_404), ('444 Non-existent reason', EXPECTED_444), ] ) def test_valid_status(status, expected_status): """Check valid int, string and http.client-constants statuses processing.""" assert httputil.valid_status(status) == expected_status
[docs]@pytest.mark.parametrize( 'status_code,error_msg', [ ( 'hey', r"Illegal response status from server \('hey' is non-numeric\)." ), ( {'hey': 'hi'}, r'Illegal response status from server ' r"\(\{'hey': 'hi'\} is non-numeric\).", ), (1, r'Illegal response status from server \(1 is out of range\).'), (600, r'Illegal response status from server \(600 is out of range\).'), ] ) def test_invalid_status(status_code, error_msg): """Check that invalid status cause certain errors.""" with pytest.raises(ValueError, match=error_msg): httputil.valid_status(status_code)