Create class after regsitration

This commit is contained in:
Christian Cueni 2019-10-10 11:06:54 +02:00
parent 0b48607398
commit 80fce17efb
8 changed files with 96 additions and 8 deletions

View File

@ -0,0 +1,18 @@
# Generated by Django 2.0.6 on 2019-10-10 09:05
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('registration', '0001_initial'),
]
operations = [
migrations.AlterField(
model_name='licensetype',
name='key',
field=models.CharField(max_length=128, unique=True),
),
]

View File

@ -18,7 +18,7 @@ class LicenseType(models.Model):
name = models.CharField(_('License name'), max_length=255, blank=False, null=False)
for_role = models.ForeignKey(Role, blank=False, null=False, on_delete=models.CASCADE)
key = models.CharField(max_length=128, blank=False, null=False)
key = models.CharField(max_length=128, blank=False, null=False, unique=True)
active = models.BooleanField(_('License active'), default=False)
description = models.TextField(_('Description'), default="")

View File

@ -8,12 +8,11 @@
# Created on 2019-10-08
# @author: chrigu <christian.cueni@iterativ.ch>
import graphene
from django.conf import settings
from graphene import relay
from registration.models import License
from registration.serializers import RegistrationSerializer
from users.models import User, Role, UserRole
from users.models import User, Role, UserRole, SchoolClass
from users.mutations import UpdateError, FieldError
@ -51,7 +50,9 @@ class Registration(relay.ClientIDMutation):
if sb_license.license_type.is_teacher_license():
teacher_role = Role.objects.get(key=Role.objects.TEACHER_KEY)
UserRole.objects.get_or_create(user=user, role=teacher_role)
# create class
default_class_name = SchoolClass.generate_default_group_name()
default_class = SchoolClass.objects.create(name=default_class_name)
user.school_classes.add(default_class)
else:
student_role = Role.objects.get(key=Role.objects.STUDENT_KEY)
UserRole.objects.get_or_create(user=user, role=student_role)

View File

@ -15,10 +15,10 @@ from api.schema import schema
from registration.factories import LicenseTypeFactory, LicenseFactory
from registration.models import License
from users.managers import RoleManager
from users.models import Role, User, UserRole
from users.models import Role, User, UserRole, SchoolClass
class PasswordResetTests(TestCase):
class RegistrationTests(TestCase):
def setUp(self):
self.teacher_role = Role.objects.create(key=Role.objects.TEACHER_KEY, name="Teacher Role")
@ -73,9 +73,15 @@ class PasswordResetTests(TestCase):
def test_user_can_register_as_teacher(self):
self._assert_user_registration(0, self.email, RoleManager.TEACHER_KEY)
school_classes = SchoolClass.objects.filter(name__startswith='Meine Gruppe')
self.assertEqual(len(school_classes), 0)
result = self.make_register_mutation(self.first_name, self.last_name, self.email, self.teacher_license_type.key)
self.assertTrue(result.get('data').get('registration').get('success'))
self._assert_user_registration(1, self.email, RoleManager.TEACHER_KEY)
school_classes = SchoolClass.objects.filter(name__startswith='Meine Gruppe')
self.assertEqual(len(school_classes), 1)
user = User.objects.get(email=self.email)
self.assertTrue(school_classes[0].is_user_in_schoolclass(user))
def test_user_can_register_as_student(self):
self._assert_user_registration(0, self.email, RoleManager.STUDENT_KEY)

View File

@ -89,4 +89,3 @@ class UserManager(DjangoUserManager):
user.set_password(self.model.objects.make_random_password())
user.save()
return user

View File

@ -1,3 +1,5 @@
import re
from django.contrib.auth import get_user_model
from django.contrib.auth.models import AbstractUser, Permission
from django.core.exceptions import ObjectDoesNotExist
@ -72,6 +74,25 @@ class SchoolClass(models.Model):
def __str__(self):
return 'SchoolClass {}-{}'.format(self.id, self.name)
@classmethod
def generate_default_group_name(cls):
prefix = 'Meine Gruppe'
prefix_regex = r'Meine Gruppe (\d+)'
initial_default_group = '{} 1'.format(prefix)
my_group_filter = cls.objects.filter(name__startswith=prefix).order_by('-name')
if len(my_group_filter) == 0:
return initial_default_group
match = re.search(prefix_regex, my_group_filter[0].name)
if not match:
return initial_default_group
index = int(match.group(1))
return '{} {}'.format(prefix, index + 1)
def is_user_in_schoolclass(self, user):
return user.is_superuser or user.school_classes.filter(pk=self.id).count() > 0

View File

@ -17,7 +17,7 @@ from django.contrib.auth import authenticate
from users.factories import SchoolClassFactory
class PasswordUpdate(TestCase):
class MySchoolClasses(TestCase):
def setUp(self):
self.user = UserFactory(username='aschi')
self.another_user = UserFactory(username='pesche')

View File

@ -0,0 +1,43 @@
# -*- coding: utf-8 -*-
#
# ITerativ GmbH
# http://www.iterativ.ch/
#
# Copyright (c) 2019 ITerativ GmbH. All rights reserved.
#
# Created on 2019-10-10
# @author: chrigu <christian.cueni@iterativ.ch>
from django.conf import settings
# -*- coding: utf-8 -*-
#
# ITerativ GmbH
# http://www.iterativ.ch/
#
# Copyright (c) 2019 ITerativ GmbH. All rights reserved.
#
# Created on 2019-04-09
# @author: chrigu <christian.cueni@iterativ.ch>
from django.test import TestCase
from users.models import SchoolClass
class SchoolClasses(TestCase):
def setUp(self):
self.prefix = 'Meine Gruppe'
def test_default_class_name_initial(self):
class_name = SchoolClass.generate_default_group_name()
self.assertEqual('{} 1'.format(self.prefix), class_name)
def test_default_class_name_initial_with_similar_existing(self):
SchoolClass.objects.create(name='{} abc212'.format('Meine Gruppe'))
class_name = SchoolClass.generate_default_group_name()
self.assertEqual('{} 1'.format(self.prefix), class_name)
def test_default_class_name_if_existing(self):
SchoolClass.objects.create(name='{} 1'.format('Meine Gruppe'))
SchoolClass.objects.create(name='{} 10'.format('Meine Gruppe'))
class_name = SchoolClass.generate_default_group_name()
self.assertEqual('{} 11'.format(self.prefix), class_name)