def test_routes_raise(self): ''' Test URLs that raise exceptions ''' # test non-exception variants load(data='') self.assertEqual( filter_url('http://domain.com/init'), "/init/default/index") self.assertEqual(filter_url( 'http://domain.com/init/default'), "/init/default/index") self.assertEqual(filter_url('http://domain.com/init/default/fcn.ext'), "/init/default/fcn.ext") self.assertEqual(filter_url('http://domain.com/init/default/fcn/arg'), "/init/default/fcn ['arg']") # now raise-HTTP variants self.assertRaises(HTTP, filter_url, 'http://domain.com/bad!ctl') self.assertRaises(HTTP, filter_url, 'http://domain.com/ctl/bad!fcn') self.assertRaises( HTTP, filter_url, 'http://domain.com/ctl/fcn.bad!ext') #self.assertRaises( # HTTP, filter_url, 'http://domain.com/ctl/fcn/bad!arg') #try: # # 2.7+ only # self.assertRaisesRegexp(HTTP, '400 BAD REQUEST \[invalid path\]', filter_url, 'http://domain.com/init/bad!ctl') # self.assertRaisesRegexp(HTTP, '400 BAD REQUEST \[invalid path\]', filter_url, 'http://domain.com/init/ctlr/bad!fcn') # self.assertRaisesRegexp(HTTP, '400 BAD REQUEST \[invalid path\]', filter_url, 'http://domain.com/init/ctlr/fcn.bad!ext') # self.assertRaisesRegexp(HTTP, '400 BAD REQUEST \[invalid path\]', filter_url, 'http://domain.com/appc/init/fcn/bad!arg') #except AttributeError: # pass self.assertEqual(filter_url('http://domain.com/welcome/default/fcn_1'), "/welcome/default/fcn_1")
def test_routes_raise(self): ''' Test URLs that raise exceptions ''' # test non-exception variants load(data='') self.assertEqual(filter_url('http://domain.com/init'), "/init/default/index") self.assertEqual(filter_url('http://domain.com/init/default'), "/init/default/index") self.assertEqual(filter_url('http://domain.com/init/default/fcn.ext'), "/init/default/fcn.ext") self.assertEqual(filter_url('http://domain.com/init/default/fcn/arg'), "/init/default/fcn ['arg']") # now raise-HTTP variants self.assertRaises(HTTP, filter_url, 'http://domain.com/bad!ctl') self.assertRaises(HTTP, filter_url, 'http://domain.com/ctl/bad!fcn') self.assertRaises(HTTP, filter_url, 'http://domain.com/ctl/fcn.bad!ext') #self.assertRaises( # HTTP, filter_url, 'http://domain.com/ctl/fcn/bad!arg') #try: # # 2.7+ only # self.assertRaisesRegexp(HTTP, '400 BAD REQUEST \[invalid path\]', filter_url, 'http://domain.com/init/bad!ctl') # self.assertRaisesRegexp(HTTP, '400 BAD REQUEST \[invalid path\]', filter_url, 'http://domain.com/init/ctlr/bad!fcn') # self.assertRaisesRegexp(HTTP, '400 BAD REQUEST \[invalid path\]', filter_url, 'http://domain.com/init/ctlr/fcn.bad!ext') # self.assertRaisesRegexp(HTTP, '400 BAD REQUEST \[invalid path\]', filter_url, 'http://domain.com/appc/init/fcn/bad!arg') #except AttributeError: # pass self.assertEqual(filter_url('http://domain.com/welcome/default/fcn_1'), "/welcome/default/fcn_1")
def test_routes_query(self): """ Test query appending """ data = r''' routes_in = ( ('/service/$model/create', '/app/default/call/json/create?model=$model'), ) ''' load(data=data) self.assertEqual(filter_url('http://localhost:8000/service/person/create'), "/app/default/call ['json', 'create'] ?model=person") self.assertEqual(filter_url('http://localhost:8000/service/person/create?var1=val1'), "/app/default/call ['json', 'create'] ?model=person&var1=val1")
def test_routes_query(self): """ Test query appending """ data = r''' routes_in = ( ('/service/$model/create', '/app/default/call/json/create?model=$model'), ) ''' load(data=data) self.assertEqual( filter_url('http://localhost:8000/service/person/create'), "/app/default/call ['json', 'create'] ?model=person") self.assertEqual( filter_url( 'http://localhost:8000/service/person/create?var1=val1'), "/app/default/call ['json', 'create'] ?model=person&var1=val1")
def test_routes_specific(self): """ Test app-specific routes.py Note that make_apptree above created applications/examples/routes.py with a default_function. """ data = r''' routes_app = [ (r'/(?P<app>welcome|admin|examples)\b.*', r'\g<app>'), (r'$anything', r'welcome'), (r'/?$anything', r'welcome'), ] ''' load(data=data) self.assertEqual( filter_url('http://domain.com/welcome'), '/welcome/default/index') self.assertEqual(filter_url( 'http://domain.com/examples'), '/examples/default/exdef')
def test_routes_specific(self): """ Test app-specific routes.py Note that make_apptree above created applications/examples/routes.py with a default_function. """ data = r''' routes_app = [ (r'/(?P<app>welcome|admin|examples)\b.*', r'\g<app>'), (r'$anything', r'welcome'), (r'/?$anything', r'welcome'), ] ''' load(data=data) self.assertEqual(filter_url('http://domain.com/welcome'), '/welcome/default/index') self.assertEqual(filter_url('http://domain.com/examples'), '/examples/default/exdef')
def test_request_uri(self): ''' Test REQUEST_URI in env ''' data = r'''routes_in = [ ('/abc', '/init/default/abc'), ('/index/$anything', '/init/default/index/$anything'), ] ''' load(data=data) self.assertEqual( filter_url('http://domain.com/abc', env=True).request_uri, '/init/default/abc') self.assertEqual( filter_url('http://domain.com/abc?def', env=True).request_uri, '/init/default/abc?def') self.assertEqual( filter_url('http://domain.com/index/abc', env=True).request_uri, "/init/default/index/abc") self.assertEqual( filter_url('http://domain.com/index/a%20bc', env=True).request_uri, "/init/default/index/a bc")
def test_routes_defapp(self): """ Test the default-application function """ data = r''' default_application = 'defapp' ''' load(data=data) # incoming self.assertEqual( filter_url('http://domain.com'), '/defapp/default/index') self.assertEqual( filter_url('http://domain.com/'), '/defapp/default/index') self.assertEqual( filter_url('http://domain.com/welcome'), '/welcome/default/index') self.assertEqual( filter_url('http://domain.com/app'), '/app/default/index') self.assertEqual(filter_url('http://domain.com/welcome/default/index/abc'), "/welcome/default/index ['abc']") self.assertEqual(filter_url('http://domain.com/welcome/static/abc'), '%s/applications/welcome/static/abc' % root) self.assertEqual(filter_url('http://domain.com/defapp/static/path/to/static'), "%s/applications/defapp/static/path/to/static" % root)
def test_routes_defapp(self): """ Test the default-application function """ data = r''' default_application = 'defapp' ''' load(data=data) # incoming self.assertEqual(filter_url('http://domain.com'), '/defapp/default/index') self.assertEqual(filter_url('http://domain.com/'), '/defapp/default/index') self.assertEqual(filter_url('http://domain.com/welcome'), '/welcome/default/index') self.assertEqual(filter_url('http://domain.com/app'), '/app/default/index') self.assertEqual( filter_url('http://domain.com/welcome/default/index/abc'), "/welcome/default/index ['abc']") self.assertEqual(filter_url('http://domain.com/welcome/static/abc'), '%s/applications/welcome/static/abc' % root) self.assertEqual( filter_url('http://domain.com/defapp/static/path/to/static'), "%s/applications/defapp/static/path/to/static" % root)
def test_routes_null(self): """ Tests a null routes table """ load(data='') # incoming self.assertEqual( filter_url('http://domain.com'), '/init/default/index') self.assertEqual( filter_url('http://domain.com/'), '/init/default/index') self.assertEqual( filter_url('http://domain.com/abc'), '/abc/default/index') self.assertEqual( filter_url('http://domain.com/abc/'), '/abc/default/index') self.assertEqual( filter_url('http://domain.com/abc/def'), "/abc/def/index") self.assertEqual( filter_url('http://domain.com/abc/def/'), "/abc/def/index") self.assertEqual( filter_url('http://domain.com/abc/def/ghi'), "/abc/def/ghi") self.assertEqual( filter_url('http://domain.com/abc/def/ghi/'), "/abc/def/ghi") self.assertEqual(filter_url( 'http://domain.com/abc/def/ghi/jkl'), "/abc/def/ghi ['jkl']") self.assertEqual(filter_url( 'http://domain.com/abc/def/ghi/j%20kl'), "/abc/def/ghi ['j_kl']") self.assertEqual(filter_url('http://domain.com/welcome/static/path/to/static'), norm_root("%s/applications/welcome/static/path/to/static" % root)) # no more necessary since explcit check for directory traversal attacks """ self.assertRaises(HTTP, filter_url, 'http://domain.com/welcome/static/bad/path/to/st~tic') try: # 2.7+ only self.assertRaisesRegexp(HTTP, "400.*BAD REQUEST \[invalid path\]", filter_url, 'http://domain.com/welcome/static/bad/path/to/st~tic') except AttributeError: pass """ # outgoing self.assertEqual(filter_url('http://domain.com/init/default/index', out=True), '/init/default/index') self.assertEqual(filter_url('http://domain.com/init/default/index/arg1', out=True), '/init/default/index/arg1') self.assertEqual(filter_url('http://domain.com/init/default/abc', out=True), '/init/default/abc')
def test_routes_args(self): ''' Test URL args parsing/generation ''' data = r'''routes_in = [ ('/robots.txt', '/welcome/static/robots.txt'), ('/favicon.ico', '/welcome/static/favicon.ico'), ('/admin$anything', '/admin$anything'), ('.*:https?://(.*\\.)?domain1.com:$method /', '/app1/default'), ('.*:https?://(.*\\.)?domain1.com:$method /static/$anything', '/app1/static/$anything'), ('.*:https?://(.*\\.)?domain1.com:$method /appadmin/$anything', '/app1/appadmin/$anything'), ('.*:https?://(.*\\.)?domain1.com:$method /$anything', '/app1/default/$anything'), ('.*:https?://(.*\\.)?domain2.com:$method /', '/app2/default'), ('.*:https?://(.*\\.)?domain2.com:$method /static/$anything', '/app2/static/$anything'), ('.*:https?://(.*\\.)?domain2.com:$method /appadmin/$anything', '/app2/appadmin/$anything'), ('.*:https?://(.*\\.)?domain2.com:$method /$anything', '/app2/default/$anything'), ('.*:https?://(.*\\.)?domain3.com:$method /', '/app3/defcon3'), ('.*:https?://(.*\\.)?domain3.com:$method /static/$anything', '/app3/static/$anything'), ('.*:https?://(.*\\.)?domain3.com:$method /appadmin/$anything', '/app3/appadmin/$anything'), ('.*:https?://(.*\\.)?domain3.com:$method /$anything', '/app3/defcon3/$anything'), ('/', '/welcome/default'), ('/welcome/default/$anything', '/welcome/default/$anything'), ('/welcome/$anything', '/welcome/default/$anything'), ('/static/$anything', '/welcome/static/$anything'), ('/appadmin/$anything', '/welcome/appadmin/$anything'), ('/$anything', '/welcome/default/$anything'), ] routes_out = [ ('/welcome/static/$anything', '/static/$anything'), ('/welcome/appadmin/$anything', '/appadmin/$anything'), ('/welcome/default/$anything', '/$anything'), ('/app1/static/$anything', '/static/$anything'), ('/app1/appadmin/$anything', '/appadmin/$anything'), ('/app1/default/$anything', '/$anything'), ('/app2/static/$anything', '/static/$anything'), ('/app2/appadmin/$anything', '/appadmin/$anything'), ('/app2/default/$anything', '/$anything'), ('/app3/static/$anything', '/static/$anything'), ('/app3/appadmin/$anything', '/appadmin/$anything'), ('/app3/defcon3/$anything', '/$anything') ] ''' load(data=data) self.assertEqual( filter_url('http://domain.com/welcome/default/f/arg1'), "/welcome/default/f ['arg1']") self.assertEqual( filter_url('http://domain.com/welcome/default/f/arg1/'), "/welcome/default/f ['arg1']") self.assertEqual( filter_url('http://domain.com/welcome/default/f/arg1//'), "/welcome/default/f ['arg1', '']") self.assertEqual( filter_url('http://domain.com/welcome/default/f//arg1'), "/welcome/default/f ['', 'arg1']") self.assertEqual( filter_url('http://domain.com/welcome/default/f/arg1/arg2'), "/welcome/default/f ['arg1', 'arg2']") self.assertEqual( filter_url('http://domain.com/welcome/default/f/arg1//arg2'), "/welcome/default/f ['arg1', '', 'arg2']") self.assertEqual( filter_url('http://domain.com/welcome/default/f/arg1//arg3/'), "/welcome/default/f ['arg1', '', 'arg3']") self.assertEqual( filter_url('http://domain.com/welcome/default/f/arg1//arg3//'), "/welcome/default/f ['arg1', '', 'arg3', '']") self.assertEqual( filter_url('http://domain.com/welcome/default/f', out=True), "/f") self.assertEqual(regex_filter_out('/welcome/default/f'), "/f") self.assertEqual( str(URL(a='welcome', c='default', f='f', args=None)), "/f") self.assertEqual(str( URL(a='welcome', c='default', f='f', args=['arg1'])), "/f/arg1") self.assertEqual(str(URL( a='welcome', c='default', f='f', args=['arg1', ''])), "/f/arg1//") self.assertEqual(str(URL(a='welcome', c='default', f='f', args=['arg1', '', 'arg3'])), "/f/arg1//arg3") self.assertEqual(str( URL(a='welcome', c='default', f='f', args=['ar g'])), "/f/ar%20g") self.assertEqual(str(URL( a='welcome', c='default', f='f', args=['årg'])), "/f/%C3%A5rg") self.assertEqual( str(URL(a='welcome', c='default', f='fünc')), "/f\xc3\xbcnc")
def test_routes_null(self): """ Tests a null routes table """ load(data='') # incoming self.assertEqual(filter_url('http://domain.com'), '/init/default/index') self.assertEqual(filter_url('http://domain.com/'), '/init/default/index') self.assertEqual(filter_url('http://domain.com/abc'), '/abc/default/index') self.assertEqual(filter_url('http://domain.com/abc/'), '/abc/default/index') self.assertEqual(filter_url('http://domain.com/abc/def'), "/abc/def/index") self.assertEqual(filter_url('http://domain.com/abc/def/'), "/abc/def/index") self.assertEqual(filter_url('http://domain.com/abc/def/ghi'), "/abc/def/ghi") self.assertEqual(filter_url('http://domain.com/abc/def/ghi/'), "/abc/def/ghi") self.assertEqual(filter_url('http://domain.com/abc/def/ghi/jkl'), "/abc/def/ghi ['jkl']") self.assertEqual(filter_url('http://domain.com/abc/def/ghi/j%20kl'), "/abc/def/ghi ['j_kl']") self.assertEqual( filter_url('http://domain.com/welcome/static/path/to/static'), norm_root("%s/applications/welcome/static/path/to/static" % root)) # no more necessary since explcit check for directory traversal attacks """ self.assertRaises(HTTP, filter_url, 'http://domain.com/welcome/static/bad/path/to/st~tic') try: # 2.7+ only self.assertRaisesRegexp(HTTP, "400.*BAD REQUEST \[invalid path\]", filter_url, 'http://domain.com/welcome/static/bad/path/to/st~tic') except AttributeError: pass """ # outgoing self.assertEqual( filter_url('http://domain.com/init/default/index', out=True), '/init/default/index') self.assertEqual( filter_url('http://domain.com/init/default/index/arg1', out=True), '/init/default/index/arg1') self.assertEqual( filter_url('http://domain.com/init/default/abc', out=True), '/init/default/abc')
def test_routes_args(self): ''' Test URL args parsing/generation ''' data = r'''routes_in = [ ('/robots.txt', '/welcome/static/robots.txt'), ('/favicon.ico', '/welcome/static/favicon.ico'), ('/admin$anything', '/admin$anything'), ('.*:https?://(.*\\.)?domain1.com:$method /', '/app1/default'), ('.*:https?://(.*\\.)?domain1.com:$method /static/$anything', '/app1/static/$anything'), ('.*:https?://(.*\\.)?domain1.com:$method /appadmin/$anything', '/app1/appadmin/$anything'), ('.*:https?://(.*\\.)?domain1.com:$method /$anything', '/app1/default/$anything'), ('.*:https?://(.*\\.)?domain2.com:$method /', '/app2/default'), ('.*:https?://(.*\\.)?domain2.com:$method /static/$anything', '/app2/static/$anything'), ('.*:https?://(.*\\.)?domain2.com:$method /appadmin/$anything', '/app2/appadmin/$anything'), ('.*:https?://(.*\\.)?domain2.com:$method /$anything', '/app2/default/$anything'), ('.*:https?://(.*\\.)?domain3.com:$method /', '/app3/defcon3'), ('.*:https?://(.*\\.)?domain3.com:$method /static/$anything', '/app3/static/$anything'), ('.*:https?://(.*\\.)?domain3.com:$method /appadmin/$anything', '/app3/appadmin/$anything'), ('.*:https?://(.*\\.)?domain3.com:$method /$anything', '/app3/defcon3/$anything'), ('/', '/welcome/default'), ('/welcome/default/$anything', '/welcome/default/$anything'), ('/welcome/$anything', '/welcome/default/$anything'), ('/static/$anything', '/welcome/static/$anything'), ('/appadmin/$anything', '/welcome/appadmin/$anything'), ('/$anything', '/welcome/default/$anything'), ] routes_out = [ ('/welcome/static/$anything', '/static/$anything'), ('/welcome/appadmin/$anything', '/appadmin/$anything'), ('/welcome/default/$anything', '/$anything'), ('/app1/static/$anything', '/static/$anything'), ('/app1/appadmin/$anything', '/appadmin/$anything'), ('/app1/default/$anything', '/$anything'), ('/app2/static/$anything', '/static/$anything'), ('/app2/appadmin/$anything', '/appadmin/$anything'), ('/app2/default/$anything', '/$anything'), ('/app3/static/$anything', '/static/$anything'), ('/app3/appadmin/$anything', '/appadmin/$anything'), ('/app3/defcon3/$anything', '/$anything') ] ''' load(data=data) self.assertEqual( filter_url('http://domain.com/welcome/default/f/arg1'), "/welcome/default/f ['arg1']") self.assertEqual( filter_url('http://domain.com/welcome/default/f/arg1/'), "/welcome/default/f ['arg1']") self.assertEqual( filter_url('http://domain.com/welcome/default/f/arg1//'), "/welcome/default/f ['arg1', '']") self.assertEqual( filter_url('http://domain.com/welcome/default/f//arg1'), "/welcome/default/f ['', 'arg1']") self.assertEqual( filter_url('http://domain.com/welcome/default/f/arg1/arg2'), "/welcome/default/f ['arg1', 'arg2']") self.assertEqual( filter_url('http://domain.com/welcome/default/f/arg1//arg2'), "/welcome/default/f ['arg1', '', 'arg2']") self.assertEqual( filter_url('http://domain.com/welcome/default/f/arg1//arg3/'), "/welcome/default/f ['arg1', '', 'arg3']") self.assertEqual( filter_url('http://domain.com/welcome/default/f/arg1//arg3//'), "/welcome/default/f ['arg1', '', 'arg3', '']") self.assertEqual( filter_url('http://domain.com/welcome/default/f', out=True), "/f") self.assertEqual(regex_filter_out('/welcome/default/f'), "/f") self.assertEqual(str(URL(a='welcome', c='default', f='f', args=None)), "/f") self.assertEqual( str(URL(a='welcome', c='default', f='f', args=['arg1'])), "/f/arg1") self.assertEqual( str(URL(a='welcome', c='default', f='f', args=['arg1', ''])), "/f/arg1//") self.assertEqual( str(URL(a='welcome', c='default', f='f', args=['arg1', '', 'arg3'])), "/f/arg1//arg3") self.assertEqual( str(URL(a='welcome', c='default', f='f', args=['ar g'])), "/f/ar%20g") self.assertEqual( str(URL(a='welcome', c='default', f='f', args=['årg'])), "/f/%C3%A5rg") self.assertEqual(str(URL(a='welcome', c='default', f='fünc')), "/f\xc3\xbcnc")
def test_routes(self): # This tests the ~/routes.py settings. # line-too-long (C0301): *Line too long (%%s/%%s)* # pylint: disable=C0301 app_root = '/srv/http/dev.zco.mx/web2py/applications' in_tests = [ # (url, URL) ('http://my.domain.com/', '/zcomx/search/index'), ('http://my.domain.com/zcomx', '/zcomx/search/index'), ('http://my.domain.com/books', '/zcomx/books/index'), ('http://my.domain.com/books/index', '/zcomx/books/index'), ('http://my.domain.com/books/book', '/zcomx/books/book'), ('http://my.domain.com/zcomx/books', '/zcomx/books/index'), ('http://my.domain.com/zcomx/books/index', '/zcomx/books/index'), ('http://my.domain.com/zcomx/books/book', '/zcomx/books/book'), ('http://my.domain.com/zcomx/books/book/1', "/zcomx/books/book ['1']"), # Test: creators controller ('http://my.domain.com/creators', '/zcomx/creators/index'), ('http://my.domain.com/creators/index', '/zcomx/creators/index'), ('http://my.domain.com/zcomx/creators', '/zcomx/creators/index'), ('http://my.domain.com/zcomx/creators/index', '/zcomx/creators/index'), ('https://my.domain.com/zcomx/search/index', '/zcomx/search/index'), # Test: default/user/??? ('http://my.domain.com/login', "/zcomx/default/user ['login']"), ('http://my.domain.com/default/user/login', "/zcomx/default/user ['login']"), ('http://my.domain.com/default/user/logout', "/zcomx/default/user ['logout']"), # Test rss ('http://my.domain.com/abc.rss', "/zcomx/rss/route ?rss=abc.rss"), ('http://my.domain.com/zcomx/abc.rss', "/zcomx/rss/route ?rss=abc.rss"), ('http://my.domain.com/zco.mx.rss', "/zcomx/rss/route ?rss=zco.mx.rss"), ('http://my.domain.com/FirstLast(101.zco.mx).rss', "/zcomx/rss/route ?rss=FirstLast(101.zco.mx).rss"), ('http://my.domain.com/123/MyBook-001.rss', "/zcomx/rss/route ?creator=123&rss=MyBook-001.rss"), ('http://my.domain.com/FirstLast/MyBook-001.rss', "/zcomx/rss/route ?creator=FirstLast&rss=MyBook-001.rss"), # Test torrents ('http://my.domain.com/abc.torrent', "/zcomx/torrents/route ?torrent=abc.torrent"), ('http://my.domain.com/zcomx/abc.torrent', "/zcomx/torrents/route ?torrent=abc.torrent"), ('http://my.domain.com/zco.mx.torrent', "/zcomx/torrents/route ?torrent=zco.mx.torrent"), ('http://my.domain.com/FirstLast(101.zco.mx).torrent', "/zcomx/torrents/route ?torrent=FirstLast(101.zco.mx).torrent"), ('http://my.domain.com/123/My Book 001.torrent', "/zcomx/torrents/route ?creator=123&torrent=My Book 001.torrent"), ('http://my.domain.com/FirstLast/My Book 001.torrent', "/zcomx/torrents/route ?creator=FirstLast&torrent=My Book 001.torrent"), # Static files ('http://my.domain.com/favicon.ico', app_root + '/zcomx/static/images/favicon.ico'), ('http://dev.zco.mx/robots.txt', app_root + '/zcomx/static/robots.txt'), ('http://my.domain.com/zcomx/static/images/loading/16x16.gif', app_root + '/zcomx/static/images/loading/16x16.gif'), ('http://my.domain.com/zcomx/static/css/custom.css', app_root + '/zcomx/static/css/custom.css'), ('http://my.domain.com/zcomx/static/js/web2py.js', app_root + '/zcomx/static/js/web2py.js'), # Test https ('https://my.domain.com/', '/zcomx/search/index'), ('https://my.domain.com/zcomx', '/zcomx/search/index'), ('https://my.domain.com/books', '/zcomx/books/index'), ('https://my.domain.com/books/index', '/zcomx/books/index'), # Creator variations ('http://my.domain.com/aaa', "/zcomx/creators/index ?creator=aaa"), ('http://my.domain.com/aaa/', "/zcomx/creators/index ?creator=aaa"), ('http://my.domain.com/aaa/bbb', "/zcomx/creators/index ?creator=aaa&book=bbb"), ('http://my.domain.com/aaa/bbb/', "/zcomx/creators/index ?creator=aaa&book=bbb"), ('http://my.domain.com/aaa/monies', "/zcomx/creators/index ?creator=aaa&monies=1"), ('http://my.domain.com/aaa/monies/', "/zcomx/creators/index ?creator=aaa&monies=1"), ('http://my.domain.com/aaa/bbb/ccc', "/zcomx/creators/index ?creator=aaa&book_reader_url=/aaa/bbb/ccc"), ('http://my.domain.com/aaa/bbb/ccc/', "/zcomx/creators/index ?creator=aaa&book_reader_url=/aaa/bbb/ccc"), ('http://my.domain.com/zcomx/aaa', "/zcomx/creators/index ?creator=aaa"), ('http://my.domain.com/zcomx/aaa/', "/zcomx/creators/index ?creator=aaa"), ('http://my.domain.com/zcomx/aaa/bbb', "/zcomx/creators/index ?creator=aaa&book=bbb"), ('http://my.domain.com/zcomx/aaa/bbb/', "/zcomx/creators/index ?creator=aaa&book=bbb"), ('http://my.domain.com/zcomx/aaa/monies', "/zcomx/creators/index ?creator=aaa&monies=1"), ('http://my.domain.com/zcomx/aaa/monies/', "/zcomx/creators/index ?creator=aaa&monies=1"), ('http://my.domain.com/zcomx/aaa/bbb/ccc', "/zcomx/creators/index ?creator=aaa&book_reader_url=/aaa/bbb/ccc"), ('http://my.domain.com/zcomx/aaa/bbb/ccc/', "/zcomx/creators/index ?creator=aaa&book_reader_url=/aaa/bbb/ccc"), # Creators ('http://my.domain.com/FirstLast', "/zcomx/creators/index ?creator=FirstLast"), ('http://my.domain.com/First_M_Last', "/zcomx/creators/index ?creator=First_M_Last"), ("http://my.domain.com/First_O'Last", "/zcomx/creators/index ?creator=First_O'Last"), # Books ('http://my.domain.com/FirstLast/MyBook', '/zcomx/creators/index ?creator=FirstLast&book=MyBook'), ('http://my.domain.com/FirstLast/MyBook_(2014)', '/zcomx/creators/index ?creator=FirstLast&book=MyBook_(2014)'), ('http://my.domain.com/FirstLast/MyBook_001_(2014)', '/zcomx/creators/index ?creator=FirstLast&book=MyBook_001_(2014)'), ('http://my.domain.com/FirstLast/MyBook_01_of_04_(2014)', '/zcomx/creators/index ?creator=FirstLast&book=MyBook_01_of_04_(2014)'), # Monies ('http://my.domain.com/FirstLast/monies', '/zcomx/creators/index ?creator=FirstLast&monies=1'), # if anything after 'monies', assume 'monies' is a book title ('http://my.domain.com/zcomx/FirstLast/monies/001', '/zcomx/creators/index ?creator=FirstLast&book_reader_url=/FirstLast/monies/001'), # Pages ('http://my.domain.com/zcomx/FirstLast/MyBook/001', '/zcomx/creators/index ?creator=FirstLast&book_reader_url=/FirstLast/MyBook/001'), ('http://my.domain.com/zcomx/FirstLast/MyBook/001.jpg', '/zcomx/creators/index ?creator=FirstLast&book=MyBook&page=001.jpg'), # Embed books. ('http://my.domain.com/embed/FirstLast/MyBook', '/zcomx/creators/index ?creator=FirstLast&book=MyBook&page=001&embed=1'), ('http://my.domain.com/zcomx/embed/FirstLast/MyBook', '/zcomx/creators/index ?creator=FirstLast&book=MyBook&page=001&embed=1'), ('http://my.domain.com/embed/FirstLast/MyBook/003', '/zcomx/creators/index ?creator=FirstLast&book=MyBook&page=003&embed=1'), ('http://my.domain.com/zcomx/embed/FirstLast/MyBook/003', '/zcomx/creators/index ?creator=FirstLast&book=MyBook&page=003&embed=1'), # Appadmin should be routed like any other url ('http://my.domain.com/appadmin', "/zcomx/creators/index ?creator=appadmin"), ('http://my.domain.com/zcomx/appadmin', "/zcomx/creators/index ?creator=appadmin"), # Invalid controller (treated as creator name) ('http://my.domain.com/something', "/zcomx/creators/index ?creator=something"), ] for t in in_tests: self.assertEqual(filter_url(t[0]), t[1]) # in_tests_exceptions = [ # 'http://my.domain.com/aaa/bbb/a"bc.def', # ] # for t in in_tests_exceptions: # self.assertRaises(HTTP, filter_url, t) out_tests = [ # (URL, url) ('http://my.domain.com/zcomx/search/index', '/'), ('http://my.domain.com/zcomx/books/index', '/books'), ('http://my.domain.com/zcomx/books/book/1', '/books/book/1'), # Test: creators controller ('http://my.domain.com/zcomx/creators/index', '/creators'), # Test: default/user/??? ('http://my.domain.com/zcomx/default/user/login', '/login'), ('http://my.domain.com/zcomx/default/user/logout', '/default/user/logout'), # Static files ('http://my.domain.com/zcomx/static/images/favicon.ico', '/favicon.ico'), ('http://dev.zco.mx/zcomx/static/robots.txt', '/robots.txt'), ('http://my.domain.com/zcomx/static/images/loading.gif', '/zcomx/static/images/loading.gif'), ('http://my.domain.com/zcomx/static/css/custom.css', '/zcomx/static/css/custom.css'), ('http://my.domain.com/zcomx/static/js/web2py.js', '/zcomx/static/js/web2py.js'), # Test https ('https://my.domain.com/zcomx/books/index', '/books'), # Creators ('http://my.domain.com/creators/index/FirstLast', '/FirstLast'), ('http://my.domain.com/zcomx/creators/index/FirstLast', '/FirstLast'), ("http://my.domain.com/zcomx/creators/index/First_O'Last", "/First_O'Last"), # Test rss ('http://my.domain.com/zcomx/abc.rss/index', "/abc.rss"), ('http://my.domain.com/zcomx/zco.mx.rss/index', "/zco.mx.rss"), ('http://my.domain.com/zcomx/FirstLast(101.zco.mx).rss/index', "/FirstLast(101.zco.mx).rss"), ('http://my.domain.com/zcomx/FirstLast/MyBook-001.rss', "/FirstLast/MyBook-001.rss"), # Test torrents ('http://my.domain.com/zcomx/abc.torrent/index', "/abc.torrent"), ('http://my.domain.com/zcomx/zco.mx.torrent/index', "/zco.mx.torrent"), ('http://my.domain.com/zcomx/FirstLast(101.zco.mx).torrent/index', "/FirstLast(101.zco.mx).torrent"), ('http://my.domain.com/zcomx/FirstLast/My Book 001.torrent', "/FirstLast/My Book 001.torrent"), ] for t in out_tests: self.assertEqual(filter_url(t[0], out=True), t[1]) self.assertEqual(str(URL(a='zcomx', c='default', f='index')), '/')