Source code for fpiweb.tests.utility



from django.contrib.auth.models import Permission, User
from django.test import Client
from django.views import View

from fpiweb.models import Profile

default_password = 'abc123'


[docs]def create_user(first_name, last_name): first_name = first_name.lower() last_name = last_name.lower() try: user = User.objects.get( first_name__iexact=first_name, last_name__iexact=last_name, ) except User.DoesNotExist: user = User.objects.create_user( first_name[0] + last_name, f"{first_name}.{last_name}", default_password, # Added this line 6/22/20 per conversation with Travis # Required to run Selenium tests is_superuser=True, ) Profile.objects.get_or_create( user=user, defaults={ 'title': 'User', } ) return user
[docs]def logged_in_user(first_name: str, last_name: str, view=None) -> Client: user = create_user(first_name, last_name) if view is not None: grant_required_permissions(user, view) client = Client() client.force_login(user) return client
[docs]def grant_required_permissions(user:User, view:View) -> None: permissions = getattr(view, 'permission_required', []) for permission in permissions: pieces = permission.split('.') if len(pieces) != 2: raise RuntimeError(f"Cannot split {permission} into 2 pieces") app_label, codename = pieces print(f"codename={codename}") print( Permission.objects.filter( content_type__app_label=app_label, content_type__model='pallet', ).values_list( 'content_type__app_label', 'codename', ) ) try: permission = Permission.objects.get( content_type__app_label__iexact=app_label, codename__iexact=codename, ) except Permission.DoesNotExist: raise RuntimeError( "Permission app_label={} codename={} not found".format( app_label, codename, ) ) user.user_permissions.add(permission)