mirror of
https://github.com/lazylibrarian/LazyLibrarian.git
synced 2026-04-19 14:36:56 -04:00
So branching to new branch, and will merge my changes from itsmeg ontop will merge branch back to head once everyone happy its stable.
202 lines
7.0 KiB
Python
Executable File
202 lines
7.0 KiB
Python
Executable File
import sys
|
|
|
|
import cherrypy
|
|
from cherrypy.test import helper
|
|
|
|
|
|
class TutorialTest(helper.CPWebCase):
|
|
|
|
def setup_server(cls):
|
|
|
|
conf = cherrypy.config.copy()
|
|
|
|
def load_tut_module(name):
|
|
"""Import or reload tutorial module as needed."""
|
|
cherrypy.config.reset()
|
|
cherrypy.config.update(conf)
|
|
|
|
target = "cherrypy.tutorial." + name
|
|
if target in sys.modules:
|
|
module = reload(sys.modules[target])
|
|
else:
|
|
module = __import__(target, globals(), locals(), [''])
|
|
# The above import will probably mount a new app at "".
|
|
app = cherrypy.tree.apps[""]
|
|
|
|
app.root.load_tut_module = load_tut_module
|
|
app.root.sessions = sessions
|
|
app.root.traceback_setting = traceback_setting
|
|
|
|
cls.supervisor.sync_apps()
|
|
load_tut_module.exposed = True
|
|
|
|
def sessions():
|
|
cherrypy.config.update({"tools.sessions.on": True})
|
|
sessions.exposed = True
|
|
|
|
def traceback_setting():
|
|
return repr(cherrypy.request.show_tracebacks)
|
|
traceback_setting.exposed = True
|
|
|
|
class Dummy:
|
|
pass
|
|
root = Dummy()
|
|
root.load_tut_module = load_tut_module
|
|
cherrypy.tree.mount(root)
|
|
setup_server = classmethod(setup_server)
|
|
|
|
|
|
def test01HelloWorld(self):
|
|
self.getPage("/load_tut_module/tut01_helloworld")
|
|
self.getPage("/")
|
|
self.assertBody('Hello world!')
|
|
|
|
def test02ExposeMethods(self):
|
|
self.getPage("/load_tut_module/tut02_expose_methods")
|
|
self.getPage("/showMessage")
|
|
self.assertBody('Hello world!')
|
|
|
|
def test03GetAndPost(self):
|
|
self.getPage("/load_tut_module/tut03_get_and_post")
|
|
|
|
# Try different GET queries
|
|
self.getPage("/greetUser?name=Bob")
|
|
self.assertBody("Hey Bob, what's up?")
|
|
|
|
self.getPage("/greetUser")
|
|
self.assertBody('Please enter your name <a href="./">here</a>.')
|
|
|
|
self.getPage("/greetUser?name=")
|
|
self.assertBody('No, really, enter your name <a href="./">here</a>.')
|
|
|
|
# Try the same with POST
|
|
self.getPage("/greetUser", method="POST", body="name=Bob")
|
|
self.assertBody("Hey Bob, what's up?")
|
|
|
|
self.getPage("/greetUser", method="POST", body="name=")
|
|
self.assertBody('No, really, enter your name <a href="./">here</a>.')
|
|
|
|
def test04ComplexSite(self):
|
|
self.getPage("/load_tut_module/tut04_complex_site")
|
|
msg = '''
|
|
<p>Here are some extra useful links:</p>
|
|
|
|
<ul>
|
|
<li><a href="http://del.icio.us">del.icio.us</a></li>
|
|
<li><a href="http://www.mornography.de">Hendrik's weblog</a></li>
|
|
</ul>
|
|
|
|
<p>[<a href="../">Return to links page</a>]</p>'''
|
|
self.getPage("/links/extra/")
|
|
self.assertBody(msg)
|
|
|
|
def test05DerivedObjects(self):
|
|
self.getPage("/load_tut_module/tut05_derived_objects")
|
|
msg = '''
|
|
<html>
|
|
<head>
|
|
<title>Another Page</title>
|
|
<head>
|
|
<body>
|
|
<h2>Another Page</h2>
|
|
|
|
<p>
|
|
And this is the amazing second page!
|
|
</p>
|
|
|
|
</body>
|
|
</html>
|
|
'''
|
|
self.getPage("/another/")
|
|
self.assertBody(msg)
|
|
|
|
def test06DefaultMethod(self):
|
|
self.getPage("/load_tut_module/tut06_default_method")
|
|
self.getPage('/hendrik')
|
|
self.assertBody('Hendrik Mans, CherryPy co-developer & crazy German '
|
|
'(<a href="./">back</a>)')
|
|
|
|
def test07Sessions(self):
|
|
self.getPage("/load_tut_module/tut07_sessions")
|
|
self.getPage("/sessions")
|
|
|
|
self.getPage('/')
|
|
self.assertBody("\n During your current session, you've viewed this"
|
|
"\n page 1 times! Your life is a patio of fun!"
|
|
"\n ")
|
|
|
|
self.getPage('/', self.cookies)
|
|
self.assertBody("\n During your current session, you've viewed this"
|
|
"\n page 2 times! Your life is a patio of fun!"
|
|
"\n ")
|
|
|
|
def test08GeneratorsAndYield(self):
|
|
self.getPage("/load_tut_module/tut08_generators_and_yield")
|
|
self.getPage('/')
|
|
self.assertBody('<html><body><h2>Generators rule!</h2>'
|
|
'<h3>List of users:</h3>'
|
|
'Remi<br/>Carlos<br/>Hendrik<br/>Lorenzo Lamas<br/>'
|
|
'</body></html>')
|
|
|
|
def test09Files(self):
|
|
self.getPage("/load_tut_module/tut09_files")
|
|
|
|
# Test upload
|
|
filesize = 5
|
|
h = [("Content-type", "multipart/form-data; boundary=x"),
|
|
("Content-Length", str(105 + filesize))]
|
|
b = '--x\n' + \
|
|
'Content-Disposition: form-data; name="myFile"; filename="hello.txt"\r\n' + \
|
|
'Content-Type: text/plain\r\n' + \
|
|
'\r\n' + \
|
|
'a' * filesize + '\n' + \
|
|
'--x--\n'
|
|
self.getPage('/upload', h, "POST", b)
|
|
self.assertBody('''<html>
|
|
<body>
|
|
myFile length: %d<br />
|
|
myFile filename: hello.txt<br />
|
|
myFile mime-type: text/plain
|
|
</body>
|
|
</html>''' % filesize)
|
|
|
|
# Test download
|
|
self.getPage('/download')
|
|
self.assertStatus("200 OK")
|
|
self.assertHeader("Content-Type", "application/x-download")
|
|
self.assertHeader("Content-Disposition",
|
|
# Make sure the filename is quoted.
|
|
'attachment; filename="pdf_file.pdf"')
|
|
self.assertEqual(len(self.body), 85698)
|
|
|
|
def test10HTTPErrors(self):
|
|
self.getPage("/load_tut_module/tut10_http_errors")
|
|
|
|
self.getPage("/")
|
|
self.assertInBody("""<a href="toggleTracebacks">""")
|
|
self.assertInBody("""<a href="/doesNotExist">""")
|
|
self.assertInBody("""<a href="/error?code=403">""")
|
|
self.assertInBody("""<a href="/error?code=500">""")
|
|
self.assertInBody("""<a href="/messageArg">""")
|
|
|
|
self.getPage("/traceback_setting")
|
|
setting = self.body
|
|
self.getPage("/toggleTracebacks")
|
|
self.assertStatus((302, 303))
|
|
self.getPage("/traceback_setting")
|
|
self.assertBody(str(not eval(setting)))
|
|
|
|
self.getPage("/error?code=500")
|
|
self.assertStatus(500)
|
|
self.assertInBody("The server encountered an unexpected condition "
|
|
"which prevented it from fulfilling the request.")
|
|
|
|
self.getPage("/error?code=403")
|
|
self.assertStatus(403)
|
|
self.assertInBody("<h2>You can't do that!</h2>")
|
|
|
|
self.getPage("/messageArg")
|
|
self.assertStatus(500)
|
|
self.assertInBody("If you construct an HTTPError with a 'message'")
|
|
|