Skip to content

Commit

Permalink
Merge pull request #1654 from mstriemer/less-anonymous-1518
Browse files Browse the repository at this point in the history
Prompt for username/display name and make anonymous usernames less anonymous
  • Loading branch information
mstriemer committed Feb 10, 2016
2 parents 225b5c7 + e07468c commit 0cddc78
Show file tree
Hide file tree
Showing 4 changed files with 65 additions and 7 deletions.
12 changes: 11 additions & 1 deletion src/olympia/users/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -350,12 +350,19 @@ def name(self):
if self.display_name:
return smart_unicode(self.display_name)
elif self.has_anonymous_username():
return _('Anonymous')
# L10n: {id} will be something like "13ad6a", just a random number
# to differentiate this user from other anonymous users.
return _('Anonymous user {id}').format(
id=self._anonymous_username_id())
else:
return smart_unicode(self.username)

welcome_name = name

def _anonymous_username_id(self):
if self.has_anonymous_username():
return self.username.split('-')[1][:6]

def anonymize_username(self):
"""Set an anonymous username."""
if self.pk:
Expand All @@ -368,6 +375,9 @@ def anonymize_username(self):
def has_anonymous_username(self):
return re.match('^anonymous-[0-9a-f]{32}$', self.username)

def has_anonymous_display_name(self):
return not self.display_name and self.has_anonymous_username()

@amo.cached_property
def reviews(self):
"""All reviews that are not dev replies."""
Expand Down
8 changes: 7 additions & 1 deletion src/olympia/users/templates/users/edit.html
Original file line number Diff line number Diff line change
Expand Up @@ -15,9 +15,15 @@
{% block content %}
{% include 'users/includes/navigation.html' %}
<div id="user_edit" class="primary prettyform grid" role="main">
{% if switch_is_active('fxa-auth') and user.has_anonymous_display_name() %}
<div class="notification-box error anonymous">
<h2>{{ _('Please set your display name') }}</h2>
<p>{{ _('Please set your display name or username to complete the registration process.') }}</p>
</div>
{% endif %}
<form method="post" class="user-input island"
enctype="multipart/form-data">
{% set is_fxa_user = switch_is_active('fxa-auth') and user.source == 'fxa' %}
{% set is_fxa_user = switch_is_active('fxa-auth') and user.fxa_migrated() %}
{{ csrf() }}
<div id="user-edit" class="tab-wrapper">
<div id="user-account" class="tab-panel">
Expand Down
46 changes: 41 additions & 5 deletions src/olympia/users/tests/test_models.py
Original file line number Diff line number Diff line change
Expand Up @@ -67,15 +67,51 @@ def test_welcome_name(self):
eq_(u3.welcome_name, '')

def test_welcome_name_anonymous(self):
user = UserProfile()
user.anonymize_username()
assert user.welcome_name == 'Anonymous'
user = UserProfile(
username='anonymous-bb4f3cbd422e504080e32f2d9bbfcee0')
assert user.welcome_name == 'Anonymous user bb4f3c'

def test_welcome_name_anonymous_with_display(self):
user = UserProfile(
username='anonymous-foo', display_name='John Connor')
user = UserProfile(display_name='John Connor')
user.anonymize_username()
assert user.welcome_name == 'John Connor'

def test_has_anonymous_username_no_names(self):
user = UserProfile(display_name=None)
user.anonymize_username()
assert user.has_anonymous_username()

def test_has_anonymous_username_username_set(self):
user = UserProfile(username='bob', display_name=None)
assert not user.has_anonymous_username()

def test_has_anonymous_username_display_name_set(self):
user = UserProfile(display_name='Bob Bobbertson')
user.anonymize_username()
assert user.has_anonymous_username()

def test_has_anonymous_username_both_names_set(self):
user = UserProfile(username='bob', display_name='Bob Bobbertson')
assert not user.has_anonymous_username()

def test_has_anonymous_display_name_no_names(self):
user = UserProfile(display_name=None)
user.anonymize_username()
assert user.has_anonymous_display_name()

def test_has_anonymous_display_name_username_set(self):
user = UserProfile(username='bob', display_name=None)
assert not user.has_anonymous_display_name()

def test_has_anonymous_display_name_display_name_set(self):
user = UserProfile(display_name='Bob Bobbertson')
user.anonymize_username()
assert not user.has_anonymous_display_name()

def test_has_anonymous_display_name_both_names_set(self):
user = UserProfile(username='bob', display_name='Bob Bobbertson')
assert not user.has_anonymous_display_name()

def test_add_admin_powers(self):
u = UserProfile.objects.get(username='jbalogh')

Expand Down
6 changes: 6 additions & 0 deletions static/css/impala/users.less
Original file line number Diff line number Diff line change
Expand Up @@ -360,3 +360,9 @@ img.icon {
width: 100px;
}
}

.notification-box.anonymous {
p {
margin-bottom: 0;
}
}

0 comments on commit 0cddc78

Please sign in to comment.