Пример #1
0
def active_poll_fixture(config):
    """ This method sets up a site the way it will be when a poll is ready to start
        with admin as voter.
        You can use this if you want a fixture for your poll plugin tests
    """
    from voteit.core.models.poll import Poll
    from voteit.core.models.meeting import Meeting
    from voteit.core.models.agenda_item import AgendaItem
    from voteit.core.models.proposal import Proposal
    root = bootstrap_and_fixture(config)
    request = testing.DummyRequest()
    config = testing.setUp(request = request, registry = config.registry)
    config.include('pyramid_mailer.testing')
    config.include('voteit.core.subscribers.poll')
    root['users']['admin'].set_field_value('email', '*****@*****.**')
    meeting = root['meeting'] = Meeting()
    meeting.add_groups('admin', [ROLE_VOTER])
    meeting.set_workflow_state(request, 'ongoing')
    ai = meeting['ai'] = AgendaItem()
    ai['prop1'] = Proposal(text = u"Proposal 1")
    ai['prop2'] = Proposal(text = u"Proposal 2")
    ai.set_workflow_state(request, 'upcoming')
    ai.set_workflow_state(request, 'ongoing')
    ai['poll'] = Poll(title = 'A poll')
    poll = ai['poll']
    poll.set_field_value('proposals', set([ai['prop1'].uid, ai['prop2'].uid]))
    poll.set_workflow_state(request, 'upcoming')
    return root
Пример #2
0
 def test_cant_find_unique(self):
     context = self._fixture()
     from voteit.core.models.proposal import Proposal
     context[u'o1'] = Proposal()
     for i in range(1, 101):
         context[u'o1-%s' % i] = Proposal()
     self.assertRaises(KeyError, self._fut, context, u'o1')
Пример #3
0
 def _agenda_item_with_proposals_fixture(self):
     """ Create an agenda item with a poll and two proposals. """
     from voteit.core.models.agenda_item import AgendaItem
     from voteit.core.models.proposal import Proposal
     agenda_item = AgendaItem()
     agenda_item['prop1'] = Proposal()
     agenda_item['prop2'] = Proposal()
     return agenda_item
Пример #4
0
 def test_update_triggers(self):
     ai = self._fixture()
     from voteit.core.models.proposal import Proposal 
     obj = Proposal()
     ai['o'] = obj
     mailer = get_mailer(self.request)
     self.assertEqual(len(mailer.outbox), 0)
     obj.update(text = "@admin")
     self.assertEqual(len(mailer.outbox), 1)
Пример #5
0
 def test_get_type_count(self):
     meeting, request = self._fixture()
     from voteit.core.models.agenda_item import AgendaItem
     from voteit.core.models.proposal import Proposal
     meeting['ai'] = ai = AgendaItem()
     obj = self._cut(ai, request)
     ai['p1'] = Proposal()
     self.assertEqual(obj.get_type_count('Proposal'), 1)
     ai['p2'] = Proposal()
     self.assertEqual(obj.get_type_count('Proposal'), 2)
Пример #6
0
 def _extra_fixtures(self, root):
     from voteit.core.models.meeting import Meeting
     from voteit.core.models.proposal import Proposal
     from voteit.core.models.discussion_post import DiscussionPost
     settings = self.config.registry.settings
     root['m']['p1'] = Proposal(text=u"Prop p1", creators=['admin'])
     root['m']['d1'] = DiscussionPost(text="Disc d1", creators=['admin'])
     root['m2'] = Meeting()
     root['m2']['p2'] = Proposal(text=u"Prop p2", creators=['admin'])
     root['m2']['d2'] = DiscussionPost(text=u"Disc d2", creators=['admin'])
