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
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')
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
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
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'])
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)
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
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)
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']))
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')
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)
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
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)
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)
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)
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']
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)
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
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)
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
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
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)
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
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)
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']
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)
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
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)
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']
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