def test_redirect(self): url = "/developers/" res = self.client.get(urlparams(reverse("users.logout"), to=url), follow=True) self.assert3xx(res, url, status_code=302) # Test that we don't follow domains url = urlparams(reverse("users.logout"), to="http://ev.il/developers/") res = self.client.get(url, follow=True) self.assert3xx(res, "/", status_code=302)
def test_redirect(self): url = '/developers/' res = self.client.get(urlparams(reverse('users.logout'), to=url), follow=True) self.assert3xx(res, url, status_code=302) # Test that we don't follow domains url = urlparams(reverse('users.logout'), to='http://ev.il/developers/') res = self.client.get(url, follow=True) self.assert3xx(res, '/', status_code=302)
def test_compare_revisions_missing_query_param(self): """Try to compare two revisions, with a missing query string param.""" url = reverse('wiki.compare_revisions', args=[self.document.slug]) query = {'from': self.revision1.id} url = urlparams(url, **query) response = self.client.get(url) eq_(404, response.status_code) url = reverse('wiki.compare_revisions', args=[self.document.slug]) query = {'to': self.revision1.id} url = urlparams(url, **query) response = self.client.get(url) eq_(404, response.status_code)
def authorize(request): if request.method == 'GET' and 'oauth_token' in request.GET: try: t = Token.objects.get(token_type=REQUEST_TOKEN, key=request.GET['oauth_token']) except Token.DoesNotExist: log.error('Invalid OAuth request for obtaining user authorization') return HttpResponse(status=401) return render(request, 'developers/oauth_authorize.html', {'app_name': t.creds.app_name, 'oauth_token': request.GET['oauth_token']}) elif request.method == 'POST': token = request.POST.get('oauth_token') try: t = Token.objects.get(token_type=REQUEST_TOKEN, key=token) except Token.DoesNotExist: return HttpResponse(status=401) if 'grant' in request.POST: t.user = request.user t.save() return HttpResponseRedirect( urlparams(t.creds.redirect_uri, oauth_token=token, oauth_verifier=t.verifier)) elif 'deny' in request.POST: t.delete() return HttpResponse(status=200) else: log.error('Invalid OAuth request for user access authorization') return HttpResponse(status=401)
def authorize(request): if request.method == 'GET' and 'oauth_token' in request.GET: try: t = Token.objects.get(token_type=REQUEST_TOKEN, key=request.GET['oauth_token']) except Token.DoesNotExist: log.error('Invalid OAuth request for obtaining user authorization') return HttpResponse(status=401) return render( request, 'developers/oauth_authorize.html', { 'app_name': t.creds.app_name, 'oauth_token': request.GET['oauth_token'] }) elif request.method == 'POST': token = request.POST.get('oauth_token') try: t = Token.objects.get(token_type=REQUEST_TOKEN, key=token) except Token.DoesNotExist: return HttpResponse(status=401) if 'grant' in request.POST: t.user = request.user t.save() return HttpResponseRedirect( urlparams(t.creds.redirect_uri, oauth_token=token, oauth_verifier=t.verifier)) elif 'deny' in request.POST: t.delete() return HttpResponse(status=200) else: log.error('Invalid OAuth request for user access authorization') return HttpResponse(status=401)
def test_logout(self): data = self._test_login() r = self.client.delete( urlparams(self.logout_url, _user=data['token']), content_type='application/json') eq_(r.status_code, 204)
def test_intermediate(self): """ Test that the intermediate DocumentAttachment gets created correctly when adding an Attachment with a document_id. """ doc = document(locale='en', slug='attachment-test-intermediate') doc.save() rev = revision(document=doc, is_approved=True) rev.save() file_for_upload = make_test_file( content='A file for testing intermediate attachment model.') post_data = { 'title': 'Intermediate test file', 'description': 'Intermediate test file', 'comment': 'Initial upload', 'file': file_for_upload, } add_url = urlparams(reverse('attachments.new_attachment'), document_id=doc.id) resp = self.client.post(add_url, data=post_data) eq_(302, resp.status_code) eq_(1, doc.files.count()) intermediates = DocumentAttachment.objects.filter(document__pk=doc.id) eq_(1, intermediates.count()) intermediate = intermediates[0] eq_('admin', intermediate.attached_by.username) eq_(file_for_upload.name.split('/')[-1], intermediate.name)
def process_request(self, request): prefixer = Prefixer(request) set_url_prefixer(prefixer) full_path = prefixer.fix(prefixer.shortened_path) if 'lang' in request.GET: # Blank out the locale so that we can set a new one. Remove lang # from the query params so we don't have an infinite loop. prefixer.locale = '' new_path = prefixer.fix(prefixer.shortened_path) query = dict((smart_str(k), v) for k, v in request.GET.iteritems() if k != 'lang') return HttpResponsePermanentRedirect(urlparams(new_path, **query)) if full_path != request.path: query_string = request.META.get('QUERY_STRING', '') full_path = urllib.quote(full_path.encode('utf-8')) if query_string: full_path = '%s?%s' % (full_path, query_string) response = HttpResponsePermanentRedirect(full_path) # Vary on Accept-Language if we changed the locale old_locale = prefixer.locale new_locale, _ = split_path(full_path) if old_locale != new_locale: response['Vary'] = 'Accept-Language' return response request.path_info = '/' + prefixer.shortened_path request.locale = prefixer.locale translation.activate(prefixer.locale)
def test_logout(self): UserProfile.objects.create(email='*****@*****.**') data = self._test_login() r = self.client.delete(urlparams(self.logout_url, _user=data['token']), content_type='application/json') eq_(r.status_code, 204)
def test_detail_translated(self): res = self.anon.get( urlparams(reverse('regions-detail', kwargs={'pk': 'br'}), lang='fr')) eq_(res.status_code, 200) data = json.loads(res.content) eq_(data['name'], u'Brésil')
def _document_redirect_to_create(document_slug, document_locale, slug_dict): """ When a Document doesn't exist but the user can create it, return the creation URL to redirect to. """ url = reverse('wiki.new_document', locale=document_locale) if slug_dict['length'] > 1: parent_doc = get_object_or_404(Document, locale=document_locale, slug=slug_dict['parent'], is_template=0) url = urlparams(url, parent=parent_doc.id, slug=slug_dict['specific']) else: # This is a "base level" redirect, i.e. no parent url = urlparams(url, slug=document_slug) return url
def _default_locale_fallback(request, document_slug, document_locale): """ If we're falling back to a Document in the default locale, figure out why and whether we can redirect to a translation in the requested locale. """ fallback_doc = None redirect_url = None fallback_reason = None try: fallback_doc = Document.objects.get( locale=settings.WIKI_DEFAULT_LANGUAGE, slug=document_slug) # If there's a translation to the requested locale, take it: translation = fallback_doc.translated_to(document_locale) if translation and translation.current_revision: url = translation.get_absolute_url() redirect_url = urlparams(url, query_dict=request.GET) elif translation and fallback_doc.current_revision: # Found a translation but its current_revision is None # and OK to fall back to parent (parent is approved). fallback_reason = 'translation_not_approved' elif fallback_doc.current_revision: # There is no translation # and OK to fall back to parent (parent is approved). fallback_reason = 'no_translation' except Document.DoesNotExist: pass return fallback_doc, fallback_reason, redirect_url
def redirect(request, viewer, key): new = Token(data=[viewer.file.id, key]) new.save() url = urljoin(settings.STATIC_URL, reverse('mkt.files.serve', args=[viewer, key])) url = urlparams(url, token=new.token) return http.HttpResponseRedirect(url)
def test_get_content_ratings_since(self): cr = ContentRating.objects.create(addon=self.app, ratings_body=0, rating=0) cr.update(modified=self.days_ago(100)) res = self.client.get(urlparams( reverse('content-ratings-list', args=[self.app.app_slug]), since=self.days_ago(5))) eq_(res.status_code, 404) cr.update(modified=self.days_ago(1)) res = self.client.get(urlparams( reverse('content-ratings-list', args=[self.app.id]), since=self.days_ago(5))) eq_(res.status_code, 200) eq_(len(json.loads(res.content)['objects']), 1)
def process_request(self, request): # https://bugzil.la/1189222 # Don't redirect POST $subscribe requests to GET zone url if request.method == 'POST' and '$subscribe' in request.path: return None remaps = DocumentZoneURLRemapsJob().get(request.locale) for original_path, new_path in remaps: if ( request.path_info == original_path or request.path_info.startswith(u''.join([original_path, '/'])) ): # Is this a request for the "original" wiki path? Redirect to # new URL root, if so. new_path = request.path_info.replace(original_path, new_path, 1) new_path = '/%s%s' % (request.locale, new_path) query = request.GET.copy() if 'lang' in query: query.pop('lang') new_path = urlparams(new_path, query_dict=query) return HttpResponseRedirect(new_path) elif request.path_info.startswith(new_path): # Is this a request for the relocated wiki path? If so, rewrite # the path as a request for the proper wiki view. request.path_info = request.path_info.replace(new_path, original_path, 1) break
def process_request(self, request): # https://bugzil.la/1189222 # Don't redirect POST $subscribe requests to GET zone url if request.method == 'POST' and '$subscribe' in request.path: return None remaps = DocumentZoneURLRemapsJob().get(request.locale) for original_path, new_path in remaps: if request.path_info.startswith(original_path): # Is this a request for the "original" wiki path? Redirect to # new URL root, if so. new_path = request.path_info.replace(original_path, new_path, 1) new_path = '/%s%s' % (request.locale, new_path) query = request.GET.copy() if 'lang' in query: query.pop('lang') new_path = urlparams(new_path, query_dict=query) return HttpResponseRedirect(new_path) elif request.path_info.startswith(new_path): # Is this a request for the relocated wiki path? If so, rewrite # the path as a request for the proper wiki view. request.path_info = request.path_info.replace( new_path, original_path, 1) break
def process_request(self, request): prefixer = Prefixer(request) set_url_prefixer(prefixer) full_path = prefixer.fix(prefixer.shortened_path) if 'lang' in request.GET: # Blank out the locale so that we can set a new one. Remove lang # from the query params so we don't have an infinite loop. prefixer.locale = '' new_path = prefixer.fix(prefixer.shortened_path) query = dict((smart_str(k), v) for k, v in request.GET.iteritems() if k != 'lang') return HttpResponsePermanentRedirect(urlparams(new_path, **query)) if full_path != request.path: query_string = request.META.get('QUERY_STRING', '') full_path = urllib.quote(full_path.encode('utf-8')) if query_string: full_path = '%s?%s' % (full_path, query_string) response = HttpResponsePermanentRedirect(full_path) # Vary on Accept-Language if we changed the locale old_locale = prefixer.locale new_locale, _ = split_path(full_path) if old_locale != new_locale: response['Vary'] = 'Accept-Language' return response request.path_info = '/' + prefixer.shortened_path request.LANGUAGE_CODE = prefixer.locale or settings.LANGUAGE_CODE translation.activate(prefixer.locale)
def test_bad_parameters(self): """Ensure badly-formed revision parameters do not cause errors""" url = reverse('wiki.compare_revisions', args=[self.document.slug]) query = {'from': '1e309', 'to': u'1e309'} url = urlparams(url, **query) response = self.client.get(url) eq_(404, response.status_code)
def process_request(self, request): remaps = DocumentZoneURLRemapsJob().get(request.locale) for original_path, new_path in remaps: if request.path_info.startswith(original_path): # Is this a request for the "original" wiki path? Redirect to # new URL root, if so. new_path = request.path_info.replace(original_path, new_path, 1) new_path = '/%s%s' % (request.locale, new_path) query = request.GET.copy() if 'lang' in query: query.pop('lang') new_path = urlparams(new_path, query_dict=query) return HttpResponseRedirect(new_path) elif request.path_info.startswith(new_path): # Is this a request for the relocated wiki path? If so, rewrite # the path as a request for the proper wiki view. request.path_info = request.path_info.replace(new_path, original_path, 1) break
def manifest(request): ctx = RequestContext(request) data = { "name": getattr(settings, "WEBAPP_MANIFEST_NAME", "Firefox Marketplace"), "description": "The Firefox Marketplace", "developer": {"name": "Mozilla", "url": "http://mozilla.org"}, "icons": { # Using the default addon image until we get a marketplace logo. "128": media(ctx, "img/mkt/logos/128.png"), "64": media(ctx, "img/mkt/logos/64.png"), "32": media(ctx, "img/mkt/logos/32.png"), }, "activities": { "marketplace-app": {"href": "/"}, "marketplace-app-rating": {"href": "/"}, "marketplace-category": {"href": "/"}, "marketplace-search": {"href": "/"}, }, } if get_carrier(): data["launch_path"] = urlparams("/", carrier=get_carrier()) manifest_content = json.dumps(data) manifest_etag = hashlib.sha256(manifest_content).hexdigest() @etag(lambda r: manifest_etag) def _inner_view(request): response = HttpResponse(manifest_content, content_type="application/x-web-app-manifest+json") return response return _inner_view(request)
def authorize(request): if request.method == "GET" and "oauth_token" in request.GET: try: t = Token.objects.get(token_type=REQUEST_TOKEN, key=request.GET["oauth_token"]) except Token.DoesNotExist: log.error("Invalid OAuth request for obtaining user authorization") return HttpResponse(status=401) return render( request, "developers/oauth_authorize.html", {"app_name": t.creds.app_name, "oauth_token": request.GET["oauth_token"]}, ) elif request.method == "POST": token = request.POST.get("oauth_token") try: t = Token.objects.get(token_type=REQUEST_TOKEN, key=token) except Token.DoesNotExist: return HttpResponse(status=401) if "grant" in request.POST: t.user = request.user t.save() return HttpResponseRedirect(urlparams(t.creds.redirect_uri, oauth_token=token, oauth_verifier=t.verifier)) elif "deny" in request.POST: t.delete() return HttpResponse(status=200) else: log.error("Invalid OAuth request for user access authorization") return HttpResponse(status=401)
def _mini_manifest(addon, version_id, token=None): if not addon.is_packaged: raise http.Http404 version = get_object_or_404(addon.versions, pk=version_id) file_ = version.all_files[0] manifest = addon.get_manifest_json(file_) package_path = absolutify( reverse('reviewers.signed', args=[addon.app_slug, version.id])) if token: # Generate a fresh token. token = Token(data={'app_id': addon.id}) token.save() package_path = urlparams(package_path, token=token.token) data = { 'name': manifest['name'], 'version': version.version, 'size': file_.size, 'release_notes': version.releasenotes, 'package_path': package_path, } for key in ['developer', 'icons', 'locales']: if key in manifest: data[key] = manifest[key] return json.dumps(data, cls=JSONEncoder)
def fxa_auth_info(context=None): state = uuid.uuid4().hex return (state, urlparams(fxa_oauth_api('authorization'), client_id=settings.FXA_CLIENT_ID, state=state, scope='profile'))
def revisions(self, obj): """HTML link to user's revisions with count""" link = urlparams(reverse('dashboards.revisions'), user=obj.username) count = obj.created_revisions.count() return ('<a href="%(link)s"><strong>%(count)s</strong></a>' % {'link': link, 'count': count})
def test_compare_revisions_invalid_from_int(self): """Provide invalid 'from' int for revision ids.""" url = reverse('wiki.compare_revisions', args=[self.document.slug]) query = {'from': 'invalid', 'to': ''} url = urlparams(url, **query) response = self.client.get(url) eq_(404, response.status_code)
def _default_locale_fallback(request, document_slug, document_locale): """ If we're falling back to a Document in the default locale, figure out why and whether we can redirect to a translation in the requested locale. """ fallback_doc = None redirect_url = None fallback_reason = None try: fallback_doc = Document.objects.get(locale=settings.WIKI_DEFAULT_LANGUAGE, slug=document_slug) # If there's a translation to the requested locale, take it: translation = fallback_doc.translated_to(document_locale) if translation and translation.current_revision: url = translation.get_absolute_url() redirect_url = urlparams(url, query_dict=request.GET) elif translation and fallback_doc.current_revision: # Found a translation but its current_revision is None # and OK to fall back to parent (parent is approved). fallback_reason = 'translation_not_approved' elif fallback_doc.current_revision: # There is no translation # and OK to fall back to parent (parent is approved). fallback_reason = 'no_translation' except Document.DoesNotExist: pass return fallback_doc, fallback_reason, redirect_url
def process_request(self, request): prefixer = Prefixer(request) set_url_prefixer(prefixer) full_path = prefixer.fix(prefixer.shortened_path) if "lang" in request.GET: # Blank out the locale so that we can set a new one. Remove lang # from the query params so we don't have an infinite loop. prefixer.locale = "" new_path = prefixer.fix(prefixer.shortened_path) query = dict((smart_str(k), v) for k, v in request.GET.iteritems() if k != "lang") return HttpResponsePermanentRedirect(urlparams(new_path, **query)) if full_path != request.path: query_string = request.META.get("QUERY_STRING", "") full_path = urllib.quote(full_path.encode("utf-8")) if query_string: full_path = "%s?%s" % (full_path, query_string) response = HttpResponsePermanentRedirect(full_path) # Vary on Accept-Language if we changed the locale old_locale = prefixer.locale new_locale, _ = split_path(full_path) if old_locale != new_locale: response["Vary"] = "Accept-Language" return response request.path_info = "/" + prefixer.shortened_path request.LANGUAGE_CODE = prefixer.locale or settings.LANGUAGE_CODE translation.activate(prefixer.locale)
def revisions(self, obj): """HTML link to user's revisions with count""" link = urlparams(reverse('dashboards.revisions'), user=obj.username) count = obj.created_revisions.count() return ('<a href="%(link)s"><strong>%(count)s</strong></a>' % { 'link': link, 'count': count })
def _document_redirect_to_create(document_slug, document_locale, slug_dict): """ When a Document doesn't exist but the user can create it, return the creation URL to redirect to. """ url = reverse('wiki.create', locale=document_locale) if slug_dict['length'] > 1: parent_doc = get_object_or_404(Document, locale=document_locale, slug=slug_dict['parent'], is_template=0) url = urlparams(url, parent=parent_doc.id, slug=slug_dict['specific']) else: # This is a "base level" redirect, i.e. no parent url = urlparams(url, slug=document_slug) return url
def url(viewname, *args, **kwargs): """Helper for Django's ``reverse`` in templates.""" host = kwargs.pop('host', '') src = kwargs.pop('src', '') url = '%s%s' % (host, reverse(viewname, args=args, kwargs=kwargs)) if src: url = helpers.urlparams(url, src=src) return url
def fxa_auth_info(context=None): state = uuid.uuid4().hex return (state, urlparams( fxa_oauth_api('authorization'), client_id=settings.FXA_CLIENT_ID, state=state, scope='profile'))
def test_logout(self): UserProfile.objects.create(email='*****@*****.**') data = self._test_login() r = self.client.delete( urlparams(self.logout_url, _user=data['token']), content_type='application/json') eq_(r.status_code, 204)
def test_compare_unmatched_document_url(self): """Comparing two revisions of unlinked document should cause error.""" unmatched_document = _create_document(title='Invalid document') url = reverse('wiki.compare_revisions', args=[unmatched_document.slug]) query = {'from': self.revision1.id, 'to': self.revision2.id} url = urlparams(url, **query) response = self.client.get(url) eq_(404, response.status_code)
def get_absolute_url(url, api_name='apps', absolute=True): # Gets an absolute url, except where you don't want that. url[1]['api_name'] = api_name res = reverse(url[0], kwargs=url[1]) if absolute: res = urlparse.urljoin(settings.SITE_URL, res) if len(url) > 2: res = urlparams(res, **url[2]) return res
def test_get_content_ratings_since(self): cr = ContentRating.objects.create(addon=self.app, ratings_body=0, rating=0) cr.update(modified=self.days_ago(100)) res = self.client.get( urlparams(reverse('content-ratings-list', args=[self.app.app_slug]), since=self.days_ago(5))) eq_(res.status_code, 404) cr.update(modified=self.days_ago(1)) res = self.client.get( urlparams(reverse('content-ratings-list', args=[self.app.id]), since=self.days_ago(5))) eq_(res.status_code, 200) eq_(len(json.loads(res.content)['objects']), 1)
def test_compare_revisions(self): """Compare two revisions""" url = reverse('wiki.compare_revisions', args=[self.document.slug]) query = {'from': self.revision1.id, 'to': self.revision2.id} url = urlparams(url, **query) response = self.client.get(url) eq_(200, response.status_code) doc = pq(response.content) eq_('Dolor', doc('span.diff_add').text())
def _check_query(path, result=None, **query): paramed = helpers.urlparams(path, **query) if result is None: result = query for k, v in result.items(): if not isinstance(v, list): result[k] = [v] qs = cgi.parse_qs(paramed.split('?')[1]) for k in query: eq_(set(result[k]), set(qs[k]))
def test_get_content_ratings_since(self): old_date = self.days_ago(100) cr = ContentRating.objects.create(addon=self.app, ratings_body=0, rating=0) # Pass _signal=False to avoid django auto-now on modified. cr.update(modified=old_date, _signal=False) eq_(cr.modified, old_date) res = self.client.get(urlparams( reverse('content-ratings-list', args=[self.app.app_slug]), since=self.days_ago(5))) eq_(res.status_code, 404) cr.update(modified=self.days_ago(1)) res = self.client.get(urlparams( reverse('content-ratings-list', args=[self.app.id]), since=self.days_ago(5))) eq_(res.status_code, 200) eq_(len(json.loads(res.content)['objects']), 1)
def test_persona_signup_copy(self): """ After a new user signs up with Persona, their username, an indication that Persona was used to log in, and a logout link appear in the auth tools section of the page. """ persona_signup_email = '*****@*****.**' persona_signup_username = '******' add_persona_verify_response({ 'status': 'okay', 'email': persona_signup_email, }) self.client.post(reverse('persona_login'), follow=True) data = { 'website': '', 'username': persona_signup_username, 'email': persona_signup_email, 'terms': True } response = self.client.post(reverse( 'socialaccount_signup', locale=settings.WIKI_DEFAULT_LANGUAGE), data=data, follow=True) user_url = reverse('users.user_detail', kwargs={'username': persona_signup_username}, locale=settings.WIKI_DEFAULT_LANGUAGE) signout_url = urlparams(reverse('account_logout', locale=settings.WIKI_DEFAULT_LANGUAGE), next=reverse( 'home', locale=settings.WIKI_DEFAULT_LANGUAGE)) parsed = pq(response.content) login_info = parsed.find('.oauth-logged-in') ok_(len(login_info.children())) signed_in_message = login_info.children()[0] ok_('title' in signed_in_message.attrib) eq_('Signed in with Persona', signed_in_message.attrib['title']) auth_links = login_info.children()[1].getchildren() ok_(len(auth_links)) user_link = auth_links[0].getchildren()[0] ok_('href' in user_link.attrib) eq_(user_url, user_link.attrib['href']) signout_link = auth_links[1].getchildren()[0] ok_('href' in signout_link.attrib) eq_( signout_url.replace('%2F', '/'), # urlparams() encodes slashes signout_link.attrib['href'])
def test_persona_signup_copy(self): """ After a new user signs up with Persona, their username, an indication that Persona was used to log in, and a logout link appear in the auth tools section of the page. """ persona_signup_email = '*****@*****.**' persona_signup_username = '******' with mock.patch('requests.post') as requests_mock: requests_mock.return_value.json.return_value = { 'status': 'okay', 'email': persona_signup_email, } self.client.post(reverse('persona_login'), follow=True) data = {'website': '', 'username': persona_signup_username, 'email': persona_signup_email, 'terms': True} response = self.client.post( reverse('socialaccount_signup', locale=settings.WIKI_DEFAULT_LANGUAGE), data=data, follow=True) user_url = reverse( 'users.user_detail', kwargs={'username': persona_signup_username}, locale=settings.WIKI_DEFAULT_LANGUAGE) signout_url = urlparams( reverse('account_logout', locale=settings.WIKI_DEFAULT_LANGUAGE), next=reverse('home', locale=settings.WIKI_DEFAULT_LANGUAGE)) parsed = pq(response.content) login_info = parsed.find('.oauth-logged-in') ok_(len(login_info.children())) signed_in_message = login_info.children()[0] ok_('title' in signed_in_message.attrib) eq_('Signed in with Persona', signed_in_message.attrib['title']) auth_links = login_info.children()[1].getchildren() ok_(len(auth_links)) user_link = auth_links[0].getchildren()[0] ok_('href' in user_link.attrib) eq_(user_url, user_link.attrib['href']) signout_link = auth_links[1].getchildren()[0] ok_('href' in signout_link.attrib) eq_(signout_url.replace('%2F', '/'), # urlparams() encodes slashes signout_link.attrib['href'])
def media(context, url, key='MEDIA_URL'): """Get a MEDIA_URL link with a cache buster querystring.""" if 'BUILD_ID' in context: build = context['BUILD_ID'] else: if url.endswith('.js'): build = context['BUILD_ID_JS'] elif url.endswith('.css'): build = context['BUILD_ID_CSS'] else: build = context['BUILD_ID_IMG'] return urljoin(context[key], helpers.urlparams(url, b=build))
def test_get_content_ratings_since(self): old_date = self.days_ago(100) cr = ContentRating.objects.create(addon=self.app, ratings_body=0, rating=0) # Pass _signal=False to avoid django auto-now on modified. cr.update(modified=old_date, _signal=False) eq_(cr.modified, old_date) res = self.client.get( urlparams(reverse('content-ratings-list', args=[self.app.app_slug]), since=self.days_ago(5))) eq_(res.status_code, 404) cr.update(modified=self.days_ago(1)) res = self.client.get( urlparams(reverse('content-ratings-list', args=[self.app.id]), since=self.days_ago(5))) eq_(res.status_code, 200) eq_(len(json.loads(res.content)['objects']), 1)
def test_list_translation(self): res = self.anon.get(urlparams(reverse('regions-list'), lang='fr')) eq_(res.status_code, 200) data = json.loads(res.content) for row in data['objects']: region = mkt.regions.REGIONS_DICT.get(row['slug']) eq_(row['name'], region.name) eq_(row['slug'], region.slug) eq_(row['id'], region.id) eq_(len(data['objects']), len(mkt.regions.REGIONS_DICT)) eq_(data['meta']['total_count'], len(mkt.regions.REGIONS_DICT)) eq_(data['objects'][1]['name'], 'Afrique du Sud') eq_(data['objects'][-1]['name'], 'Reste du monde')
def test_list(self): res = self.anon.get(urlparams(reverse('regions-list'))) eq_(res.status_code, 200) data = json.loads(res.content) for row in data['objects']: region = mkt.regions.REGIONS_DICT.get(row['slug']) eq_(row['name'], region.name) eq_(row['slug'], region.slug) eq_(row['id'], region.id) eq_(len(data['objects']), len(mkt.regions.REGIONS_DICT)) eq_(data['meta']['total_count'], len(mkt.regions.REGIONS_DICT)) eq_(data['objects'][0]['name'], mkt.regions.REGIONS_LIST_SORTED_BY_NAME()[0].name) eq_(data['objects'][-1]['name'], unicode(mkt.regions.REGIONS_LIST_SORTED_BY_NAME()[-1].name))
def test_persona_signin_copy(self): """ After an existing user successfully authenticates with Persona, their username, an indication that Persona was used to log in, and a logout link appear in the auth tools section of the page. """ with mock.patch('requests.post') as requests_mock: requests_mock.return_value.json.return_value = { 'status': 'okay', 'email': self.existing_persona_email, } response = self.client.post(reverse('persona_login'), follow=True) eq_(response.status_code, 200) profile_url = reverse( 'users.profile', kwargs={ 'username': self.existing_persona_username }, locale=settings.WIKI_DEFAULT_LANGUAGE) signout_url = urlparams( reverse('account_logout', locale=settings.WIKI_DEFAULT_LANGUAGE), next=reverse('home', locale=settings.WIKI_DEFAULT_LANGUAGE)) parsed = pq(response.content) login_info = parsed.find('.header-login .user-state') ok_(len(login_info.children())) signed_in_message = login_info.children()[0] ok_('title' in signed_in_message.attrib) eq_('Signed in with Persona', signed_in_message.attrib['title']) auth_links = login_info.children()[1].getchildren() ok_(len(auth_links)) profile_link = auth_links[0].getchildren()[0] ok_('href' in profile_link.attrib) eq_(profile_url, profile_link.attrib['href']) signout_link = auth_links[1].getchildren()[0] ok_('href' in signout_link.attrib) eq_(signout_url.replace('%2F', '/'), # urlparams() encodes slashes signout_link.attrib['href'])
def test_files_dict(self): doc = document(locale='en', slug='attachment-test-files-dict') doc.save() rev = revision(document=doc, is_approved=True) rev.save() test_file_1 = make_test_file( content='A file for testing the files dict') post_data = { 'title': 'Files dict test file', 'description': 'Files dict test file', 'comment': 'Initial upload', 'file': test_file_1, } add_url = urlparams(reverse('attachments.new_attachment'), document_id=doc.id) self.client.post(add_url, data=post_data) test_file_2 = make_test_file( content='Another file for testing the files dict') post_data = { 'title': 'Files dict test file 2', 'description': 'Files dict test file 2', 'comment': 'Initial upload', 'file': test_file_2, } self.client.post(add_url, data=post_data) doc = Document.objects.get(pk=doc.id) files_dict = doc.files_dict() file1 = files_dict[test_file_1.name.split('/')[-1]] eq_('admin', file1['attached_by']) eq_('Files dict test file', file1['description']) eq_('text/plain', file1['mime_type']) ok_(test_file_1.name.split('/')[-1] in file1['url']) file2 = files_dict[test_file_2.name.split('/')[-1]] eq_('admin', file2['attached_by']) eq_('Files dict test file 2', file2['description']) eq_('text/plain', file2['mime_type']) ok_(test_file_2.name.split('/')[-1] in file2['url'])