Пример #7
0
def _setup_poll_fixture(config):
    # type: (Configurator) -> Poll
    config.testing_securitypolicy('admin', permissive=True)
    # config.include('pyramid_chameleon')
    # Register plugin
    config.include('voteit.stv')
    config.include('arche.testing')
    config.include('arche.testing.workflow')
    config.include('arche.testing.catalog')
    config.include('voteit.core.models.catalog')
    root = bootstrap_and_fixture(config)
    root['m'] = Meeting()
    unrestricted_wf_transition_to(root['m'], 'ongoing')
    root['m']['ai'] = ai = AgendaItem()
    unrestricted_wf_transition_to(ai, 'upcoming')
    unrestricted_wf_transition_to(ai, 'ongoing')
    #Setup poll
    ai['poll'] = Poll()
    poll = ai['poll']
    #Add proposals
    p1 = Proposal(creators = ['dummy'], text = 'first proposal')
    p1.uid = 'p1uid' #To make it simpler to test against
    ai['p1'] = p1
    p2 = Proposal(creators = ['dummy'], text = 'second proposal')
    p2.uid = 'p2uid'
    ai['p2'] = p2
    p3 = Proposal(creators = ['dummy'], text = 'third proposal')
    p3.uid = 'p3uid'
    ai['p3'] = p3
    #Select proposals for this poll
    poll.proposal_uids = (p1.uid, p2.uid, p3.uid)
    #Set poll as ongoing
    unrestricted_wf_transition_to(poll, 'upcoming')
    return poll
Пример #8
0
 def _fixture(self):
     root = bootstrap_and_fixture(self.config)
     from voteit.core.models.agenda_item import AgendaItem
     from voteit.core.models.discussion_post import DiscussionPost
     from voteit.core.models.proposal import Proposal
     from voteit.core.models.meeting import Meeting
     root['m'] = meeting = Meeting()
     meeting['ai'] = ai = AgendaItem()
     ai['p1'] = Proposal(text = "I dream of a #free world", creator = ['admin'])
     ai['p2'] = Proposal(text = "#free as in #freedom, not #free #beer", creator = ['admin'])
     ai['d1'] = DiscussionPost(text = "I agree with #admin-2", creator = ['admin'])
     return root
Пример #9
0
 def test_add(self):
     from voteit.core.models.agenda_item import AgendaItem
     from voteit.core.models.proposal import Proposal
     meeting = self._meeting()
     meeting['ai'] = ai = AgendaItem()
     obj = self._cut(meeting)
     ai['p1'] = Proposal(creators=['BennyBoy'])
     obj.add(ai['p1'])
     self.assertIn('BennyBoy', obj.proposal_ids)
     self.assertEqual(obj.proposal_ids['BennyBoy'], 1)
     ai['p2'] = Proposal(creators=['BennyBoy'])
     obj.add(ai['p2'])
     self.assertEqual(obj.proposal_ids['BennyBoy'], 2)
Пример #10
0
 def test_integration(self):
     from voteit.core.models.agenda_item import AgendaItem
     from voteit.core.models.proposal import Proposal
     meeting, request = self._fixture()
     self.config.include('voteit.core.models.read_names')
     meeting['ai'] = ai = AgendaItem()
     ai['a'] = Proposal()
     ai['b'] = Proposal()
     obj = self._cut(ai, request)
     obj.mark_read(['a', 'b'], 'sanna')
     self.assertEqual(obj.get_read_type('Proposal', 'sanna'), 2)
     del ai['a']
     self.assertEqual(obj.get_read_type('Proposal', 'sanna'), 1)
     self.assertEqual(set(obj['sanna']), set(['b']))
Пример #11
0
 def test_change_states_proposals(self):
     from voteit.core.models.agenda_item import AgendaItem
     from voteit.core.models.proposal import Proposal
     from voteit.core.models.poll import Poll
     register_workflows(self.config)
     request = testing.DummyRequest()
     self.config.begin(request)
     self.root['ai'] = ai = AgendaItem()
     ai['prop1'] = Proposal()
     ai['prop2'] = Proposal()
     ai['poll'] = Poll()
     ai['poll'].proposal_uids = (ai['prop1'].uid, ai['prop2'].uid)
     ai['poll'].set_workflow_state(request, 'upcoming')
     self.assertEqual(ai['prop1'].get_workflow_state(), 'voting')
     self.assertEqual(ai['prop2'].get_workflow_state(), 'voting')
Пример #12
0
 def test_exc_with_bad_amount_of_proposals(self):
     from voteit.core.models.proposal import Proposal
     self.ai["p3"] = p3 = Proposal(text="p3")
     self.poll.proposals = self.poll.proposals + (p3.uid,)
     poll_plugin = self.poll.get_poll_plugin()
     request = testing.DummyRequest()
     self.assertRaises(BadPollMethodError, poll_plugin.handle_start, request)
