from cherrypy.test import test
test.prefer_parent_path()

import os
curdir = os.path.join(os.getcwd(), os.path.dirname(__file__))

import cherrypy


def setup_server():
    
    class City:
        
        def __init__(self, name):
            self.name = name
            self.population = 10000
        
        def index(self, **kwargs):
            return "Welcome to %s, pop. %s" % (self.name, self.population)
        index._cp_config = {'tools.response_headers.on': True,
                            'tools.response_headers.headers': [('Content-Language', 'en-GB')]}
        
        def update(self, **kwargs):
            self.population = kwargs['pop']
            return "OK"
        
    d = cherrypy.dispatch.RoutesDispatcher()
    d.connect(name='hounslow', route='hounslow', controller=City('Hounslow'))
    d.connect(name='surbiton', route='surbiton', controller=City('Surbiton'),
              action='index', conditions=dict(method=['GET']))
    d.mapper.connect('surbiton', controller='surbiton',
                     action='update', conditions=dict(method=['POST']))
    
    conf = {'/': {'request.dispatch': d}}
    cherrypy.tree.mount(root=None, config=conf)
    cherrypy.config.update({'environment': 'test_suite'})


from cherrypy.test import helper

class RoutesDispatchTest(helper.CPWebCase):

    def test_Routes_Dispatch(self):
        self.getPage("/hounslow")
        self.assertStatus("200 OK")
        self.assertBody("Welcome to Hounslow, pop. 10000")
        
        self.getPage("/surbiton")
        self.assertStatus("200 OK")
        self.assertBody("Welcome to Surbiton, pop. 10000")
        
        self.getPage("/surbiton", method="POST", body="pop=1327")
        self.assertStatus("200 OK")
        self.assertBody("OK")
        self.getPage("/surbiton")
        self.assertStatus("200 OK")
        self.assertHeader("Content-Language", "en-GB")
        self.assertBody("Welcome to Surbiton, pop. 1327")

if __name__ == '__main__':
    setup_server()
    helper.testmain()

