Skip to content

Commit

Permalink
testing coverage
Browse files Browse the repository at this point in the history
  • Loading branch information
robinharms committed Apr 12, 2012
1 parent 5d4ff45 commit 0edb761
Show file tree
Hide file tree
Showing 4 changed files with 68 additions and 33 deletions.
2 changes: 1 addition & 1 deletion voteit/core/models/base_content.py
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ def __init__(self, data=None, **kwargs):
#FIXME: We'd like some sort of logging here,
#but if we log in voteit.core, any poll plugin test will die very strangely
#It has something with cleanup of logging in multithreading in setuptools
pass
pass #pragma : no cover

#Set owner - if it is in kwargs now
if 'creators' in kwargs:
Expand Down
2 changes: 1 addition & 1 deletion voteit/core/models/logs.py
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ def add(self, context_uid, message, tags=(), userid=None, scripted=None):
if self.log_storage.insert(k, obj):
return

raise KeyError("Couln't find a free key for logging handler after 10 retries.")
raise KeyError("Couln't find a free key for logging handler after 10 retries.") #pragma : no cover


@content_factory('LogEntry', title=_(u"Log entry"))
Expand Down
20 changes: 13 additions & 7 deletions voteit/core/models/tests/test_invite_ticket.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,13 @@
from datetime import datetime

from pyramid import testing
from zope.interface.verify import verifyObject, verifyClass
from zope.interface.verify import verifyClass
from zope.interface.verify import verifyObject
from pyramid_mailer import get_mailer
from pyramid.exceptions import Forbidden

from voteit.core.models.interfaces import IInviteTicket


class InviteTicketTests(unittest.TestCase):
def setUp(self):
Expand All @@ -18,21 +21,22 @@ def tearDown(self):
testing.tearDown()

@property
def _get_class(self):
def _cut(self):
from voteit.core.models.invite_ticket import InviteTicket
return InviteTicket

def _make_obj(self):
return self._get_class('this@email.com', ['role:Moderator'], 'Welcome to the meeting!')
return self._cut('this@email.com', ['role:Moderator'], 'Welcome to the meeting!')

def _make_meeting(self):
from voteit.core.models.meeting import Meeting
return Meeting()


def test_verify_interface(self):
from voteit.core.models.interfaces import IInviteTicket
self.assertTrue(verifyClass(IInviteTicket, self._get_class))
def test_verify_class(self):
self.assertTrue(verifyClass(IInviteTicket, self._cut))

def test_verify_obj(self):
self.assertTrue(verifyObject(IInviteTicket, self._make_obj()))

def test_send_message_sent(self):
meeting = self._make_meeting()
Expand Down Expand Up @@ -92,3 +96,5 @@ def test_claim_unathenticated(self):

self.assertRaises(Forbidden, ticket.claim, request)

def test_force_selectable_roles(self):
self.assertRaises(ValueError, self._cut, 'hello@world.com', 'bad_role', "This won't work")
77 changes: 53 additions & 24 deletions voteit/core/models/tests/test_meeting.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,14 @@

from pyramid import testing
from pyramid.authorization import ACLAuthorizationPolicy

from voteit.core import security
from pyramid.security import Authenticated
from pyramid.httpexceptions import HTTPForbidden
from zope.interface.verify import verifyClass
from zope.interface.verify import verifyObject

from voteit.core import security
from voteit.core.models.interfaces import IMeeting
from voteit.core.testing_helpers import register_workflows

admin = set([security.ROLE_ADMIN])
moderator = set([security.ROLE_MODERATOR])
Expand All @@ -22,48 +25,73 @@
class MeetingTests(unittest.TestCase):
def setUp(self):
self.config = testing.setUp()
# load workflow
self.config.include('pyramid_zcml')
self.config.load_zcml('voteit.core:configure.zcml')

def tearDown(self):
testing.tearDown()

def _make_obj(self):
@property
def _cut(self):
from voteit.core.models.meeting import Meeting
return Meeting()

def _make_ai(self):
return Meeting

@property
def _ai(self):
from voteit.core.models.agenda_item import AgendaItem
return AgendaItem()
return AgendaItem

def test_verify_class(self):
self.assertTrue(verifyClass(IMeeting, self._cut))

def test_verify_obj(self):
self.assertTrue(verifyObject(IMeeting, self._cut()))

def test_verify_implementation(self):
from voteit.core.models.interfaces import IMeeting
obj = self._make_obj()
self.assertTrue(verifyObject(IMeeting, obj))
def test_meeting_with_one_creator_sets_creator_as_moderator(self):
obj = self._cut(creators = ['jane'])
self.assertIn('role:Moderator', obj.get_groups('jane'))

def test_closing_meeting_with_ongoing_ais(self):
""" Closing a meeting with ongoing agenda items should raise an exception. """
register_workflows(self.config)
request = testing.DummyRequest()
ai = self._make_ai()
ai = self._ai()
ai.set_workflow_state(request, 'upcoming')
ai.set_workflow_state(request, 'ongoing')
obj = self._make_obj()
obj = self._cut()
obj['ai'] = ai

obj.set_workflow_state(request, 'ongoing')
self.assertRaises(Exception, obj.set_workflow_state, 'closed')

def test_timestamp_added_on_close(self):
register_workflows(self.config)
self.config.scan('voteit.core.subscribers.timestamps') #To add subscriber
request = testing.DummyRequest()
obj = self._make_obj()
obj = self._cut()
obj.set_workflow_state(request, 'ongoing')
self.assertFalse(isinstance(obj.end_time, datetime))
obj.set_workflow_state(request, 'closed')
self.assertTrue(isinstance(obj.end_time, datetime))



def test_closing_meeting_callback(self):
register_workflows(self.config)
request = testing.DummyRequest()
obj = self._cut()
obj['ai'] = self._ai()
obj.set_workflow_state(request, 'ongoing')
obj['ai'].set_workflow_state(request, 'upcoming')
obj['ai'].set_workflow_state(request, 'ongoing')
self.assertRaises(HTTPForbidden, obj.set_workflow_state, request, 'closed')

def test_add_invite_ticket_traversal(self):
from voteit.core.models.invite_ticket import InviteTicket
self.config.include('pyramid_mailer.testing')
request = testing.DummyRequest()
obj = self._cut()
ticket = InviteTicket('blabla@hello.se', ['role:Moderator'], 'Hello!')
obj.add_invite_ticket(ticket, request)
self.assertEqual(obj, ticket.__parent__)


class MeetingPermissionTests(unittest.TestCase):
""" Check permissions in different meeting states. """

Expand All @@ -78,13 +106,14 @@ def setUp(self):
def tearDown(self):
testing.tearDown()

def _make_obj(self):
@property
def _cut(self):
from voteit.core.models.meeting import Meeting
return Meeting()
return Meeting

def test_upcoming(self):
request = testing.DummyRequest()
obj = self._make_obj()
obj = self._cut()

#View
self.assertEqual(self.pap(obj, security.VIEW), admin | moderator | viewer )
Expand Down Expand Up @@ -115,7 +144,7 @@ def test_upcoming(self):

def test_ongoing(self):
request = testing.DummyRequest()
obj = self._make_obj()
obj = self._cut()
obj.set_workflow_state(request, 'ongoing')

#View
Expand Down Expand Up @@ -147,7 +176,7 @@ def test_ongoing(self):

def test_closed(self):
request = testing.DummyRequest()
obj = self._make_obj()
obj = self._cut()
obj.set_workflow_state(request, 'ongoing')
obj.set_workflow_state(request, 'closed')

Expand Down

0 comments on commit 0edb761

Please sign in to comment.