Пример #13
0
def _opa_fixture(poll):
    count = {'a': 28, 'b': 26, 'c': 3, 'd': 2, 'e': 1}
    ballot = {
        'a': ['Alice', 'Bob', 'Chris'],
        'b': ['Bob', 'Alice', 'Chris'],
        'c': ['Chris'],
        'd': ['Don'],
        'e': ['Eric']
    }
    candidates = ['Alice', 'Bob', 'Chris', 'Don', 'Eric']
    ai = poll.__parent__
    for cand in candidates:
        prop = Proposal(creators=['dummy'], text=cand, uid=cand)
        ai[cand] = prop
    poll.proposal_uids = tuple(candidates)

    #Setup poll
    plugin = poll.get_poll_plugin()
    Vote = plugin.get_vote_class()
    for btype in ballot:
        for i in range(count[btype]):
            name = "%s-%s" % (btype, i)
            vote = Vote()
            vote.set_vote_data({'proposals': tuple(ballot[btype])})
            poll[name] = vote
Пример #14
0
 def test_meeting_can_turn_off_notification(self):
     ai = self._fixture()
     ai.__parent__.set_field_value('mention_notification_setting', False)
     from voteit.core.models.proposal import Proposal 
     ai['o'] = Proposal(text = "@admin")
     mailer = get_mailer(self.request)
     self.assertEqual(len(mailer.outbox), 0)
Пример #15
0
 def test_proposal_added(self):
     ai = self._fixture()
     from voteit.core.models.proposal import Proposal 
     obj = Proposal(text="@admin")
     ai['o'] = obj
     mailer = get_mailer(self.request)
     self.assertEqual(len(mailer.outbox), 1)
Пример #16
0
 def test_proposal(self):
     ai = self._fixture()
     from voteit.core.models.proposal import Proposal
     ai['o'] = obj = Proposal(title="@admin")
     self._fut(obj, None)
     mailer = get_mailer(self.request)
     self.assertEqual(len(mailer.outbox), 1)
Пример #17
0
 def test_proposal_redirect_to_agenda_item(self):
     ai = self._fixture()
     from voteit.core.models.proposal import Proposal
     ai['p'] = context = Proposal()
     request = testing.DummyRequest()
     from voteit.core.views.redirect import proposal_redirect_to_agenda_item
     response = proposal_redirect_to_agenda_item(context, request)
     self.assertEqual(response.location, 'http://example.com/m/ai/#%s' % context.uid)
Пример #18
0
 def _fixture(self):
     from voteit.core.models.proposal import Proposal
     self.config.include('voteit.core.testing_helpers.register_catalog')
     self.config.include(
         'voteit.core.testing_helpers.register_security_policies')
     root = bootstrap_and_fixture(self.config)
     root['p'] = Proposal()
     return root['p']
Пример #19
0
 def _fixture(self):
     from voteit.core.models.meeting import Meeting
     from voteit.core.models.proposal import Proposal
     from voteit.core.models.poll import Poll
     self.root['m'] = m = Meeting()
     m['ai'] = ai = self._cut()
     ai['prop'] = prop = Proposal()
     ai['poll'] = Poll(proposals=[prop.uid])
     return ai
Пример #20
0
 def _fixture(self):
     from arche.resources import Document
     from voteit.core.models.agenda_item import AgendaItem
     from voteit.core.models.proposal import Proposal
     from voteit.core.models.meeting import Meeting
     root = bootstrap_and_fixture(self.config)
     root['m'] = m = Meeting()
     m['ai'] = ai = AgendaItem(title='ai')
     ai['p'] = Proposal(text='Some animlas are more equal than others')
     ai['p']['d'] = Document()
     ai['p2'] = Proposal(text='Me wont be there')
     unrestricted_wf_transition_to(ai['p2'], 'retracted')
     root['m2'] = Meeting()
     request = testing.DummyRequest()
     request.root = root
     apply_request_extensions(request)
     self.config.begin(request)
     return root, request
