Skip to content

Commit

Permalink
Merge 9950d75 into 813df5e
Browse files Browse the repository at this point in the history
  • Loading branch information
MyPyDavid committed Apr 13, 2023
2 parents 813df5e + 9950d75 commit 577e045
Show file tree
Hide file tree
Showing 6 changed files with 475 additions and 154 deletions.
4 changes: 3 additions & 1 deletion rdmo/accounts/forms.py
Original file line number Diff line number Diff line change
Expand Up @@ -92,7 +92,9 @@ class RemoveForm(forms.Form):
def __init__(self, *args, **kwargs):
self.request = kwargs.pop('request')
kwargs.setdefault('label_suffix', '')
super(RemoveForm, self).__init__(*args, **kwargs)
super().__init__(*args, **kwargs)
if not self.request.user.has_usable_password():
self.fields.pop('password')

email = forms.CharField(widget=forms.TextInput(attrs={'required': 'false'}))
email.label = _('E-mail')
Expand Down
110 changes: 110 additions & 0 deletions rdmo/accounts/tests/test_utils.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,110 @@
import pytest
from django.contrib.auth import get_user_model
from django.contrib.auth.models import AnonymousUser

from rdmo.accounts.models import Role
from rdmo.accounts.utils import get_full_name, is_site_manager, delete_user, get_user_from_db_or_none


normal_users = (
('user', 'user', 'user@example.com'),
)

site_managers = (
('site', 'site', 'site@example.com'),
)

users = (*normal_users, *site_managers)


@pytest.mark.parametrize('username,password,email', users)
def test_get_full_name(db, username, password, email):
user = get_user_model().objects.get(username=username, email=email)
assert get_full_name(user) == user.first_name + ' ' + user.last_name


@pytest.mark.parametrize('username,password,email', users)
def test_get_full_name_returns_username(db, username, password, email):
user = get_user_model().objects.get(username=username, email=email)
user.first_name = ''
user.save()
assert get_full_name(user) == username


def test_is_site_manager_returns_true_for_superuser(admin_user):
assert is_site_manager(admin_user) is True


def test_is_site_manager_returns_false_for_not_authenticated_user():
assert is_site_manager(AnonymousUser()) is False


@pytest.mark.parametrize('username,password,email', site_managers)
def test_is_site_manager_returns_true_for_site_managers(db, client, username, password, email):
client.login(username=username, password=password)
user = get_user_model().objects.get(username=username, email=email)
assert is_site_manager(user) is True


@pytest.mark.parametrize('username,password,email', site_managers)
def test_is_site_manager_returns_false_when_role_doesnotexist_(db, client, username, password, email):
client.login(username=username, password=password)
Role.objects.all().delete()
user = get_user_model().objects.get(username=username, email=email)
assert is_site_manager(user) is False


@pytest.mark.parametrize('username,password,email', users)
def test_delete_user_returns_true(db, username, password, email):
user = get_user_model().objects.get(username=username, email=email)
assert delete_user(user=user, email=email, password=password) is True


@pytest.mark.parametrize('username,password,email', users)
def test_delete_user_returns_false_when_user_or_email_is_none(db, username, password, email):
user = get_user_model().objects.get(username=username, email=email)
for test_user, test_email in ((user, None), (None, email), (None, None)):
assert delete_user(user=test_user, email=test_email) is False


@pytest.mark.parametrize('username,password,email', users)
def test_delete_user_returns_false_when_user_is_not_equal_to_db_user(db, username, password, email):
user = get_user_model().objects.get(username=username, email=email)
user.pk += 1
assert delete_user(user=user, email=email, password=None) is False



@pytest.mark.parametrize('username,password,email', users)
def test_delete_user_returns_false_when_user_with_usable_password_gives_none_for_password(db, username, password, email):
user = get_user_model().objects.get(username=username, email=email)
assert delete_user(user=user, email=email, password=None) is False


@pytest.mark.parametrize('username,password,email', users)
def test_delete_user_returns_false_when_delete_user_raises_an_exception(db, username, password, email):
user = get_user_model().objects.get(username=username, email=email)
def _delete(): raise ValueError
user.delete = _delete
assert delete_user(user=user, email=email, password=password) is False


@pytest.mark.parametrize('username,password,email', users)
def test_delete_user_returns_false_when_delete_is_called_for_user_without_usable_password_and_raises_an_exception(db, username, password, email):
user = get_user_model().objects.get(username=username, email=email)
user.set_unusable_password()
def _delete(): raise ValueError
user.delete = _delete
assert delete_user(user=user, email=email) is False


@pytest.mark.parametrize('username,password,email', users)
def test_get_user_from_db_or_none_returns_user(db, username, password, email):
user = get_user_model().objects.get(username=username, email=email)
assert get_user_from_db_or_none(username, email) == user


@pytest.mark.parametrize('username,password,email', users)
def test_get_user_from_db_or_none_returns_none_when_wrong_input_was_given(db, username, password, email):
for test_username, test_email in ((username, 'none@example.com'), ('none', email), (None, None)):
assert get_user_from_db_or_none(test_username, test_email) is None

0 comments on commit 577e045

Please sign in to comment.