mirror of
https://github.com/ae-utbm/sith.git
synced 2025-01-04 22:21:19 +00:00
Give the public group to newly created users
This commit is contained in:
parent
7bff28ee72
commit
f7ba1d93fc
@ -5,6 +5,7 @@ from typing import Iterator
|
|||||||
|
|
||||||
from dateutil.relativedelta import relativedelta
|
from dateutil.relativedelta import relativedelta
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
|
from django.contrib.auth.hashers import make_password
|
||||||
from django.core.management.base import BaseCommand
|
from django.core.management.base import BaseCommand
|
||||||
from django.db.models import Count, Exists, Min, OuterRef, Subquery
|
from django.db.models import Count, Exists, Min, OuterRef, Subquery
|
||||||
from django.utils.timezone import localdate, make_aware, now
|
from django.utils.timezone import localdate, make_aware, now
|
||||||
@ -38,23 +39,7 @@ class Command(BaseCommand):
|
|||||||
raise Exception("Never call this command in prod. Never.")
|
raise Exception("Never call this command in prod. Never.")
|
||||||
|
|
||||||
self.stdout.write("Creating users...")
|
self.stdout.write("Creating users...")
|
||||||
users = [
|
users = self.create_users()
|
||||||
User(
|
|
||||||
username=self.faker.user_name(),
|
|
||||||
first_name=self.faker.first_name(),
|
|
||||||
last_name=self.faker.last_name(),
|
|
||||||
date_of_birth=self.faker.date_of_birth(minimum_age=15, maximum_age=25),
|
|
||||||
email=self.faker.email(),
|
|
||||||
phone=self.faker.phone_number(),
|
|
||||||
address=self.faker.address(),
|
|
||||||
)
|
|
||||||
for _ in range(600)
|
|
||||||
]
|
|
||||||
# there may a duplicate or two
|
|
||||||
# Not a problem, we will just have 599 users instead of 600
|
|
||||||
User.objects.bulk_create(users, ignore_conflicts=True)
|
|
||||||
users = list(User.objects.order_by("-id")[: len(users)])
|
|
||||||
|
|
||||||
subscribers = random.sample(users, k=int(0.8 * len(users)))
|
subscribers = random.sample(users, k=int(0.8 * len(users)))
|
||||||
self.stdout.write("Creating subscriptions...")
|
self.stdout.write("Creating subscriptions...")
|
||||||
self.create_subscriptions(subscribers)
|
self.create_subscriptions(subscribers)
|
||||||
@ -102,6 +87,29 @@ class Command(BaseCommand):
|
|||||||
|
|
||||||
self.stdout.write("Done")
|
self.stdout.write("Done")
|
||||||
|
|
||||||
|
def create_users(self) -> list[User]:
|
||||||
|
password = make_password("plop")
|
||||||
|
users = [
|
||||||
|
User(
|
||||||
|
username=self.faker.user_name(),
|
||||||
|
first_name=self.faker.first_name(),
|
||||||
|
last_name=self.faker.last_name(),
|
||||||
|
date_of_birth=self.faker.date_of_birth(minimum_age=15, maximum_age=25),
|
||||||
|
email=self.faker.email(),
|
||||||
|
phone=self.faker.phone_number(),
|
||||||
|
address=self.faker.address(),
|
||||||
|
password=password,
|
||||||
|
)
|
||||||
|
for _ in range(600)
|
||||||
|
]
|
||||||
|
# there may a duplicate or two
|
||||||
|
# Not a problem, we will just have 599 users instead of 600
|
||||||
|
users = User.objects.bulk_create(users, ignore_conflicts=True)
|
||||||
|
users = list(User.objects.order_by("-id")[: len(users)])
|
||||||
|
public_group = Group.objects.get(pk=settings.SITH_GROUP_PUBLIC_ID)
|
||||||
|
public_group.users.add(*users)
|
||||||
|
return users
|
||||||
|
|
||||||
def create_subscriptions(self, users: list[User]):
|
def create_subscriptions(self, users: list[User]):
|
||||||
def prepare_subscription(_user: User, start_date: date) -> Subscription:
|
def prepare_subscription(_user: User, start_date: date) -> Subscription:
|
||||||
payment_method = random.choice(settings.SITH_SUBSCRIPTION_PAYMENT_METHOD)[0]
|
payment_method = random.choice(settings.SITH_SUBSCRIPTION_PAYMENT_METHOD)[0]
|
||||||
|
@ -370,12 +370,16 @@ class User(AbstractUser):
|
|||||||
return self.get_display_name()
|
return self.get_display_name()
|
||||||
|
|
||||||
def save(self, *args, **kwargs):
|
def save(self, *args, **kwargs):
|
||||||
|
adding = self._state.adding
|
||||||
with transaction.atomic():
|
with transaction.atomic():
|
||||||
if self.id:
|
if not adding:
|
||||||
old = User.objects.filter(id=self.id).first()
|
old = User.objects.filter(id=self.id).first()
|
||||||
if old and old.username != self.username:
|
if old and old.username != self.username:
|
||||||
self._change_username(self.username)
|
self._change_username(self.username)
|
||||||
super().save(*args, **kwargs)
|
super().save(*args, **kwargs)
|
||||||
|
if adding:
|
||||||
|
# All users are in the public group.
|
||||||
|
self.groups.add(settings.SITH_GROUP_PUBLIC_ID)
|
||||||
|
|
||||||
def get_absolute_url(self) -> str:
|
def get_absolute_url(self) -> str:
|
||||||
return reverse("core:user_profile", kwargs={"user_id": self.pk})
|
return reverse("core:user_profile", kwargs={"user_id": self.pk})
|
||||||
@ -430,8 +434,6 @@ class User(AbstractUser):
|
|||||||
raise ValueError("You must either provide the id or the name of the group")
|
raise ValueError("You must either provide the id or the name of the group")
|
||||||
if group is None:
|
if group is None:
|
||||||
return False
|
return False
|
||||||
if group.id == settings.SITH_GROUP_PUBLIC_ID:
|
|
||||||
return True
|
|
||||||
if group.id == settings.SITH_GROUP_SUBSCRIBERS_ID:
|
if group.id == settings.SITH_GROUP_SUBSCRIBERS_ID:
|
||||||
return self.is_subscribed
|
return self.is_subscribed
|
||||||
if group.id == settings.SITH_GROUP_ROOT_ID:
|
if group.id == settings.SITH_GROUP_ROOT_ID:
|
||||||
|
@ -187,3 +187,11 @@ def test_generate_username(first_name: str, last_name: str, expected: str):
|
|||||||
new_user = User(first_name=first_name, last_name=last_name, email="a@example.com")
|
new_user = User(first_name=first_name, last_name=last_name, email="a@example.com")
|
||||||
new_user.generate_username()
|
new_user.generate_username()
|
||||||
assert new_user.username == expected
|
assert new_user.username == expected
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.django_db
|
||||||
|
def test_user_added_to_public_group():
|
||||||
|
"""Test that newly created users are added to the public group"""
|
||||||
|
user = baker.make(User)
|
||||||
|
assert user.groups.filter(pk=settings.SITH_GROUP_PUBLIC_ID).exists()
|
||||||
|
assert user.is_in_group(pk=settings.SITH_GROUP_PUBLIC_ID)
|
||||||
|
@ -14,6 +14,7 @@
|
|||||||
#
|
#
|
||||||
from datetime import timedelta
|
from datetime import timedelta
|
||||||
|
|
||||||
|
from django.conf import settings
|
||||||
from django.test import TestCase
|
from django.test import TestCase
|
||||||
from django.urls import reverse
|
from django.urls import reverse
|
||||||
from django.utils.timezone import localtime, now
|
from django.utils.timezone import localtime, now
|
||||||
@ -71,10 +72,12 @@ class TestMergeUser(TestCase):
|
|||||||
assert self.to_keep.nick_name == "B'ian"
|
assert self.to_keep.nick_name == "B'ian"
|
||||||
assert self.to_keep.address == "Jerusalem"
|
assert self.to_keep.address == "Jerusalem"
|
||||||
assert self.to_keep.parent_address == "Rome"
|
assert self.to_keep.parent_address == "Rome"
|
||||||
assert self.to_keep.groups.count() == 3
|
assert set(self.to_keep.groups.values_list("id", flat=True)) == {
|
||||||
groups = sorted(self.to_keep.groups.all(), key=lambda i: i.id)
|
settings.SITH_GROUP_PUBLIC_ID,
|
||||||
expected = sorted([subscribers, mde_admin, sas_admin], key=lambda i: i.id)
|
subscribers.id,
|
||||||
assert groups == expected
|
mde_admin.id,
|
||||||
|
sas_admin.id,
|
||||||
|
}
|
||||||
|
|
||||||
def test_both_subscribers_and_with_account(self):
|
def test_both_subscribers_and_with_account(self):
|
||||||
Customer(user=self.to_keep, account_id="11000l", amount=0).save()
|
Customer(user=self.to_keep, account_id="11000l", amount=0).save()
|
||||||
|
Loading…
Reference in New Issue
Block a user