コード例 #1
0
 def test_tags(self):
     meeting = self._add_mock_meeting()
     from voteit.core.models.discussion_post import DiscussionPost
     obj = DiscussionPost(text='#test')
     meeting['post'] = obj
     self.assertEqual(self.search(tags='test')[0], 1)
     obj.set_field_appstruct({'text': 'test'})
     self.assertEqual(self.search(tags='test')[0], 0)
コード例 #2
0
ファイル: test_catalog.py プロジェクト: tobsan/voteit.core
 def test_tags(self):
     meeting = self._add_mock_meeting()
     from voteit.core.models.discussion_post import DiscussionPost
     obj = DiscussionPost(text = '#test')
     meeting['post'] = obj
     self.assertEqual(self.search(tags='test')[0], 1)
     obj.set_field_appstruct({'text': 'test'})
     self.assertEqual(self.search(tags='test')[0], 0)
コード例 #3
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'])
コード例 #4
0
    def test_tags(self):
        meeting = self._add_mock_meeting()
        from voteit.core.models.discussion_post import DiscussionPost
        obj = DiscussionPost(text='#test')
        meeting['post'] = obj

        def _get_metadata():
            result = self.search(content_type='DiscussionPost')
            doc_id = result[1][0]
            return self.get_metadata(doc_id)

        self.assertEqual(_get_metadata()['tags'], ('test', ))
        obj.set_field_appstruct({'text': 'test'})
        self.assertEqual(_get_metadata()['tags'], ())
コード例 #5
0
ファイル: test_catalog.py プロジェクト: tobsan/voteit.core
    def test_tags(self):
        meeting = self._add_mock_meeting()
        from voteit.core.models.discussion_post import DiscussionPost
        obj = DiscussionPost(text = '#test')
        meeting['post'] = obj
        
        def _get_metadata():
            result = self.search(content_type = 'DiscussionPost')
            doc_id = result[1][0]
            return self.get_metadata(doc_id)

        self.assertEqual(_get_metadata()['tags'], ('test',))
        obj.set_field_appstruct({'text': 'test'})
        self.assertEqual(_get_metadata()['tags'], ())
コード例 #6
0
 def test_context_unread(self):
     register_catalog(self.config)
     self.config.testing_securitypolicy('admin', permissive=True)
     root = bootstrap_and_fixture(self.config)
     from voteit.core.models.meeting import Meeting
     from voteit.core.models.agenda_item import AgendaItem
     from voteit.core.models.discussion_post import DiscussionPost
     root['m'] = Meeting()
     ai = root['m']['ai'] = AgendaItem()
     ai['d1'] = DiscussionPost()
     ai['d2'] = DiscussionPost()
     request = testing.DummyRequest()
     obj = self._cut(ai, request)
     self.assertEqual(len(obj.context_unread), 2)
コード例 #7
0
 def test_discussion_post(self):
     ai = self._fixture()
     from voteit.core.models.discussion_post import DiscussionPost
     ai['o'] = obj = DiscussionPost(text="@admin")
     self._fut(obj, None)
     mailer = get_mailer(self.request)
     self.assertEqual(len(mailer.outbox), 1)
コード例 #8
0
 def test_discussion_redirect_to_agenda_item_not_found(self):
     self._enable_catalog()
     from voteit.core.models.discussion_post import DiscussionPost
     context = DiscussionPost()
     request = testing.DummyRequest()
     from voteit.core.views.redirect import discussion_redirect_to_agenda_item
     self.assertRaises(NotFound, discussion_redirect_to_agenda_item, context, request)
コード例 #9
0
 def test_is_brain_unread(self):
     register_catalog(self.config)
     self.config.testing_securitypolicy('admin', permissive=True)
     root = bootstrap_and_fixture(self.config)
     from voteit.core.models.meeting import Meeting
     from voteit.core.models.agenda_item import AgendaItem
     from voteit.core.models.discussion_post import DiscussionPost
     root['m'] = Meeting()
     ai = root['m']['ai'] = AgendaItem()
     ai['d1'] = DiscussionPost(title='Hello world')
     ai['d2'] = DiscussionPost()
     request = testing.DummyRequest()
     obj = self._cut(ai, request)
     from voteit.core.models.catalog import metadata_for_query
     d1_brain = metadata_for_query(root.catalog, title='Hello world')[0]
     self.assertTrue(obj.is_brain_unread(d1_brain))
