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)
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)
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()
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
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
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()
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)
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
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"
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
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')