def test_vote__returned_options(self): from nuorisovaalit.models import Voter from nuorisovaalit.views.voting import vote from pyramid.session import UnencryptedCookieSessionFactoryConfig from pyramid.url import route_url session = DBSession() populate_testing_db() voter = session.query(Voter).first() self.config.add_route('select', '/valitse') self.config.testing_securitypolicy(userid=voter.openid) self.config.set_session_factory(UnencryptedCookieSessionFactoryConfig) request = DummyRequest() csrf_token = request.session.new_csrf_token() request.matchdict['number'] = '1' options = vote(request) self.assertEquals({ 'action_url': request.path_url, 'select_url': route_url('select', request), 'candidate': { 'number': 1, 'name': u'Turhapuro, Uuno', }, 'profile': { 'fullname': u'Matti Meikäläinen', 'district': u'Ahvenanmaan maakunnan vaalipiiri', }, 'error': False, 'csrf_token': csrf_token }, options)
def test_vote__invalid_candidate_number(self): from nuorisovaalit.models import Voter from nuorisovaalit.views.voting import vote from pyramid.exceptions import NotFound session = DBSession() populate_testing_db() voter = session.query(Voter).first() self.config.testing_securitypolicy(userid=voter.openid) request = DummyRequest() request.matchdict['number'] = 666 self.assertRaises(NotFound, lambda: vote(request))
def test_vote__successful_vote_log(self): from nuorisovaalit.models import Vote from nuorisovaalit.models import Voter from nuorisovaalit.models import VotingLog from nuorisovaalit.views.voting import vote from pyramid.session import UnencryptedCookieSessionFactoryConfig session = DBSession() populate_testing_db() voter = session.query(Voter).first() self.config.add_route('select', '/valitse') self.config.add_route('vote-finish', '/valmis') self.config.testing_securitypolicy(userid=voter.openid) self.config.set_session_factory(UnencryptedCookieSessionFactoryConfig) session = DBSession() request = DummyRequest(post=dict(vote='1')) request.POST['csrf_token'] = request.session.new_csrf_token() request.matchdict['number'] = '1' # Check the initial conditions. self.assertEquals(0, session.query(VotingLog).count()) self.assertEquals(0, session.query(Vote).count()) vote(request) # Check that the vote was recorded. self.assertEquals(1, session.query(VotingLog).count()) self.assertEquals(1, session.query(Vote).count()) # Check that the vote record info is correct. vote_record = session.query(Vote).first() self.assertEquals(u'Uuno', vote_record.candidate.firstname) self.assertEquals(u'Turhapuro', vote_record.candidate.lastname) self.assertEquals(u'xxxx xxxx', vote_record.school.name)
def test_vote__candidate_number_mismatch(self): from nuorisovaalit.models import Voter from nuorisovaalit.views.voting import vote from pyramid.session import UnencryptedCookieSessionFactoryConfig session = DBSession() populate_testing_db() voter = session.query(Voter).first() self.config.add_route('select', '/valitse') self.config.testing_securitypolicy(userid=voter.openid) self.config.set_session_factory(UnencryptedCookieSessionFactoryConfig) request = DummyRequest(post=dict(vote='1')) csrf_token = request.session.new_csrf_token() request.POST['csrf_token'] = csrf_token request.matchdict['number'] = '2' options = vote(request) self.assertTrue(options['error']) self.assertEquals(csrf_token, options['csrf_token'])
def test_vote__already_voted(self): from nuorisovaalit.models import Voter from nuorisovaalit.models import VotingLog from nuorisovaalit.views.voting import vote from pyramid.url import route_url from webob.exc import HTTPFound session = DBSession() populate_testing_db() voter = session.query(Voter).first() self.config.testing_securitypolicy(userid=voter.openid) self.config.add_route('vote-finish', '/valmis') session = DBSession() # Add a voting record for the voter. session.add(VotingLog(voter.id)) request = DummyRequest() response = vote(request) self.assertTrue(isinstance(response, HTTPFound)) self.assertEquals(route_url('vote-finish', request), response.location)
def test_vote__successful_voting_response(self): from nuorisovaalit.models import Voter from nuorisovaalit.views.voting import vote from pyramid.session import UnencryptedCookieSessionFactoryConfig from pyramid.url import route_url from webob.exc import HTTPFound session = DBSession() populate_testing_db() voter = session.query(Voter).first() self.config.add_route('select', '/valitse') self.config.add_route('vote-finish', '/valmis') self.config.testing_securitypolicy(userid=voter.openid) self.config.set_session_factory(UnencryptedCookieSessionFactoryConfig) request = DummyRequest(post=dict(vote='1')) request.POST['csrf_token'] = request.session.new_csrf_token() request.matchdict['number'] = '1' response = vote(request) self.assertTrue(isinstance(response, HTTPFound)) self.assertEquals(route_url('vote-finish', request), response.location)
def test_vote__unauthenticated(self): from nuorisovaalit.views.voting import vote self.assertRaises(Forbidden, lambda: vote(DummyRequest()))