예제 #1
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']
예제 #2
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']
예제 #3
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)
예제 #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)
예제 #5
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
예제 #6
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']
예제 #7
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
예제 #8
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']
예제 #9
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']