Showing posts with label unit testing. Show all posts
Showing posts with label unit testing. Show all posts

Saturday, March 12, 2011

mock a rollback in pylons unit testing

@fudge.patch('samples.model.meta.Session')
def test_add_user_commit_exception(FakeSession):
    FakeSession.provides('query').returns(1).provides("filter").returns_fake().\
                provides("all").returns_fake()
    FakeSession.provides('commit').raises(ValueError("Commit excepion!"))
    FakeSession.expects("rollback").returns_fake()
    try:
        user.add_user("name")
    except Exception, ex:
        pass

Friday, March 11, 2011

fake ip in pylons unit testing

controller code:
--------------------------------------------------------------------------
import logging

from pylons import request, response, session, tmpl_context as c
from pylons.controllers.util import abort, redirect_to

from samplebundle.lib.base import BaseController, render

log = logging.getLogger(__name__)

class WebenvironsController(BaseController):

    def get_ip(self):
        # Return a rendered template
        #return render('/webenvirons.mako')
        # or, return a response
        ip = request.environ["REMOTE_ADDR"]
        return ip

unit testing code:
--------------------------------------------------------------------------
from samplebundle.tests import *

class TestWebenvironsController(TestController):

    def test_get_ip(self):
        my_extra_environ = {"REMOTE_ADDR":"127.0.0.1"}
        response = self.app.get(url(controller='webenvirons', action='get_ip'), 
                                extra_environ = my_extra_environ)
        assert '127.0.0.1' in response

file upload unit testing in pylons

controller code:
--------------------------------------------------------------------------
import logging

from pylons import request, response, session, tmpl_context as c
from pylons.controllers.util import abort, redirect_to

from samplebundle.lib.base import BaseController, render

log = logging.getLogger(__name__)

class WebflowcontrolsController(BaseController):
    def upload(self):
        myfile = request.POST['myfile']
        
        return 'Successfully uploaded: %s, size: %i' % \
        (myfile.filename, len(myfile.value))


unit testing code:
--------------------------------------------------------------------------
from samplebundle.tests import *

class TestWebflowcontrolsController(TestController):
    def test_upload(self):
        my_upload_files = [("myfile","myfilename","myfilecontent")]  # field, filename, content
        response = self.app.post(url(controller='webflowcontrols', 
                                    action='upload'),
                                 upload_files=my_upload_files)
        assert 'size: 13' in response

response status unit testing in pylons

controller code:
--------------------------------------------------------------------------
import logging

from pylons import request, response, session, tmpl_context as c
from pylons.controllers.util import abort, redirect_to

from samplebundle.lib.base import BaseController, render

log = logging.getLogger(__name__)

class WebflowcontrolsController(BaseController):

    def redirect_to_action(self):
        # Return a rendered template
        #return render('/webredirects.mako')
        # or, return a response
        redirect_to(controller='webflowcontrols', action='redirect_target')

    def redirect_target(self):
        # Return a rendered template
        #return render('/webredirects.mako')
        # or, return a response
        return 'redirect target'
    
    def abort_action(self, id):
        # Return a rendered template
        #return render('/webredirects.mako')
        # or, return a response
        if id == '404':
            abort(status_code=404)
        elif id == '400':
            abort(status_code=400)
        else:
            return "not abort"


unit testing code:
--------------------------------------------------------------------------
from samplebundle.tests import *

class TestWebflowcontrolsController(TestController):

    def test_redirect_to_action(self):
        response = self.app.get(url(controller='webflowcontrols', action='redirect_to_action'))
        assert not 'redirect target' in response
        assert '/webflowcontrols/redirect_target' in response.location
        assert 302 == response.status_int
        # Test response...

    def test_abort_action(self):
        #'status' is the integer status code you expect.
        #If you expect a 404 response, for instance, 
        #you must give status=404 or it will be an error.
        response = self.app.get(url(controller='webflowcontrols', 
                                    action='abort_action', 
                                    id="404"),
                                status=404
                                )
        assert response.status_int == 404

        response = self.app.get(url(controller='webflowcontrols', 
                                    action='abort_action', 
                                    id="400"),
                                status='*'
                                )
        assert response.status_int == 400

cookies unit testing in pylons

Controller code:

import logging

from pylons import request, response, session, tmpl_context as c
from pylons.controllers.util import abort, redirect_to

from samplebundle.lib.base import BaseController, render

log = logging.getLogger(__name__)

class CookiesController(BaseController):

    def get_cookie(self):
        my_cookie = request.cookies.get("my_cookie_name")
        if my_cookie == "my_cookie_value":
            return 'Found a cookie named my_cookie_name'
        else:
            return 'Nothing found'
        
    def set_cookie(self):
        response.set_cookie('my_cookie_name', 'my_cookie_value', max_age=360)
        return 'Done'
    
    def delete_cookie(self):
        response.delete_cookie('my_cookie_name')
        return 'Done'

unit testing code:

from samplebundle.tests import *

class TestCookiesController(TestController):

    def test_get_cookie(self):
        myheaders = {}
        myheaders['Cookie'] = 'my_cookie_name=my_cookie_value'
        response = self.app.get(url(controller='cookies', action='get_cookie'), headers = myheaders)
        assert "Found a cookie" in response
        
    def test_set_cookie(self):
        response = self.app.get(url(controller='cookies', action='set_cookie'))
        assert 'my_cookie_name=my_cookie_value' in response.headers['Set-Cookie']
        assert 'Max-Age=360' in response.headers['Set-Cookie']
        """Cookie storage format in headers['Set-Cookie']
        'key=value; Domain=example.org; expires="Mon, 28-Feb-2011 07:48:56 GMT"; Max-Age=360; Path=/; secure'
        """
        
    def test_delete_cookie(self):
        myheaders = {}
        myheaders['Cookie'] = 'my_cookie_name=my_cookie_value'
        response = self.app.get(url(controller='cookies', action='delete_cookie'), headers = myheaders)
        assert 'my_cookie_name=' in response.headers['Set-Cookie']