Exemple #1
0
def test_route_discussion_idea_v2(test_app,
                                  discussion_with_2_phase_interface_v2,
                                  post_related_to_sub_idea_1, subidea_1,
                                  test_session):

    from assembl.lib.frontend_urls import FrontendUrls
    from assembl import models
    slug = discussion_with_2_phase_interface_v2.slug
    route = "/debate/%s/idea/%s" % (slug, quote_plus(subidea_1.uri()))
    print(route)
    resp = test_app.get(route)
    assert resp.status_int == 303

    thread_phase = test_session.query(models.DiscussionPhase).\
        filter_by(identifier='thread').first()
    furl = FrontendUrls(discussion_with_2_phase_interface_v2)
    headers = get_response_headers(resp)
    phase_identifier = thread_phase.identifier
    phase_id = thread_phase.graphene_id()
    idea_id = subidea_1.graphene_id()
    expected_path = furl.get_frontend_url('idea',
                                          phase=phase_identifier,
                                          phaseId=phase_id,
                                          themeId=idea_id)
    assert expected_path in headers['Location']
Exemple #2
0
def test_route_discussion_post_v2(test_app,
                                  discussion_with_2_phase_interface_v2,
                                  post_related_to_sub_idea_1, subidea_1,
                                  test_session):
    from assembl.lib.frontend_urls import FrontendUrls
    from assembl import models
    slug = discussion_with_2_phase_interface_v2.slug
    route = "/%s/posts/%s" % (slug, quote_plus(
        post_related_to_sub_idea_1.uri()))
    print route
    resp = test_app.get(route)
    assert resp.status_int == 303

    thread_phase = test_session.query(models.DiscussionPhase).filter(
        models.DiscussionPhase.identifier == "thread").all()[0]
    headers = get_response_headers(resp)
    furl = FrontendUrls(discussion_with_2_phase_interface_v2)
    idea_id = subidea_1.graphene_id()
    phase_identifier = thread_phase.identifier
    phase_id = thread_phase.graphene_id()
    post_id = post_related_to_sub_idea_1.graphene_id()
    expected_path = furl.get_frontend_url('post',
                                          phase=phase_identifier,
                                          themeId=idea_id,
                                          phaseId=phase_id,
                                          element=post_id)

    assert expected_path in headers['Location']
Exemple #3
0
def discussion_list_view(request):
    request.session.pop('discussion')
    user_id = authenticated_userid(request) or Everyone
    user = None
    if user_id != Everyone:
        user = User.get(user_id)
    roles = get_roles(user_id)
    context = get_default_context(request)
    context['discussions'] = []
    # Show even anonymous users every discussion one has access to if
    # authenticated, so they can login and read them
    discussions = discussions_with_access(Authenticated if user_id ==
                                          Everyone else user_id)
    for discussion in discussions:
        discussionFrontendUrls = FrontendUrls(discussion)
        discussion_context = {
            'topic': discussion.topic,
            'slug': discussion.slug,
            'url': discussionFrontendUrls.get_discussion_url()
        }
        if user_has_permission(discussion.id, user_id, P_ADMIN_DISC):
            discussion_context[
                'admin_url'] = discussionFrontendUrls.get_discussion_edition_url(
                )
            discussion_context['permissions_url'] = request.route_url(
                'discussion_permissions', discussion_id=discussion.id)
        context['discussions'].append(discussion_context)
    if R_SYSADMIN in roles:
        context['discussions_admin_url'] = request.route_url(
            'discussion_admin')
        context['permissions_admin_url'] = request.route_url(
            'general_permissions')
    context['user'] = user
    return context
Exemple #4
0
 def resolve_login_data(self, args, context, info):
     # if the debate is public, but has an SSO set and a prefernece to redirect publically
     # this URL would be used
     discussion_id = context.matchdict['discussion_id']
     discussion = models.Discussion.get(discussion_id)
     prefs = discussion.preferences
     next_view = args.get('next_view') or False
     auth_backend = prefs.get('authorization_server_backend') or None
     landing_page = prefs.get('landing_page') or False
     if auth_backend and landing_page:
         from assembl.views.auth.views import get_social_autologin
         route = get_social_autologin(context, discussion, next_view)
         local = False
         url = urljoin(discussion.get_base_url(), route)
     else:
         # Just a regular discussion login, but a route from perspective of React-Router
         # Do not pass any next view by default. It's responsibility of the caller
         from assembl.lib.frontend_urls import FrontendUrls
         furl = FrontendUrls(discussion)
         route = furl.get_frontend_url('ctxLogin')
         if next_view:
             route = furl.append_query_string(route, next=next_view)
         local = True
         url = route
     return URLMeta(local=local, url=url)
Exemple #5
0
def get_discussion_url():
    from ..auth.util import get_current_discussion
    from assembl.lib.frontend_urls import FrontendUrls
    from assembl.lib.utils import get_global_base_url
    discussion = get_current_discussion()
    if discussion:
        front_end_urls = FrontendUrls(discussion)
        return front_end_urls.get_discussion_url()
    else:
        return get_global_base_url()
