示例#1
0
    def get_discussion_url(self, request=None):
        """
        from pyramid.request import Request
        req = Request.blank('/', base_url=self.discussion.get_base_url())
        Celery didn't like this.  To revisit once we have virtual hosts
        return req.route_url('home', discussion_slug=self.discussion.slug)

        Returns the legacy URL route. Currently, /debate/{discussion_slug}
        """

        from assembl.views import create_get_route
        if request is None:
            # Shouldn't do this. Method should only be used in context
            # of a request!
            from pyramid.threadlocal import get_current_request
            request = get_current_request()

        # TODO: If the route for 'home' is EVER changed, this value MUST be
        # synced. KEEP it as 'home' instead of 'new_home', because usage of
        # this method is kept mostly for legacy routes that do not exist in
        # new front-end yet.
        if request is None:
            route = '/debate/' + self.discussion.slug
        else:
            get_route = create_get_route(request, self.discussion)
            route = get_route('home')
        return urljoin(self.discussion.get_base_url(), route)
示例#2
0
def test_get_route_react_backend(discussion, test_webrequest):
    from assembl.views import create_get_route
    slug = discussion.slug
    get_route = create_get_route(test_webrequest, discussion)
    kwargs = {'extra_path': ''}
    assert get_route('react_general_page', **kwargs) == \
        "/{slug}/".format(slug=slug)
示例#3
0
def test_graphql_cors_request(discussion, test_webrequest, admin_user,
                              test_app, test_session, graphql_registry):
    from assembl.views import create_get_route
    get_route = create_get_route(test_webrequest, discussion)
    old_pref = discussion.preferences['graphql_valid_cors']
    cors_headers = "https://mycoolsite.com,https://myothercoolsite.net"  # no space between comma, just as graphql view
    discussion.preferences['graphql_valid_cors'] = cors_headers.split(",")
    test_session.flush()
    route = get_route('graphql')
    query = graphql_registry['userQuery']
    parameters = {
        "query": query,
        "variables": {
            "id": admin_user.graphene_id()
        }
    }
    resp = test_app.post(route,
                         xhr=True,
                         content_type='application/json',
                         params=json.dumps(parameters))
    assert resp.status_code == 200
    has_cors_headers = 'Access-Control-Allow-Origin' in [
        r[0] for r in resp.headerlist
    ]
    body = json.loads(resp.body)
    user_id = int(Node.from_global_id(body['data']['user']['id'])[1])
    assert user_id == admin_user.id
    assert has_cors_headers
    cors_header_list = [
        x[1] for x in resp.headerlist if x[0] == 'Access-Control-Allow-Origin'
    ][0]
    assert cors_header_list == cors_headers

    discussion.preferences['graphql_valid_cors'] = old_pref
    test_session.flush()
示例#4
0
def test_get_route_react_frontend_profile(discussion, test_webrequest,
                                          participant1_user):
    from assembl.views import create_get_route
    slug = discussion.slug
    user_id = to_global_id('AgentProfile', participant1_user.id)

    get_route = create_get_route(test_webrequest, discussion)
    expected = "/{slug}/profile/{user_id}".format(slug=slug, user_id=user_id)

    assert get_route('furl_profile', userId=user_id) == expected
示例#5
0
def test_get_route_react_frontend_post_no_element(phases, discussion,
                                                  test_webrequest,
                                                  idea_with_en_fr,
                                                  reply_post_1):
    from assembl.views import create_get_route
    get_route = create_get_route(test_webrequest, discussion)
    idea_id = to_global_id('Idea', idea_with_en_fr.id)
    thread = phases['thread']
    options = {'phase': thread.identifier, 'themeId': idea_id, 'element': ''}

    expected = "/{slug}/debate/{phase}/theme/{theme_id}/#{element}"\
        .format(
            slug=discussion.slug,
            phase=thread.identifier,
            theme_id=idea_id,
            element=""
        )
    assert get_route('furl_post', **options) == expected