コード例 #10
0
 def test_update_contained_in_ai(self):
     self.config.include('arche.testing.setup_auth')
     self.config.include('arche.testing')
     self.config.include('voteit.core.models.meeting')
     self.config.include('voteit.core.models.discussion_post')
     from voteit.core.models.discussion_post import DiscussionPost
     from voteit.core.models.meeting import Meeting
     from voteit.core.models.user import User
     root = self._fixture()
     root['users']['john'] = User()
     root['m'] = Meeting()
     root['m'].add_groups('john', [security.ROLE_VIEWER])
     root['m']['ai'] = ai = self._ai(title='New object')
     ai['dp'] = dp = DiscussionPost()
     #To make sure dp got catalogued
     self.assertEqual(root.catalog.search(uid=dp.uid)[0], 1)
     #The discussion post shouldn't be visible now, since the ai is private
     self.assertEqual(
         root.catalog.search(uid=dp.uid,
                             allowed_to_view=[security.ROLE_VIEWER])[0], 0)
     #When the ai is made upcoming, it should be visible
     security.unrestricted_wf_transition_to(ai, 'upcoming')
     self.assertEqual(
         root.catalog.search(uid=dp.uid,
                             allowed_to_view=[security.ROLE_VIEWER])[0], 1)
コード例 #11
0
    def test_like_userids(self):
        meeting = self._add_mock_meeting()
        from voteit.core.models.discussion_post import DiscussionPost
        obj = DiscussionPost()
        obj.title = 'Hello'
        meeting['post'] = obj

        self.assertEqual(self.search(like_userids='admin')[0], 0)

        #Set like
        from voteit.core.models.interfaces import IUserTags
        user_tags = self.config.registry.getAdapter(obj, IUserTags)
        user_tags.add('like', 'admin')

        self.assertEqual(self.search(like_userids='admin')[0], 1)

        user_tags.remove('like', 'admin')
        self.assertEqual(self.search(like_userids='admin')[0], 0)
コード例 #12
0
 def test_discussion_redirect_to_agenda_item(self):
     self._enable_catalog()
     ai = self._fixture()
     from voteit.core.models.discussion_post import DiscussionPost
     ai['d'] = context = DiscussionPost()
     request = testing.DummyRequest()
     from voteit.core.views.redirect import discussion_redirect_to_agenda_item
     response = discussion_redirect_to_agenda_item(context, request)
     self.assertEqual(response.location, 'http://example.com/m/ai/#%s' % context.uid)
コード例 #13
0
ファイル: test_catalog.py プロジェクト: tobsan/voteit.core
 def test_like_userids(self):
     meeting = self._add_mock_meeting()
     from voteit.core.models.discussion_post import DiscussionPost
     obj = DiscussionPost()
     obj.title = 'Hello'
     meeting['post'] = obj
     
     self.assertEqual(self.search(like_userids='admin')[0], 0)
     
     #Set like
     from voteit.core.models.interfaces import IUserTags
     user_tags = self.config.registry.getAdapter(obj, IUserTags)
     user_tags.add('like', 'admin')
     
     self.assertEqual(self.search(like_userids='admin')[0], 1)
     
     user_tags.remove('like', 'admin')
     self.assertEqual(self.search(like_userids='admin')[0], 0)
コード例 #14
0
ファイル: test_catalog.py プロジェクト: tobsan/voteit.core
 def test_unread(self):
     meeting = self._add_mock_meeting()
     self._register_security_policies()
     self.config.include('voteit.core.models.unread')
     #Discussion posts are unread aware
     from voteit.core.models.discussion_post import DiscussionPost
     obj = DiscussionPost()
     obj.title = 'Hello'
     meeting['post'] = obj
     
     from voteit.core.models.catalog import reindex_indexes
     reindex_indexes(self.root.catalog)
     
     self.assertEqual(self.search(unread='admin')[0], 1)
     
     unread = self.config.registry.queryAdapter(obj, IUnread)
     unread.mark_as_read('admin')
     
     self.assertEqual(self.search(unread='admin')[0], 0)