Exemple #6
0
def test_url_to_post_v1_without_timeline(discussion, root_post_1):
    from assembl.lib.frontend_urls import (FrontendUrls,
                                           get_current_phase_identifier,
                                           current_phase_use_v1_interface)
    frontend_urls = FrontendUrls(discussion)
    assert get_current_phase_identifier(discussion.timeline_events) ==\
        u'thread'
    assert current_phase_use_v1_interface(discussion.timeline_events) is True
    assert '/debate/jacklayton2/posts/local' in\
        frontend_urls.get_post_url(root_post_1)
Exemple #7
0
def xtest_url_to_fiction(discussion, post_published_for_bright_mirror):
    fiction = post_published_for_bright_mirror
    from assembl.lib.frontend_urls import FrontendUrls
    frontend_urls = FrontendUrls(discussion)
    phase = fiction.get_created_phase()
    expected = 'jacklayton2/debate/{}/theme/{}/fictions/{}'.format(
        phase.identifier,
        fiction.get_ideas()[0].graphene_id(), fiction.graphene_id())
    actual = frontend_urls.get_post_url(fiction)
    assert expected in actual
Exemple #8
0
def test_url_to_post_v2(discussion, root_post_en_under_positive_column_of_idea,
                        timeline_phase2_interface_v2):
    from assembl.lib.frontend_urls import (FrontendUrls,
                                           get_current_phase_identifier,
                                           current_phase_use_v1_interface)
    assert get_current_phase_identifier(discussion.timeline_events) ==\
        u'thread'
    assert current_phase_use_v1_interface(discussion.timeline_events) is False
    frontend_urls = FrontendUrls(discussion)
    assert 'jacklayton2/debate/thread/theme/' in \
        frontend_urls.get_post_url(root_post_en_under_positive_column_of_idea)
Exemple #9
0
def test_url_to_synthesis_post_with_timeline(discussion, synthesis_post_1,
                                             timeline_phase2_interface_v2):
    from assembl.lib.frontend_urls import (FrontendUrls,
                                           get_current_phase_identifier,
                                           current_phase_use_v1_interface)
    frontend_urls = FrontendUrls(discussion)
    assert get_current_phase_identifier(discussion.timeline_events) ==\
        u'thread'
    assert current_phase_use_v1_interface(discussion.timeline_events) is False
    post_id = synthesis_post_1.graphene_id()
    assert '/syntheses/{id}'.format(id=post_id)\
        in frontend_urls.get_post_url(synthesis_post_1)
Exemple #10
0
def test_url_to_post_v2_proposal(discussion, proposals_en_fr,
                                 timeline_phase2_interface_v2):
    from assembl.lib.frontend_urls import (FrontendUrls,
                                           get_current_phase_identifier,
                                           current_phase_use_v1_interface)
    assert get_current_phase_identifier(discussion.timeline_events) ==\
        u'thread'
    assert current_phase_use_v1_interface(discussion.timeline_events) is False
    frontend_urls = FrontendUrls(discussion)
    expected = 'jacklayton2/debate/thread/theme/'
    actual = frontend_urls.get_post_url(proposals_en_fr[0])
    assert expected in actual
Exemple #11
0
def test_get_frontend_route_none(discussion, idea_with_en_fr, reply_post_1):
    from assembl.lib.frontend_urls import FrontendUrls
    route_name = None
    route_name_2 = ""
    route_name_3 = "I definitely don't exist"

    furl = FrontendUrls(discussion)

    resp = furl.get_frontend_url(route_name)
    assert resp is None

    resp = furl.get_frontend_url(route_name_2)
    assert resp is None

    resp = furl.get_frontend_url(route_name_3)
    assert resp is None
Exemple #12
0
def test_url_to_post_v2_proposal(discussion, proposals_en_fr,
                                 timeline_phase2_interface_v2, test_session):
    from assembl.lib.frontend_urls import (FrontendUrls,
                                           get_current_phase_identifier,
                                           current_phase_use_v1_interface)
    proposal = proposals_en_fr[0]
    phase = proposal.get_created_phase()
    assert get_current_phase_identifier(discussion.timeline_events) ==\
        u'thread'
    assert current_phase_use_v1_interface(discussion.timeline_events) is False
    frontend_urls = FrontendUrls(discussion)
    expected = 'jacklayton2/debate/{}/question/{}/1/#{}'.format(
        phase.identifier,
        proposal.get_ideas()[0].graphene_id(),
        proposals_en_fr[0].graphene_id())
    actual = frontend_urls.get_post_url(proposals_en_fr[0])
    assert expected in actual
