def test_users_list(): u1 = UserProfile(username='******', display_name='John Connor', pk=1) u2 = UserProfile(username='******', display_name='Sarah Connor', pk=2) assert users_list([u1, u2]) == ', '.join((user_link(u1), user_link(u2))) # handle None gracefully assert user_link(None) == ''
def test_users_list(): u1 = UserProfile(username='******', display_name='John Connor', pk=1) u2 = UserProfile(username='******', display_name='Sarah Connor', pk=2) assert users_list([u1, u2]) == ', '.join((user_link(u1), user_link(u2))) # handle None gracefully assert user_link(None) == ''
def test_user_link(): u = UserProfile(username='******', display_name='John Connor', pk=1) assert user_link(u) == ('<a href="%s" title="%s">John Connor</a>' % (u.get_url_path(), u.name)) # handle None gracefully assert user_link(None) == ''
def test_short_users_list(): """Test the option to shortened the users list to a certain size.""" # short list with 'others' u1 = UserProfile(username='******', display_name='Oscar the Grouch', pk=1) u2 = UserProfile(username='******', display_name='Grover', pk=2) u3 = UserProfile(username='******', display_name='Cookie Monster', pk=3) shortlist = users_list([u1, u2, u3], size=2) assert shortlist == ', '.join((user_link(u1), user_link(u2))) + ', others'
def test_short_users_list(): """Test the option to shortened the users list to a certain size.""" # short list with 'others' u1 = UserProfile(username='******', display_name='Oscar the Grouch', pk=1) u2 = UserProfile(username='******', display_name='Grover', pk=2) u3 = UserProfile(username='******', display_name='Cookie Monster', pk=3) shortlist = users_list([u1, u2, u3], size=2) assert shortlist == ', '.join((user_link(u1), user_link(u2))) + ', others'
def test_user_link(): u = UserProfile(username='******', display_name='John Connor', pk=1) assert user_link(u) == ( '<a href="%s" title="%s">John Connor</a>' % (u.get_url_path(), u.name)) # handle None gracefully assert user_link(None) == ''
def test_user_link(): user = UserProfile(username='******', display_name='John Connor', pk=1) assert user_link(user) == ( f'<a href="{user.get_absolute_url()}" title="{user.name}">John Connor</a>' ) # handle None gracefully assert user_link(None) == ''
def test_user_link_unicode(): """make sure helper won't choke on unicode input""" u = UserProfile(username=u'jmüller', display_name=u'Jürgen Müller', pk=1) assert user_link(u) == (u'<a href="%s" title="%s">Jürgen Müller</a>' % (u.get_url_path(), u.name)) u = UserProfile(username='******', pk=1) assert user_link(u) == (u'<a href="%s" title="%s">%s</a>' % (u.get_url_path(), u.name, u.username))
def test_user_link_unicode(): """make sure helper won't choke on unicode input""" u = UserProfile(username=u'jmüller', display_name=u'Jürgen Müller', pk=1) assert user_link(u) == ( u'<a href="%s" title="%s">Jürgen Müller</a>' % ( u.get_url_path(), u.name)) u = UserProfile(username='******', pk=1) assert user_link(u) == ( u'<a href="%s" title="%s">%s</a>' % (u.get_url_path(), u.name, u.username))
def test_user_link_unicode(): """make sure helper won't choke on unicode input""" user = UserProfile.objects.create(username='******', display_name='Jürgen Müller') assert user_link(user) == ('<a href="%s" title="%s">Jürgen Müller</a>' % (user.get_absolute_url(), user.name)) user = UserProfile.objects.create(display_name='\xe5\xaf\x92\xe6\x98\x9f') assert user_link(user) == ( '<a href="%s" title="%s">%s</a>' % (user.get_absolute_url(), user.name, user.display_name))
def test_user_link_xss(): u = UserProfile(username='******', display_name='<script>alert(1)</script>', pk=1) html = "<script>alert(1)</script>" assert user_link(u) == '<a href="%s" title="%s">%s</a>' % ( u.get_url_path(), html, html) u = UserProfile(username='******', display_name="""xss"'><iframe onload=alert(3)>""", pk=1) html = """xss"'><iframe onload=alert(3)>""" assert user_link(u) == '<a href="%s" title="%s">%s</a>' % ( u.get_url_path(), html, html)
def test_user_link_xss(): user = UserProfile(username='******', display_name='<script>alert(1)</script>', pk=1) html = "<script>alert(1)</script>" assert user_link(user) == '<a href="%s" title="%s">%s</a>' % ( user.get_absolute_url(), html, html) user = UserProfile(username='******', display_name="""xss"'><iframe onload=alert(3)>""", pk=1) html = """xss"'><iframe onload=alert(3)>""" assert user_link(user) == '<a href="%s" title="%s">%s</a>' % ( user.get_absolute_url(), html, html)
def to_string(self, type_=None): log_type = constants.activity.LOG_BY_ID[self.action] if type_ and hasattr(log_type, '%s_format' % type_): format = getattr(log_type, '%s_format' % type_) else: format = log_type.format # We need to copy arguments so we can remove elements from it # while we loop over self.arguments. arguments = copy(self.arguments) addon = None rating = None version = None collection = None tag = None group = None file_ = None status = None for arg in self.arguments: if isinstance(arg, Addon) and not addon: if arg.has_listed_versions(): addon = self.f(u'<a href="{0}">{1}</a>', arg.get_url_path(), arg.name) else: addon = self.f(u'{0}', arg.name) arguments.remove(arg) if isinstance(arg, Rating) and not rating: rating = self.f(u'<a href="{0}">{1}</a>', arg.get_url_path(), ugettext('Review')) arguments.remove(arg) if isinstance(arg, Version) and not version: text = ugettext('Version {0}') if arg.channel == amo.RELEASE_CHANNEL_LISTED: version = self.f(u'<a href="{1}">%s</a>' % text, arg.version, arg.get_url_path()) else: version = self.f(text, arg.version) arguments.remove(arg) if isinstance(arg, Collection) and not collection: collection = self.f(u'<a href="{0}">{1}</a>', arg.get_url_path(), arg.name) arguments.remove(arg) if isinstance(arg, Tag) and not tag: if arg.can_reverse(): tag = self.f(u'<a href="{0}">{1}</a>', arg.get_url_path(), arg.tag_text) else: tag = self.f('{0}', arg.tag_text) if isinstance(arg, Group) and not group: group = arg.name arguments.remove(arg) if isinstance(arg, File) and not file_: validation = 'passed' if self.action in ( amo.LOG.UNLISTED_SIGNED.id, amo.LOG.UNLISTED_SIGNED_VALIDATION_FAILED.id): validation = 'ignored' file_ = self.f(u'<a href="{0}">{1}</a> (validation {2})', reverse('files.list', args=[arg.pk]), arg.filename, validation) arguments.remove(arg) if (self.action == amo.LOG.CHANGE_STATUS.id and not isinstance(arg, Addon)): # Unfortunately, this action has been abused in the past and # the non-addon argument could be a string or an int. If it's # an int, we want to retrieve the string and translate it. if isinstance(arg, int) and arg in amo.STATUS_CHOICES_ADDON: status = ugettext(amo.STATUS_CHOICES_ADDON[arg]) else: # It's not an int or not one of the choices, so assume it's # a string or an unknown int we want to display as-is. status = arg arguments.remove(arg) user = user_link(self.user) try: kw = { 'addon': addon, 'rating': rating, 'version': version, 'collection': collection, 'tag': tag, 'user': user, 'group': group, 'file': file_, 'status': status, } return self.f(str(format), *arguments, **kw) except (AttributeError, KeyError, IndexError): log.warning('%d contains garbage data' % (self.id or 0)) return 'Something magical happened.'
def to_string(self, type_=None): log_type = constants.activity.LOG_BY_ID[self.action] if type_ and hasattr(log_type, '%s_format' % type_): format = getattr(log_type, '%s_format' % type_) else: format = log_type.format # We need to copy arguments so we can remove elements from it # while we loop over self.arguments. arguments = copy(self.arguments) addon = None rating = None version = None collection = None tag = None group = None file_ = None for arg in self.arguments: if isinstance(arg, Addon) and not addon: if arg.has_listed_versions(): addon = self.f(u'<a href="{0}">{1}</a>', arg.get_url_path(), arg.name) else: addon = self.f(u'{0}', arg.name) arguments.remove(arg) if isinstance(arg, Rating) and not rating: rating = self.f(u'<a href="{0}">{1}</a>', arg.get_url_path(), ugettext('Review')) arguments.remove(arg) if isinstance(arg, Version) and not version: text = ugettext('Version {0}') if arg.channel == amo.RELEASE_CHANNEL_LISTED: version = self.f(u'<a href="{1}">%s</a>' % text, arg.version, arg.get_url_path()) else: version = self.f(text, arg.version) arguments.remove(arg) if isinstance(arg, Collection) and not collection: collection = self.f(u'<a href="{0}">{1}</a>', arg.get_url_path(), arg.name) arguments.remove(arg) if isinstance(arg, Tag) and not tag: if arg.can_reverse(): tag = self.f(u'<a href="{0}">{1}</a>', arg.get_url_path(), arg.tag_text) else: tag = self.f('{0}', arg.tag_text) if isinstance(arg, Group) and not group: group = arg.name arguments.remove(arg) if isinstance(arg, File) and not file_: validation = 'passed' if self.action in ( amo.LOG.BETA_SIGNED.id, amo.LOG.BETA_SIGNED_VALIDATION_FAILED.id, amo.LOG.UNLISTED_SIGNED.id, amo.LOG.UNLISTED_SIGNED_VALIDATION_FAILED.id): validation = 'ignored' file_ = self.f(u'<a href="{0}">{1}</a> (validation {2})', reverse('files.list', args=[arg.pk]), arg.filename, validation) arguments.remove(arg) user = user_link(self.user) try: kw = { 'addon': addon, 'rating': rating, 'version': version, 'collection': collection, 'tag': tag, 'user': user, 'group': group, 'file': file_, } return self.f(format, *arguments, **kw) except (AttributeError, KeyError, IndexError): log.warning('%d contains garbage data' % (self.id or 0)) return 'Something magical happened.'
def to_string(self, type_=None): log_type = constants.activity.LOG_BY_ID[self.action] if type_ and hasattr(log_type, '%s_format' % type_): format = getattr(log_type, '%s_format' % type_) else: format = log_type.format # We need to copy arguments so we can remove elements from it # while we loop over self.arguments. arguments = copy(self.arguments) addon = None rating = None version = None collection = None tag = None group = None file_ = None status = None for arg in self.arguments: if isinstance(arg, Addon) and not addon: if arg.has_listed_versions(): addon = self.f(u'<a href="{0}">{1}</a>', arg.get_url_path(), arg.name) else: addon = self.f(u'{0}', arg.name) arguments.remove(arg) if isinstance(arg, Rating) and not rating: rating = self.f(u'<a href="{0}">{1}</a>', arg.get_url_path(), ugettext('Review')) arguments.remove(arg) if isinstance(arg, Version) and not version: text = ugettext('Version {0}') if arg.channel == amo.RELEASE_CHANNEL_LISTED: version = self.f(u'<a href="{1}">%s</a>' % text, arg.version, arg.get_url_path()) else: version = self.f(text, arg.version) arguments.remove(arg) if isinstance(arg, Collection) and not collection: collection = self.f(u'<a href="{0}">{1}</a>', arg.get_url_path(), arg.name) arguments.remove(arg) if isinstance(arg, Tag) and not tag: if arg.can_reverse(): tag = self.f(u'<a href="{0}">{1}</a>', arg.get_url_path(), arg.tag_text) else: tag = self.f('{0}', arg.tag_text) if isinstance(arg, Group) and not group: group = arg.name arguments.remove(arg) if isinstance(arg, File) and not file_: validation = 'passed' if self.action in ( amo.LOG.UNLISTED_SIGNED.id, amo.LOG.UNLISTED_SIGNED_VALIDATION_FAILED.id): validation = 'ignored' file_ = self.f(u'<a href="{0}">{1}</a> (validation {2})', reverse('files.list', args=[arg.pk]), arg.filename, validation) arguments.remove(arg) if (self.action == amo.LOG.CHANGE_STATUS.id and not isinstance(arg, Addon)): # Unfortunately, this action has been abused in the past and # the non-addon argument could be a string or an int. If it's # an int, we want to retrieve the string and translate it. # Note that we use STATUS_CHOICES_PERSONA because it's a # superset of STATUS_CHOICES_ADDON, and we need to handle all # statuses. if isinstance(arg, int) and arg in amo.STATUS_CHOICES_PERSONA: status = ugettext(amo.STATUS_CHOICES_PERSONA[arg]) else: # It's not an int or not one of the choices, so assume it's # a string or an unknown int we want to display as-is. status = arg arguments.remove(arg) user = user_link(self.user) try: kw = { 'addon': addon, 'rating': rating, 'version': version, 'collection': collection, 'tag': tag, 'user': user, 'group': group, 'file': file_, 'status': status, } return self.f(format, *arguments, **kw) except (AttributeError, KeyError, IndexError): log.warning('%d contains garbage data' % (self.id or 0)) return 'Something magical happened.'
def to_string(self, type_=None): log_type = constants.activity.LOG_BY_ID[self.action] if type_ and hasattr(log_type, '%s_format' % type_): format = getattr(log_type, '%s_format' % type_) else: format = log_type.format # We need to copy arguments so we can remove elements from it # while we loop over self.arguments. arguments = copy(self.arguments) addon = None rating = None version = None collection = None tag = None group = None file_ = None for arg in self.arguments: if isinstance(arg, Addon) and not addon: if arg.has_listed_versions(): addon = self.f(u'<a href="{0}">{1}</a>', arg.get_url_path(), arg.name) else: addon = self.f(u'{0}', arg.name) arguments.remove(arg) if isinstance(arg, Rating) and not rating: rating = self.f(u'<a href="{0}">{1}</a>', arg.get_url_path(), ugettext('Review')) arguments.remove(arg) if isinstance(arg, Version) and not version: text = ugettext('Version {0}') if arg.channel == amo.RELEASE_CHANNEL_LISTED: version = self.f(u'<a href="{1}">%s</a>' % text, arg.version, arg.get_url_path()) else: version = self.f(text, arg.version) arguments.remove(arg) if isinstance(arg, Collection) and not collection: collection = self.f(u'<a href="{0}">{1}</a>', arg.get_url_path(), arg.name) arguments.remove(arg) if isinstance(arg, Tag) and not tag: if arg.can_reverse(): tag = self.f(u'<a href="{0}">{1}</a>', arg.get_url_path(), arg.tag_text) else: tag = self.f('{0}', arg.tag_text) if isinstance(arg, Group) and not group: group = arg.name arguments.remove(arg) if isinstance(arg, File) and not file_: validation = 'passed' if self.action in ( amo.LOG.BETA_SIGNED.id, amo.LOG.BETA_SIGNED_VALIDATION_FAILED.id, amo.LOG.UNLISTED_SIGNED.id, amo.LOG.UNLISTED_SIGNED_VALIDATION_FAILED.id): validation = 'ignored' file_ = self.f(u'<a href="{0}">{1}</a> (validation {2})', reverse('files.list', args=[arg.pk]), arg.filename, validation) arguments.remove(arg) user = user_link(self.user) try: kw = { 'addon': addon, 'rating': rating, 'version': version, 'collection': collection, 'tag': tag, 'user': user, 'group': group, 'file': file_, } return self.f(format, *arguments, **kw) except (AttributeError, KeyError, IndexError): log.warning('%d contains garbage data' % (self.id or 0)) return 'Something magical happened.'