Пример #1
0
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
Пример #2
0
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()
Пример #3
0
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
Пример #4
0
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()
Пример #5
0
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
Пример #6
0
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
Пример #7
0
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
Пример #8
0
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
Пример #9
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)
Пример #10
0
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)
Пример #11
0
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)
Пример #12
0
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
Пример #13
0
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
Пример #14
0
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
Пример #15
0
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()
Пример #16
0
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