Пример #21
0
 def _extra_fixtures(self, root):
     from voteit.core.models.meeting import Meeting
     from voteit.core.models.proposal import Proposal
     from voteit.core.models.discussion_post import DiscussionPost
     from voteit.core.models.catalog import reindex_indexes
     settings = self.config.registry.settings
     settings['default_locale_name'] = 'sv'
     settings['default_timezone_name'] = 'Europe/Stockholm'
     self.config.include('voteit.core.models.date_time_util')
     root['m']['p1'] = Proposal(creators = ['admin'])
     root['m']['p1'].title = u"Prop p1"
     root['m']['d1'] = DiscussionPost(creators = ['admin'])
     root['m']['d1'].title = u"Disc d1"
     root['m2'] = Meeting()
     root['m2']['p2'] = Proposal(creators = ['admin'])
     root['m2']['p2'].title = u"Prop p2"
     root['m2']['d2'] = DiscussionPost(creators = ['admin'])
     root['m2']['d2'].title = u"Disc d2"
     reindex_indexes(root.catalog)
Пример #22
0
 def setUp(self):
     self.request = testing.DummyRequest()
     self.config = testing.setUp(request=self.request)
     self.config.testing_securitypolicy(userid='admin')
     self.config.include('arche.testing')
     self.config.include('arche.models.catalog')
     #Enable workflows
     self.config.include('voteit.core.testing_helpers.register_workflows')
     #Register poll plugin
     self.config.include('voteit.core.plugins.majority_poll')
     #Add root
     from voteit.core.models.site import SiteRoot
     self.root = root = SiteRoot()
     #Add users
     from voteit.core.models.users import Users
     root['users'] = users = Users()
     from voteit.core.models.user import User
     users['admin'] = User()
     #Add meeting
     from voteit.core.models.meeting import Meeting
     root['m'] = self.meeting = m = Meeting()
     #Add agenda item - needed for lookups
     from voteit.core.models.agenda_item import AgendaItem
     m['ai'] = ai = AgendaItem()
     #Add a poll
     from voteit.core.models.poll import Poll
     ai['poll'] = Poll()
     #Wrap in correct context
     self.poll = ai['poll']
     #Select plugin to use
     from voteit.core.plugins.majority_poll import MajorityPollPlugin
     self.poll.set_field_value('poll_plugin', MajorityPollPlugin.name)
     #Add proposals
     from voteit.core.models.proposal import Proposal
     p1 = Proposal(text = 'p1', creators = ['admin'], aid = 'one')
     p1.uid = 'p1uid' #To make it simpler to test against
     ai['p1'] = p1
     p2 = Proposal(text = 'p2', creators = ['admin'], aid = 'two')
     p2.uid = 'p2uid' #To make it simpler to test against
     ai['p2'] = p2
     #Select proposals for this poll
     self.poll.proposal_uids = (p1.uid, p2.uid, )
     self.ai = ai
Пример #23
0
 def _make_poll(self):
     from voteit.core.models.poll import Poll
     from voteit.core.models.proposal import Proposal
     self.config.include(
         'voteit.core.testing_helpers.register_testing_poll')
     poll = Poll()
     poll.set_field_value('poll_plugin', "testing")
     proposal = Proposal()
     poll.set_field_value('proposals', set(proposal.uid))
     return poll
Пример #24
0
 def _make_obj(self):
     """ Poll object need to be in the context of an Agenda Item to work properly
     """
     from voteit.core.models.proposal import Proposal
     from voteit.core.models.agenda_item import AgendaItem
     ai = AgendaItem()
     ai['poll'] = self._cut()
     proposal = Proposal()
     ai['poll'].set_field_value('proposals', set(proposal.uid))
     return ai['poll']
Пример #25
0
 def test_proposal_already_mentioned(self):
     ai = self._fixture()
     from voteit.core.models.proposal import Proposal
     ai['o'] = obj = Proposal()
     obj.mentioned['admin'] = 'now'
     self._fut(obj, None)
     obj.title = '@admin'
     self._fut(obj, None)
     mailer = get_mailer(self.request)
     self.assertEqual(len(mailer.outbox), 0)
Пример #26
0
 def _fixture(self):
     from voteit.core.models.meeting import Meeting
     from voteit.core.models.proposal import Proposal
     from voteit.core.models.poll import Poll
     self.config.include("voteit.core.testing_helpers.register_testing_poll")
     self.root['m'] = m = Meeting()
     m['ai'] = ai = self._cut()
     ai['prop'] = prop = Proposal()
     ai['poll'] = Poll(proposals=[prop.uid])
     ai['poll'].poll_plugin_name = "testing"
     return ai
