def discussion(request, test_session, default_preferences): """An empty Discussion fixture with default preferences""" from assembl.models import Discussion with test_session.no_autoflush: d = Discussion(topic=u"Jack Layton", slug="jacklayton2", subscribe_to_notifications_on_signup=False, creator=None, session=test_session) d.discussion_locales = ['en', 'fr', 'de'] test_session.add(d) test_session.flush() def fin(): print "finalizer discussion" discussion = d if inspect(discussion).detached: # How did this happen? discussion = test_session.query(Discussion).get(d.id) test_session.delete(discussion.table_of_contents) test_session.delete(discussion.root_idea) test_session.delete(discussion.next_synthesis) preferences = discussion.preferences discussion.preferences = None discussion.preferences_id = None for ut in discussion.user_templates: for ns in ut.notification_subscriptions: ns.delete() ut.delete() test_session.delete(preferences) test_session.delete(discussion) test_session.flush() request.addfinalizer(fin) return d
def test_add_discussion(test_session): d = Discussion(topic=u"Education", slug="education", subscribe_to_notifications_on_signup=False, creator=None, session=test_session) d.discussion_locales = ['en', 'fr', 'de'] d.terms_and_conditions = LangString.create( u"Use the haptic JSON system, then you can quantify the cross-platform capacitor!", "en") d.legal_notice = LangString.create( u"Use the optical SCSI microchip, then you can generate the cross-platform pixel!", "en") test_session.flush() assert d.topic == u"Education" assert d.discussion_locales == ['en', 'fr', 'de'] assert d.terms_and_conditions.entries[ 0].value == u"Use the haptic JSON system, then you can quantify the cross-platform capacitor!" # noqa: E501 assert d.legal_notice.entries[ 0].value == u"Use the optical SCSI microchip, then you can generate the cross-platform pixel!" # noqa: E501 test_session.delete(d.table_of_contents) test_session.delete(d.root_idea) test_session.delete(d.next_synthesis) preferences = d.preferences d.preferences = None d.preferences_id = None for ut in d.user_templates: for ns in ut.notification_subscriptions: ns.delete() ut.delete() test_session.delete(preferences) test_session.delete(d) test_session.flush()
def discussion2(request, test_session): """An non-empty Discussion fixture with default preferences""" from assembl.models import Discussion d = Discussion(topic=u"Second discussion", slug="testdiscussion2", creator=None) test_session.add(d) test_session.add(d.next_synthesis) test_session.add(d.root_idea) test_session.add(d.table_of_contents) test_session.flush() def fin(): print "finalizer discussion2" test_session.delete(d.table_of_contents) test_session.delete(d.root_idea) test_session.delete(d.next_synthesis) for ut in d.user_templates: for ns in ut.notification_subscriptions: ns.delete() ut.delete() preferences = d.preferences d.preferences = None test_session.delete(preferences) test_session.delete(d) test_session.flush() request.addfinalizer(fin) return d
def test_adding_a_discussion_automatically_adds_participant_user_template_for_notifications( test_session): discussion = Discussion( topic=u"How great is Assembl's notification architecture?", slug="notification-architecture", subscribe_to_notifications_on_signup=True, creator=None, session=test_session) # Creation of a discussion includes automatic creation of a default user template for role participant on this discussion, which is meant to be used for default notification subscriptions assert len(discussion.user_templates) > 0 participant_role = test_session.query(Role).filter_by( name=R_PARTICIPANT).one() user_templates_for_role_participant = test_session.query( UserTemplate).filter_by(discussion=discussion, for_role=participant_role).all() assert len(user_templates_for_role_participant) > 0 test_session.delete(discussion.table_of_contents) test_session.delete(discussion.root_idea) test_session.delete(discussion.next_synthesis) preferences = discussion.preferences discussion.preferences = None discussion.preferences_id = None for ut in discussion.user_templates: for ns in ut.notification_subscriptions: ns.delete() ut.delete() test_session.delete(preferences) test_session.delete(discussion) test_session.flush()
def discussion(request, test_session, default_preferences): from assembl.models import Discussion d = Discussion(topic=u"Jack Layton", slug="jacklayton2", session=test_session) test_session.add(d) test_session.add(d.next_synthesis) test_session.add(d.root_idea) test_session.add(d.table_of_contents) test_session.flush() def fin(): print "finalizer discussion" discussion = d if inspect(d).detached: # How did this happen? discussion = test_session.query(Discussion).get(d.id) test_session.delete(discussion.table_of_contents) test_session.delete(discussion.root_idea) test_session.delete(discussion.next_synthesis) preferences = discussion.preferences discussion.preferences = None test_session.delete(preferences) test_session.delete(discussion) test_session.flush() request.addfinalizer(fin) return d
def discussion(request, test_session, default_preferences): """An empty Discussion fixture with default preferences""" from assembl.models import Discussion, LangString from assembl.models import Discussion # from assembl.lib.migration import create_default_discussion_data with test_session.no_autoflush: d = Discussion(topic=u"Jack Layton", slug="jacklayton2", subscribe_to_notifications_on_signup=False, creator=None, session=test_session) d.discussion_locales = ['en', 'fr', 'de'] d.legal_notice = LangString.create( u"We need to input the optical HDD sensor!", "en") tac = LangString.create( u"You can't quantify the driver without quantifying the 1080p JSON protocol!", "en") tac.add_value( u"Vous ne pouvez pas mesurer le driver sans mesurer le protocole JSON en 1080p", u"fr") d.terms_and_conditions = tac test_session.add(d) # create_default_discussion_data(d) # Don't create default discussion data (permissions, sections) here # because it takes too much time to run all tests. # If you need sections or permissions in your tests, execute # create_default_discussion_data, create_default_discussion_sections # or create_default_permissions in your specific test or # use discussion_with_default_data fixture. # If you do permissions tests, be aware that the admin user # having R_SYSADMIN is actually a special case, see # auth/utils.py:get_permissions, it doesn't use discussion permissions # at all. So you need discussion permissions if you test with the # unauthenticated user Everyone or a user not having the R_SYSADMIN role. test_session.flush() def fin(): print "finalizer discussion" discussion = d if inspect(discussion).detached: # How did this happen? discussion = test_session.query(Discussion).get(d.id) test_session.delete(discussion.table_of_contents) test_session.delete(discussion.root_idea) test_session.delete(discussion.next_synthesis) preferences = discussion.preferences discussion.preferences = None discussion.preferences_id = None for ut in discussion.user_templates: for ns in ut.notification_subscriptions: ns.delete() ut.delete() test_session.delete(preferences) test_session.delete(discussion) test_session.flush() request.addfinalizer(fin) return d
def test_cache_key(test_session): d = Discussion(topic=u"John Doe", slug="johndoe", subscribe_to_notifications_on_signup=False, creator=None, session=test_session) fn = test_cache_key result = d.generate_redis_key(fn) expected_result = "test_cache_key_" + str(d.id) + "_21_42" assert result(d, 21, 42) == expected_result
def test_adding_a_discussion_automatically_adds_participant_user_template_for_notifications(test_session): discussion = Discussion( topic=u"How great is Assembl's notification architecture?", slug="notification-architecture", subscribe_to_notifications_on_signup=True, creator=None, session=test_session) # Creation of a discussion includes automatic creation of a default user template for role participant on this discussion, which is meant to be used for default notification subscriptions assert len(discussion.user_templates) > 0 participant_role = test_session.query(Role).filter_by(name=R_PARTICIPANT).one() user_templates_for_role_participant = test_session.query(UserTemplate).filter_by(discussion=discussion, for_role=participant_role).all() assert len(user_templates_for_role_participant) > 0
def discussion_admin(request): user_id = authenticated_userid(request) if not user_id: return HTTPFound(location='/login?next_view=/admin/discussions/') session = User.default_db context = dict(get_default_context(request), discussions=session.query(Discussion)) if request.method == 'POST': g = lambda x: request.POST.get(x, None) (topic, slug, name, host, port, ssl, folder, password, username) = ( g('topic'), g('slug'), g('mbox_name'), g('host'), g('port'), True if g('ssl') == 'on' else False, g('folder'), g('password'), g('username'), ) discussion = Discussion(topic=topic, slug=slug) session.add(discussion) create_default_permissions(session, discussion) mailbox_class = (MailingList if g('mailing_list_address') else IMAPMailbox) mailbox = mailbox_class( name=name, host=host, port=int(port), username=username, use_ssl=ssl, folder=folder, password=password, ) if (g('mailing_list_address')): mailbox.post_email_address = g('mailing_list_address') mailbox.discussion = discussion return render_to_response('admin/discussions.jinja2', context, request=request)
def discussion_admin(request): user_id = authenticated_userid(request) if not user_id: return HTTPFound(location='/login?next=/admin/discussions/') session = User.default_db context = dict(get_default_context(request), discussions=session.query(Discussion)) if request.method == 'POST': g = lambda x: request.POST.get(x, None) (topic, slug, name, host, port, ssl, folder, password, username, homepage) = (g('topic'), g('slug'), g('mbox_name'), g('host'), g('port'), True if g('ssl') == 'on' else False, g('folder'), g('password'), g('username'), g('homepage')) discussion = Discussion(topic=topic, creator_id=user_id, slug=slug) # Could raise an exception if there is no/incorrect scheme passed discussion.homepage = homepage session.add(discussion) discussion.apply_side_effects_without_json(request=request) discussion.invoke_callbacks_after_creation() create_default_permissions(discussion) mailbox_class = (MailingList if g('mailing_list_address') else IMAPMailbox) mailbox = mailbox_class( name=name, host=host, port=int(port), username=username, use_ssl=ssl, folder=folder, password=password, ) if (g('mailing_list_address')): mailbox.post_email_address = g('mailing_list_address') mailbox.discussion = discussion return render_to_response('admin/discussions.jinja2', context, request=request)
def test_add_discussion(test_session): d = Discussion( topic=u"Education", slug="education", subscribe_to_notifications_on_signup=False, creator=None, session=test_session) d.discussion_locales = ['en', 'fr', 'de'] d.terms_and_conditions = LangString.create( u"Use the haptic JSON system, then you can quantify the cross-platform capacitor!", "en") d.legal_notice = LangString.create( u"Use the optical SCSI microchip, then you can generate the cross-platform pixel!", "en") test_session.flush() assert d.topic == u"Education" assert d.discussion_locales == ['en', 'fr', 'de'] assert d.terms_and_conditions.entries[0].value == u"Use the haptic JSON system, then you can quantify the cross-platform capacitor!" # noqa: E501 assert d.legal_notice.entries[0].value == u"Use the optical SCSI microchip, then you can generate the cross-platform pixel!" # noqa: E501 test_session.delete(d)
def discussion2(request, test_session): from assembl.models import Discussion d = Discussion(topic=u"Second discussion", slug="testdiscussion2") test_session.add(d) test_session.add(d.next_synthesis) test_session.add(d.root_idea) test_session.add(d.table_of_contents) test_session.flush() def fin(): print "finalizer discussion2" test_session.delete(d.table_of_contents) test_session.delete(d.root_idea) test_session.delete(d.next_synthesis) test_session.delete(d) test_session.flush() request.addfinalizer(fin) return d
def discussion(request, test_session, default_preferences, test_adminuser_webrequest): """An empty Discussion fixture with default preferences""" from assembl.models import Discussion from assembl.models.auth import create_default_permissions d = Discussion(topic=u"Jack Layton", slug="jacklayton2", subscribe_to_notifications_on_signup=False, creator=None) test_session.add(d) test_session.flush() d.apply_side_effects_without_json( request=test_adminuser_webrequest._base_pyramid_request) d.discussion_locales = ['en', 'fr', 'de'] create_default_permissions(d) test_session.flush() def fin(): print("finalizer discussion") discussion = d if inspect(discussion).detached: # How did this happen? discussion = test_session.query(Discussion).get(d.id) for acl in discussion.acls: test_session.delete(acl) test_session.delete(discussion.table_of_contents) test_session.delete(discussion.root_idea) test_session.delete(discussion.next_synthesis) preferences = discussion.preferences discussion.preferences = None discussion.preferences_id = None for ut in discussion.user_templates: for ns in ut.notification_subscriptions: ns.delete() ut.delete() test_session.delete(preferences) test_session.delete(discussion) test_session.flush() request.addfinalizer(fin) return d
def discussion2(request, test_session): """An non-empty Discussion fixture with default preferences""" from assembl.models import Discussion d = Discussion(topic=u"Second discussion", slug="testdiscussion2") test_session.add(d) test_session.add(d.next_synthesis) test_session.add(d.root_idea) test_session.add(d.table_of_contents) test_session.flush() def fin(): print "finalizer discussion2" test_session.delete(d.table_of_contents) test_session.delete(d.root_idea) test_session.delete(d.next_synthesis) preferences = d.preferences d.preferences = None test_session.delete(preferences) test_session.delete(d) test_session.flush() request.addfinalizer(fin) return d
def test_cache_key(test_session): d = Discussion(topic=u"John Doe", slug="johndoe", subscribe_to_notifications_on_signup=False, creator=None, session=test_session) fn = test_cache_key result = d.generate_redis_key(fn) expected_result = "test_cache_key_" + str(d.id) + "_21_42" assert result(d, 21, 42) == expected_result test_session.delete(d.table_of_contents) test_session.delete(d.root_idea) test_session.delete(d.next_synthesis) preferences = d.preferences d.preferences = None d.preferences_id = None for ut in d.user_templates: for ns in ut.notification_subscriptions: ns.delete() ut.delete() test_session.delete(preferences) test_session.delete(d) test_session.flush()
def discussion(request, test_session, participant2_user, default_preferences): """An empty Discussion fixture with default preferences""" from assembl.models import Discussion, DiscussionAttachment, File, LangString, AttachmentPurpose # from assembl.lib.migration import create_default_discussion_data with test_session.no_autoflush: d = Discussion( topic=u"Jack Layton", slug="jacklayton2", subscribe_to_notifications_on_signup=False, creation_date=datetime.datetime.utcnow(), creator=None, session=test_session) d.discussion_locales = ['en', 'fr', 'de'] d.legal_notice = LangString.create( u"We need to input the optical HDD sensor!", "en") tac = LangString.create( u"You can't quantify the driver without quantifying the 1080p JSON protocol!", "en") tac.add_value( u"Vous ne pouvez pas mesurer le driver sans mesurer le protocole JSON en 1080p", u"fr") d.terms_and_conditions = tac title = LangString.create( u"Faut-il manger des bananes ?", u"fr") title.add_value( u"Should we eat bananas?", u"en") d.title = title subtitle = LangString.create( u"Dis-moi ce que tu manges et je te dirai qui tu es", u"fr") subtitle.add_value( u"Tell me what you eat and I will tell you who you are", u"en") d.subtitle = subtitle button_label = LangString.create( u"Discuter des bananes", u"fr") button_label.add_value( u"Discuss bananas", u"en") d.button_label = button_label # add a privacy policy attachment to the discussion document = File( discussion=d, mime_type='image/png', title='simple_image.png' ) test_session.add(document) document.add_raw_data(os.urandom(256)) test_session.add(document) attachment = DiscussionAttachment( discussion=d, document=document, creator_id=participant2_user.id, title='A privacy policy attachment', attachmentPurpose=AttachmentPurpose.PRIVACY_POLICY_ATTACHMENT.value ) test_session.add(attachment) test_session.add(d) # create_default_discussion_data(d) # Don't create default discussion data (permissions, sections) here # because it takes too much time to run all tests. # If you need sections or permissions in your tests, execute # create_default_discussion_data, create_default_discussion_sections # or create_default_permissions in your specific test or # use discussion_with_default_data fixture. # If you do permissions tests, be aware that the admin user # having R_SYSADMIN is actually a special case, see # auth/utils.py:get_permissions, it doesn't use discussion permissions # at all. So you need discussion permissions if you test with the # unauthenticated user Everyone or a user not having the R_SYSADMIN role. test_session.flush() def fin(): print("finalizer discussion") discussion = d if inspect(discussion).detached: # How did this happen? discussion = test_session.query(Discussion).get(d.id) test_session.delete(attachment) test_session.delete(document) test_session.delete(discussion.table_of_contents) test_session.delete(discussion.root_idea) test_session.delete(discussion.next_synthesis) preferences = discussion.preferences discussion.preferences = None discussion.preferences_id = None for ut in discussion.user_templates: for ns in ut.notification_subscriptions: ns.delete() ut.delete() test_session.delete(preferences) test_session.delete(discussion) test_session.flush() request.addfinalizer(fin) return d