50 lines
1.3 KiB
Python
50 lines
1.3 KiB
Python
|
|
import re
|
|
from nose.tools import assert_regex, assert_not_regex
|
|
|
|
from notebook.base.handlers import path_regex
|
|
from notebook.utils import url_path_join
|
|
from .launchnotebook import NotebookTestBase
|
|
|
|
# build regexps that tornado uses:
|
|
path_pat = re.compile('^' + '/x%s' % path_regex + '$')
|
|
|
|
|
|
def test_path_regex():
|
|
for path in (
|
|
'/x',
|
|
'/x/',
|
|
'/x/foo',
|
|
'/x/foo.ipynb',
|
|
'/x/foo/bar',
|
|
'/x/foo/bar.txt',
|
|
):
|
|
assert_regex(path, path_pat)
|
|
|
|
def test_path_regex_bad():
|
|
for path in (
|
|
'/xfoo',
|
|
'/xfoo/',
|
|
'/xfoo/bar',
|
|
'/xfoo/bar/',
|
|
'/x/foo/bar/',
|
|
'/x//foo',
|
|
'/y',
|
|
'/y/x/foo',
|
|
):
|
|
assert_not_regex(path, path_pat)
|
|
|
|
|
|
class RedirectTestCase(NotebookTestBase):
|
|
def test_trailing_slash(self):
|
|
for uri, expected in (
|
|
("/notebooks/mynotebook/", "/notebooks/mynotebook"),
|
|
("////foo///", "/foo"),
|
|
("//example.com/", "/example.com"),
|
|
("/has/param/?hasparam=true", "/has/param?hasparam=true"),
|
|
):
|
|
r = self.request("GET", uri, allow_redirects=False)
|
|
print(uri, expected)
|
|
assert r.status_code == 302
|
|
assert "Location" in r.headers
|
|
assert r.headers["Location"] == url_path_join(self.url_prefix, expected)
|