コード例 #15
0
    def test_unread(self):
        meeting = self._add_mock_meeting()
        self._register_security_policies()
        self.config.include('voteit.core.models.unread')
        #Discussion posts are unread aware
        from voteit.core.models.discussion_post import DiscussionPost
        obj = DiscussionPost()
        obj.title = 'Hello'
        meeting['post'] = obj

        from voteit.core.models.catalog import reindex_indexes
        reindex_indexes(self.root.catalog)

        self.assertEqual(self.search(unread='admin')[0], 1)

        unread = self.config.registry.queryAdapter(obj, IUnread)
        unread.mark_as_read('admin')

        self.assertEqual(self.search(unread='admin')[0], 0)
コード例 #16
0
ファイル: test_user_info.py プロジェクト: waytai/voteit.core
 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)
コード例 #17
0
 def test_discussion_post_already_mentioned(self):
     ai = self._fixture()
     from voteit.core.models.discussion_post import DiscussionPost
     ai['o'] = obj = DiscussionPost()
     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)
コード例 #18
0
 def _context(self):
     register_catalog(self.config)
     self.config.testing_securitypolicy('admin', permissive=True)
     root = bootstrap_and_fixture(self.config)
     from voteit.core.models.meeting import Meeting
     from voteit.core.models.agenda_item import AgendaItem
     from voteit.core.models.discussion_post import DiscussionPost
     root['m'] = Meeting()
     ai = root['m']['ai'] = AgendaItem()
     ai['d1'] = dp = DiscussionPost()
     return dp
コード例 #19
0
 def test_discussion_more(self):
     self.config.testing_securitypolicy(userid='dummy', permissive=True)
     self.config.include('voteit.core.models.fanstatic_resources')
     ai = self._fixture()
     from voteit.core.models.discussion_post import DiscussionPost
     ai['dp'] = context = DiscussionPost()
     context.title = "Testing read more view"
     request = testing.DummyRequest()
     aiv = self._cut(context, request)
     response = aiv.discussion_more()
     self.assertEqual(response['body'], context.title)
コード例 #20
0
 def _fixture(self):
     """ DiscussionPosts check parents state and change their ACL depending
         on what state the meeting or agenda item is in.
     """
     from voteit.core.models.meeting import Meeting
     from voteit.core.models.agenda_item import AgendaItem
     from voteit.core.models.discussion_post import DiscussionPost
     m = Meeting()
     m['ai'] = AgendaItem()
     m['ai']['d'] = DiscussionPost()
     return m
コード例 #21
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
コード例 #22
0
 def _fixture(self, num=10):
     root = bootstrap_voteit(echo=False)
     from voteit.core.models.meeting import Meeting
     from voteit.core.models.agenda_item import AgendaItem
     from voteit.core.models.discussion_post import DiscussionPost
     from voteit.core import security
     root['m'] = m = Meeting()
     m.local_roles.add('admin', [security.MODERATE_MEETING, security.VIEW])
     m['ai'] = ai = AgendaItem()
     for i in range(num):
         ai['d%s' % i] = DiscussionPost()
     return root
コード例 #23
0
    def test_mentioned_email(self):
        request = testing.DummyRequest()
        self.config = testing.setUp(request=request)
        self.config.include('pyramid_mailer.testing')
        self.config.scan('voteit.core.models.site')
        self.config.scan('voteit.core.models.agenda_template')
        self.config.scan('voteit.core.models.agenda_templates')
        self.config.scan('voteit.core.models.user')
        self.config.scan('voteit.core.models.users')
        self.config.scan('voteit.core.subscribers.mention')
        self.config.include('voteit.core.models.user_tags')
        self.config.include('voteit.core.models.catalog')
        self.config.scan('betahaus.pyracont.fields.password')

        from voteit.core.bootstrap import bootstrap_voteit
        root = bootstrap_voteit(echo=False)
        root.users['admin'].set_field_value('email', '*****@*****.**')

        from voteit.core.models.meeting import Meeting
        meeting = Meeting()
        root['meeting'] = meeting

        from voteit.core.models.agenda_item import AgendaItem
        agenda_item = AgendaItem()
        meeting['agenda_item'] = agenda_item

        from voteit.core.models.discussion_post import DiscussionPost
        discussion_post = DiscussionPost()
        discussion_post.set_field_value('text', '@admin')
        agenda_item['discussion_post'] = discussion_post

        mailer = get_mailer(request)
        self.assertEqual(len(mailer.outbox), 1)

        msg = mailer.outbox[0]
        self.failUnless(resource_url(discussion_post, request) in msg.html)