Пример #27
0
 def test_get_read_type(self):
     meeting, request = self._fixture()
     from voteit.core.models.agenda_item import AgendaItem
     from voteit.core.models.proposal import Proposal
     meeting['ai'] = ai = AgendaItem()
     obj = self._cut(ai, request)
     self.assertEqual(obj.get_read_type('Proposal', 'anders'), 0)
     ai['p1'] = Proposal()
     self.assertEqual(obj.get_read_type('Proposal', 'anders'), 0)
     obj.mark_read('p1', 'anders')
     self.assertEqual(obj.get_read_type('Proposal', 'anders'), 1)
Пример #28
0
 def _fixture(self):
     #register as adapter
     self.config.registry.registerAdapter(self._cut, name=self._cut.name)
     self.config.include('arche.testing.catalog')
     root = bootstrap_and_fixture(self.config)
     #Add agenda item - needed for lookups
     root['ai'] = ai = AgendaItem()
     #Add a poll
     ai['poll'] = Poll()
     #Wrap in correct context
     poll = ai['poll']
     #Add proposals
     ai['p1'] = p1 = Proposal(text='p1', uid='p1uid')
     ai['p2'] = p2 = Proposal(text='p2', uid='p2uid')
     #Select proposals for this poll
     poll.proposal_uids = (
         p1.uid,
         p2.uid,
     )
     poll.set_field_value('poll_plugin', 'dutt_poll')
     return ai
Пример #29
0
 def test_add_also_adds_to_proposal(self):
     from voteit.core.models.agenda_item import AgendaItem
     from voteit.core.models.proposal import Proposal
     meeting = self._meeting()
     meeting['ai'] = ai = AgendaItem()
     obj = self._cut(meeting)
     ai['p1'] = prop = Proposal(creators=['BennyBoy'])
     obj.add(prop)
     self.assertIn('aid', prop.field_storage)
     self.assertIn('aid_int', prop.field_storage)
     self.assertEqual(prop.get_field_value('aid'), u"BennyBoy-1")
     self.assertEqual(prop.get_field_value('aid_int'), 1)
Пример #30
0
 def test_delete_form_proposal(self):
     self.config.include('voteit.core.models.flash_messages')
     meeting = self._fixture()
     from voteit.core.models.agenda_item import AgendaItem
     from voteit.core.models.proposal import Proposal
     meeting['ai'] = ai = AgendaItem()
     ai['p'] = context = Proposal()
     request = testing.DummyRequest()
     context.set_workflow_state(request, 'voting')
     obj = self._cut(context, request)
     response = obj.delete_form()
     self.assertIn('form', response)
Пример #31
0
 def _fixture_and_setup(self):
     root = bootstrap_and_fixture(self.config)
     from voteit.core.models.user import User
     from voteit.core.models.agenda_item import AgendaItem
     #from voteit.core.models.meeting import Meeting
     from voteit.core.models.proposal import Proposal
     for userid in ('fredrik', 'anders', 'hanna', 'robin'):
         root.users[userid] = User()
     root['ai'] = AgendaItem()
     security.unrestricted_wf_transition_to(root['ai'], 'upcoming')
     root['ai']['p'] = Proposal()
     return root['ai']['p']
Пример #32
0
def _fixture(config):
    from voteit.core.models.agenda_item import AgendaItem
    from voteit.core.models.meeting import Meeting
    from voteit.core.models.proposal import Proposal
    from voteit.core.models.user import User
    from voteit.core.security import unrestricted_wf_transition_to
    request = testing.DummyRequest()
    root = bootstrap_and_fixture(config)
    root.users['dummy'] = User()
    root['m'] = meeting = Meeting()
    meeting.add_groups('dummy', ['role:Voter', 'role:Viewer'])
    meeting['ai1'] = AgendaItem()
    meeting['ai2'] = ai2 = AgendaItem()
    unrestricted_wf_transition_to(ai2, 'upcoming')
    ai2['p1'] = Proposal()
    ai2['p2'] = Proposal()
    meeting['ai3'] = ai3 = AgendaItem()
    unrestricted_wf_transition_to(ai3, 'upcoming')
    meeting['ai4'] = ai4 = AgendaItem()
    unrestricted_wf_transition_to(ai4, 'upcoming')
    return meeting
