Source code for tests.management.commands.create_test_users_from_session_file
import re
from random import randint
from django.core.exceptions import SuspiciousOperation
from django.core.management.base import BaseCommand
from accounts.models import User
from cobalt.settings import COBALT_HOSTNAME
from organisations.models import Organisation, MembershipType, MemberMembershipType
from payments.views.core import update_account
[docs]
def make_data(system_number, first_name, last_name, club, membership):
"""create user and associated records"""
# create user
user = User.objects.filter(system_number=system_number).first()
if not user:
user = User.objects.create_user(
username=system_number,
email="success@simulator.amazonses.com",
password="F1shcake",
first_name=first_name,
last_name=last_name,
system_number=system_number,
about="",
)
user.save()
print(f"Created used - {user}")
else:
print(f"User already existed - {user}")
# Set balance
amount = randint(0, 100)
update_account(
member=user,
amount=amount,
description="Set up balance",
organisation=club,
payment_type="Miscellaneous",
)
# Add most but not all as members
if randint(0, 10) != 5:
MemberMembershipType(
membership_type=membership,
system_number=system_number,
last_modified_by=user,
).save()
# Set some to be auto top up (won't actually work but will look they are set up)
if randint(0, 10) > 3:
user.stripe_auto_confirmed = True
user.save()
[docs]
class Command(BaseCommand):
"""
Reads a compscore user file and creates the users, so we can test club_sessions
"""
[docs]
def add_arguments(self, parser):
parser.add_argument("cs2_file", type=str)
parser.add_argument(
"club_pk",
type=int,
help="primary key for club you are testing with. Used to add members.",
)
[docs]
def handle(self, *args, **options):
if COBALT_HOSTNAME in ["myabf.com.au", "www.myabf.com.au"]:
raise SuspiciousOperation(
"Not for use in production. This cannot be used in a production system."
)
cs2_file = options["cs2_file"]
club_pk = options["club_pk"]
club = Organisation.objects.get(pk=club_pk)
membership = MembershipType.objects.filter(organisation=club).first()
with open(cs2_file) as file:
for line in file:
d = re.match(
r"(\d+)\s+(\w+)\s+(\w+)\s+/\s+(\w+)\s+(\w+)\s+\((\d+)\s+/\s+(\d+)",
line,
)
if d:
# Skip some random ones
if randint(0, 10) == 5:
continue
first_name_1 = d.groups()[1].capitalize()
last_name_1 = d.groups()[2].capitalize()
first_name_2 = d.groups()[3].capitalize()
last_name_2 = d.groups()[4].capitalize()
abf_1 = d.groups()[5]
abf_2 = d.groups()[6]
make_data(abf_1, first_name_1, last_name_1, club, membership)
make_data(abf_2, first_name_2, last_name_2, club, membership)