コード例 #24
0
ファイル: test_user.py プロジェクト: tobsan/voteit.core
    def test_mentioned_email(self):
        request = testing.DummyRequest()
        self.config = testing.setUp(request=request)
        self.config.include('pyramid_mailer.testing')
        self.config.scan('voteit.core.models.site')
        self.config.scan('voteit.core.models.agenda_template')
        self.config.scan('voteit.core.models.agenda_templates')
        self.config.scan('voteit.core.models.user')
        self.config.scan('voteit.core.models.users')
        self.config.scan('voteit.core.subscribers.mention')
        self.config.include('voteit.core.models.user_tags')
        self.config.include('voteit.core.models.catalog')
        self.config.scan('betahaus.pyracont.fields.password')

        from voteit.core.bootstrap import bootstrap_voteit
        root = bootstrap_voteit(echo=False)
        root.users['admin'].set_field_value('email', '*****@*****.**')

        from voteit.core.models.meeting import Meeting
        meeting = Meeting()
        root['meeting'] = meeting
        
        from voteit.core.models.agenda_item import AgendaItem
        agenda_item = AgendaItem()
        meeting['agenda_item'] = agenda_item

        from voteit.core.models.discussion_post import DiscussionPost
        discussion_post = DiscussionPost()
        discussion_post.set_field_value('text', '@admin')
        agenda_item['discussion_post'] = discussion_post

        mailer = get_mailer(request)
        self.assertEqual(len(mailer.outbox), 1)
        
        msg = mailer.outbox[0]
        self.failUnless(resource_url(discussion_post, request) in msg.html)
コード例 #25
0
    def test_docid(self):
        """ docid should be part of metadata too. """
        from voteit.core.models.agenda_item import AgendaItem
        from voteit.core.models.discussion_post import DiscussionPost

        meeting = self._add_mock_meeting()
        self._register_security_policies()

        meeting['ai'] = AgendaItem()
        meeting['ai']['disc'] = DiscussionPost()

        result = self.search(content_type='DiscussionPost')
        doc_id = result[1][0]
        brain = self.get_metadata(doc_id)
        self.failUnless('docid' in brain)
        self.assertEqual(brain['docid'], doc_id)
コード例 #26
0
    def test_like_userids(self):
        meeting = self._add_mock_meeting()
        from voteit.core.models.discussion_post import DiscussionPost
        obj = DiscussionPost()
        meeting['post'] = obj

        def _get_metadata():
            result = self.search(content_type='DiscussionPost')
            doc_id = result[1][0]
            return self.get_metadata(doc_id)

        self.assertEqual(_get_metadata()['like_userids'], ())

        #Set like
        from voteit.core.models.interfaces import IUserTags
        user_tags = self.config.registry.getAdapter(obj, IUserTags)
        user_tags.add('like', 'admin')

        self.assertEqual(_get_metadata()['like_userids'], ('admin', ))

        user_tags.remove('like', 'admin')
        self.assertEqual(_get_metadata()['like_userids'], ())
コード例 #27
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)
コード例 #28
0
 def test_with_tags(self):
     from voteit.core.models.discussion_post import DiscussionPost
     context = DiscussionPost(text='#HELLO #world')
     self.assertEqual(self._fut(None, {'context': context}), u"hello world")
コード例 #29
0
            (request.application_url, brain['path'], api.translate(va.title))


@view_action('metadata_listing', 'tag', permission=VIEW)
def meta_tag(context, request, va, **kw):
    api = kw['api']
    brain = kw['brain']
    if not brain['content_type'] == 'Proposal':
        return u''
    return '<span><a class="tag" ' \
           'href="?tag=%s" ' \
           '>#%s</a> (%s) </span>' % (brain['aid'], brain['aid'], api.get_tag_count(brain['aid']))


@view_action('metadata_listing', 'delete')
def meta_delete(context, request, va, **kw):
    api = kw['api']
    brain = kw['brain']
    if not brain[
            'content_type'] == 'DiscussionPost' and api.userid not in brain[
                'creators']:
        return u''
    obj = find_resource(api.root, brain['path'])
    if not api.context_has_permission(DELETE, obj):
        return u''
    return u'<span><a class="delete" href="%s">%s</a></span>' % (
        request.resource_url(obj, 'delete'), api.translate(_(u"Delete")))


_dummy = {'Proposal': Proposal(), 'DiscussionPost': DiscussionPost()}