def test_openid_response__unknown_mode(self, openid_failure):
        from nuorisovaalit.views.login import openid_response

        request = DummyRequest()
        openid_response(request)
        self.failUnless(openid_failure.called)
        self.assertEquals(((request,), {}), openid_failure.call_args)
    def test_openid_response__unsuccessful(self, make_consumer, openid_failure):
        from nuorisovaalit.views.login import openid_response

        response = mock.Mock()
        response.status = None
        consumer = mock.Mock()
        consumer.complete.return_value
        make_consumer.return_value = consumer

        request = DummyRequest({'openid.mode': 'id_res'})
        openid_response(request)

        self.assertEquals(((request,), {}), openid_failure.call_args)
    def test_openid_response__invalid_user(self, make_consumer, openid_failure):
        from nuorisovaalit.views.login import openid_response
        from openid.consumer.consumer import SUCCESS

        response = mock.Mock()
        response.status = SUCCESS
        response.identity_url = u'http://matti.meikalainen.oid.fi'
        consumer = mock.Mock()
        consumer.complete.return_value = response
        make_consumer.return_value = consumer

        request = DummyRequest({'openid.mode': 'id_res'})
        openid_response(request)

        self.assertEquals(((request,), {}), openid_failure.call_args)
    def test_openid_response__cancel(self):
        from nuorisovaalit.views.login import openid_response

        request = DummyRequest({'openid.mode': 'cancel'})
        response = openid_response(request)

        self.assertEquals(response.status, '200 OK')
        self.failUnless('<h2>Tunnistautuminen keskeytettiin.</h2>' in response.body)
    def test_openid_response__already_voted(self, make_consumer, openid_failure):
        from datetime import datetime
        from nuorisovaalit.models import District
        from nuorisovaalit.models import School
        from nuorisovaalit.models import Voter
        from nuorisovaalit.models import VotingLog
        from nuorisovaalit.views.login import openid_response
        from openid.consumer.consumer import SUCCESS
        from pyramid.url import route_url
        from webob.exc import HTTPFound

        self.config.add_route('vote-finish', '/valmis')
        self.config.add_route('select', '/valitse')
        session = DBSession()

        # Add the needed records.
        district = District(u'district', 1)
        school = School(u'Mynämäen koulu', district)
        school.id = 1
        district.schools.append(school)
        session.add(district)

        openid_url = u'http://matti.meikalainen.oid.fi'
        # Add a voter to the session.
        voter = Voter(openid_url, u'Matti', u'Meikäläinen', datetime.now(),
                      None, None, None, school)
        session.add(voter)
        session.flush()
        # Add a vote for the user.
        session.add(VotingLog(voter.id))

        response = mock.Mock()
        response.status = SUCCESS
        response.identity_url = openid_url
        consumer = mock.Mock()
        consumer.complete.return_value = response
        make_consumer.return_value = consumer

        request = DummyRequest({'openid.mode': 'id_res'})
        response = openid_response(request)

        self.assertTrue(isinstance(response, HTTPFound))
        self.assertEquals(route_url('vote-finish', request), response.location)