Exemple #13
0
def test_route_discussion_idea(discussion, root_post_1, subidea_1, test_app):
    """/debate/slug/idea/%id"""
    slug = discussion.slug

    # Encode the URL so that it is compatible with URLs
    url_post_id = quote_plus(subidea_1.uri())
    route = discussion_route(slug, "idea", url_post_id, backbone=True)
    resp = test_app.get(route)
    assert resp.status_int == 200

    from assembl.lib.frontend_urls import FrontendUrls
    headers = get_response_headers(resp)
    redirect_url = headers['Location']
    print(redirect_url)
    redirect_url = unquote(redirect_url)
    furl = FrontendUrls(discussion)
    idea_url = furl.get_relative_idea_url(subidea_1)
    assert idea_url in redirect_url
Exemple #14
0
def test_route_discussion_post_legacy(discussion, root_post_1, test_app):
    """/slug/posts/%id"""
    slug = discussion.slug

    from urllib import quote_plus
    # Encode the URL so that it is compatible with URLs
    url_post_id = quote_plus(root_post_1.uri())
    route = discussion_route(slug, "posts", url_post_id, backbone=True)
    resp = test_app.get(route)
    assert resp.status_int == 200

    from assembl.lib.frontend_urls import FrontendUrls
    headers = get_response_headers(resp)
    redirect_url = unquote(headers['Location'])
    print(redirect_url)
    furl = FrontendUrls(discussion)
    post_url = furl.get_relative_post_url(root_post_1)
    assert post_url in redirect_url
Exemple #15
0
def create_get_route(request, discussion=0):
    if discussion is 0:  # None would be a known absence, don't recalculate
        from assembl.auth.util import discussion_from_request
        discussion = discussion_from_request(request)
    from assembl.lib.frontend_urls import FrontendUrls
    if discussion:
        furl = FrontendUrls(discussion)

        def get_route(name, **kwargs):
            # If the resource is a furl_* route, check for front-end
            # routes first then return potential V2/V1 route
            # NOTE: `furl_` prefix MUST be used in this context in
            # order to avoid conflicts with Pyramid routes
            # This would NOT be true if only the FrontendUrl route is
            # used
            if 'furl_' in name:
                kwargs.update({'slug': discussion.slug})
                route_name = name.split('furl_')[1]
                route = furl.get_frontend_url(route_name, **kwargs)
                if route is not None:
                    return route

            if name == "bare_slug":
                name = "new_home" if discussion.preferences['landing_page'] \
                    else "home"
            try:
                return request.route_path('contextual_' + name,
                                          discussion_slug=discussion.slug,
                                          **kwargs)
            except KeyError:
                return request.route_path(name,
                                          discussion_slug=discussion.slug,
                                          **kwargs)
    else:

        def get_route(name, **kwargs):
            # Front-end routes not under a discussion context is already
            # back-end aware
            kwargs['discussion_slug'] = kwargs.get('discussion_slug', '')
            return request.route_path(name, **kwargs)

    return get_route
Exemple #16
0
def test_route_discussion_idea_v2(test_app,
                                  discussion_with_2_phase_interface_v2,
                                  timeline_phase2_interface_v2,
                                  post_related_to_sub_idea_1, subidea_1):

    slug = discussion_with_2_phase_interface_v2.slug
    route = "/debate/%s/idea/%s" % (slug, quote_plus(subidea_1.uri()))
    print route
    resp = test_app.get(route)
    assert resp.status_int == 303

    from assembl.lib.frontend_urls import FrontendUrls
    furl = FrontendUrls(discussion_with_2_phase_interface_v2)
    headers = get_response_headers(resp)
    phase_id = timeline_phase2_interface_v2['identifier']
    idea_id = subidea_1.graphene_id()
    expected_path = furl.get_frontend_url('idea',
                                          phase=phase_id,
                                          themeId=idea_id)
    assert expected_path in headers['Location']
Exemple #17
0
def test_get_frontend_route_post(phases, discussion, idea_with_en_fr,
                                 reply_post_1):
    from assembl.lib.frontend_urls import FrontendUrls
    route_name = "post"
    furl = FrontendUrls(discussion)

    idea_id = to_global_id('Idea', idea_with_en_fr.id)
    element = to_global_id('Post', reply_post_1)
    thread = phases['thread']
    options = {
        'slug': discussion.slug,
        'phase': thread.identifier,
        'themeId': idea_id,
        'element': element
    }
    resp = furl.get_frontend_url(route_name, **options)
    expected = "/{slug}/debate/{phase}/theme/{themeId}/#{element}".format(
        slug=discussion.slug,
        phase=thread.identifier,
        themeId=idea_id,
        element=element)
    assert resp == expected
Exemple #18
0
 def get_url(self):
     from assembl.lib.frontend_urls import FrontendUrls
     frontendUrls = FrontendUrls(self.discussion)
     return frontendUrls.get_post_url(self)
Exemple #19
0
 def get_url(self, request=None):
     from assembl.lib.frontend_urls import FrontendUrls
     frontendUrls = FrontendUrls(self)
     return frontendUrls.get_discussion_url(request)