示例#6
0
def test_graphql_cors_option_request(discussion, test_webrequest, admin_user,
                                     test_app, test_session):
    from assembl.views import create_get_route
    get_route = create_get_route(test_webrequest, discussion)
    old_pref = discussion.preferences['graphql_valid_cors']
    cors_headers = "https://mycoolsite.com,https://myothercoolsite.net"  # no space between comma, just as graphql view
    discussion.preferences['graphql_valid_cors'] = cors_headers.split(",")
    test_session.flush()
    route = get_route('graphql')
    resp = test_app.options(route, xhr=True)
    assert resp.status_code == 200
    has_cors_headers = 'Access-Control-Allow-Origin' in [
        r[0] for r in resp.headerlist
    ]
    assert has_cors_headers
    cors_header_list = [
        x[1] for x in resp.headerlist if x[0] == 'Access-Control-Allow-Origin'
    ][0]
    assert cors_header_list == cors_headers

    discussion.preferences['graphql_valid_cors'] = old_pref
    test_session.flush()
示例#7
0
    def get_discussion_url(self, request=None, force_v1=False):
        """
        from pyramid.request import Request
        req = Request.blank('/', base_url=self.discussion.get_base_url())
        Celery didn't like this.  To revisit once we have virtual hosts
        return req.route_url('home', discussion_slug=self.discussion.slug)

        Returns the legacy URL route. Currently, /debate/{discussion_slug}
        """

        if request is None:
            # Shouldn't do this. Method should only be used in context
            # of a request!
            from pyramid.threadlocal import get_current_request
            request = get_current_request()

        # TODO: If the route for 'home' is EVER changed, this value MUST be
        # synced. KEEP it as 'home' instead of 'new_home', because usage of
        # this method is kept mostly for legacy routes that do not exist in
        # new front-end yet.
        if request is None:
            if force_v1 or (not is_using_landing_page(self.discussion)) or \
                current_phase_use_v1_interface(
                    self.discussion.timeline_events):
                route = self.get_frontend_url('oldDebate',
                                              slug=self.discussion.slug)
            else:
                route = self.get_frontend_url('homeBare',
                                              slug=self.discussion.slug)
        else:
            from assembl.views import create_get_route
            get_route = create_get_route(request, self.discussion)
            if force_v1:
                route = self.get_frontend_url('oldDebate',
                                              slug=self.discussion.slug)
            else:
                route = get_route('bare_slug')
        return urljoin(self.discussion.get_base_url(), route)
示例#8
0
def test_graphql_default_request(discussion, test_app, test_webrequest,
                                 admin_user, graphql_registry):
    from assembl.views import create_get_route
    get_route = create_get_route(test_webrequest, discussion)
    route = get_route('graphql')
    query = graphql_registry['userQuery']
    parameters = {
        "query": query,
        "variables": {
            "id": admin_user.graphene_id()
        }
    }
    resp = test_app.post(route,
                         xhr=True,
                         content_type='application/json',
                         params=json.dumps(parameters))
    assert resp.status_code == 200
    has_cors_header = 'Access-Control-Allow-Origin' in [
        r[0] for r in resp.headerlist
    ]
    body = json.loads(resp.body)
    user_id = int(Node.from_global_id(body['data']['user']['id'])[1])
    assert user_id == admin_user.id
    assert not has_cors_header
示例#9
0
def test_get_route_react_backend_login(discussion, test_webrequest):
    from assembl.views import create_get_route
    # Despite not being discussion route, need to test a code_path that
    # checks for discussion's existence
    get_route = create_get_route(test_webrequest, discussion)
    assert get_route('furl_login') == "/login"
示例#10
0
def test_get_route_v1(discussion, test_webrequest):
    from assembl.views import create_get_route
    slug = discussion.slug
    get_route = create_get_route(test_webrequest, discussion)
    expected = "/debate/{slug}/user/profile".format(slug=slug)
    assert get_route('profile') == expected
示例#11
0
def test_get_route_react_frontend_does_not_exist(discussion, test_webrequest):
    from assembl.views import create_get_route
    get_route = create_get_route(test_webrequest, discussion)
    with pytest.raises(KeyError):
        get_route('react_i_really_dont_exist')