Пример #33
0
def _setup_poll_fixture(config):
    config.testing_securitypolicy('admin', permissive = True)
    config.include('pyramid_chameleon')
    #Register plugin
    config.include('voteit.schulze')
    config.include('voteit.core.helpers')
    config.include('voteit.core.testing_helpers.register_catalog')
    root = bootstrap_and_fixture(config)
    root['m'] = Meeting()
    unrestricted_wf_transition_to(root['m'], 'ongoing')
    root['m']['ai'] = ai = AgendaItem()
    unrestricted_wf_transition_to(ai, 'upcoming')
    unrestricted_wf_transition_to(ai, 'ongoing')
    #Setup poll
    ai['poll'] = Poll()
    poll = ai['poll']
    #Add proposals
    p1 = Proposal(creators = ['dummy'], text = 'first proposal')
    p1.uid = 'p1uid' #To make it simpler to test against
    ai['p1'] = p1
    p2 = Proposal(creators = ['dummy'], text = 'second proposal')
    p2.uid = 'p2uid'
    ai['p2'] = p2
    p3 = Proposal(creators = ['dummy'], text = 'third proposal')
    p3.uid = 'p3uid'
    ai['p3'] = p3
    #Select proposals for this poll
    poll.proposal_uids = (p1.uid, p2.uid, p3.uid)
    #Set poll as ongoing
    unrestricted_wf_transition_to(poll, 'upcoming')
    unrestricted_wf_transition_to(poll, 'ongoing')
    return poll
Пример #34
0
def _setup_poll_fixture(config):

    #Register plugin
    config.include('voteit.schulze')
    
    config.include('voteit.core.testing_helpers.register_catalog')
    config.include('voteit.core.testing_helpers.register_security_policies')
    config.scan('voteit.core.subscribers.catalog')    
    config.scan('voteit.core.views.components.proposals')
    config.scan('voteit.core.views.components.creators_info')
    config.scan('voteit.core.views.components.metadata_listing')
    root = bootstrap_and_fixture(config)
    
    root['m'] = Meeting()
    unrestricted_wf_transition_to(root['m'], 'ongoing')
    root['m']['ai'] = ai = AgendaItem()
    unrestricted_wf_transition_to(ai, 'upcoming')
    unrestricted_wf_transition_to(ai, 'ongoing')
    
    #Setup poll
    ai['poll'] = Poll()
    poll = ai['poll']
    
    #Add proposals
    p1 = Proposal(creators = ['dummy'])
    p1.uid = 'p1uid' #To make it simpler to test against
    ai['p1'] = p1
    p2 = Proposal(creators = ['dummy'])
    p2.uid = 'p2uid'
    ai['p2'] = p2
    p3 = Proposal(creators = ['dummy'])
    p3.uid = 'p3uid'
    ai['p3'] = p3
    
    #Select proposals for this poll
    poll.proposal_uids = (p1.uid, p2.uid, p3.uid)

    #Set poll as ongoing
    unrestricted_wf_transition_to(poll, 'upcoming')
    unrestricted_wf_transition_to(poll, 'ongoing')

    return poll
Пример #35
0
    def test_proposal_states(self):
        obj = Proposal()
        request = testing.DummyRequest()

        self.assertEqual(obj.get_workflow_state(), u"published")

        obj.make_workflow_transition(request, "published_to_retracted")
        self.assertEqual(obj.get_workflow_state(), u"retracted")

        obj.workflow.initialize(obj)
        obj.make_workflow_transition(request, "published_to_voting")
        self.assertEqual(obj.get_workflow_state(), u"voting")

        obj.make_workflow_transition(request, "voting_to_approved")
        self.assertEqual(obj.get_workflow_state(), u"approved")

        obj.workflow.initialize(obj)
        obj.make_workflow_transition(request, "published_to_unhandled")
        self.assertEqual(obj.get_workflow_state(), u"unhandled")

        obj.workflow.initialize(obj)
        obj.make_workflow_transition(request, "published_to_voting")
        obj.make_workflow_transition(request, "voting_to_denied")
        self.assertEqual(obj.get_workflow_state(), u"denied")