From 8938ec79cf0234189a8fbcc2c259a96330350e0f Mon Sep 17 00:00:00 2001 From: Ramon Wenger Date: Tue, 30 May 2023 21:41:30 +0200 Subject: [PATCH] Rewrite a test to use pytest syntax --- server/conftest.py | 6 + server/core/env_utils.py | 8 +- server/users/serializers.py | 25 ++-- server/users/tests/test_school_classes.py | 154 +++++++++++----------- 4 files changed, 97 insertions(+), 96 deletions(-) create mode 100644 server/conftest.py diff --git a/server/conftest.py b/server/conftest.py new file mode 100644 index 00000000..633ca2e0 --- /dev/null +++ b/server/conftest.py @@ -0,0 +1,6 @@ +# import pytest +# +# +# @pytest.fixture(scope="session") +# def prefix(): +# return "Meine Klasse" diff --git a/server/core/env_utils.py b/server/core/env_utils.py index cda5ad4d..7aa9dff9 100644 --- a/server/core/env_utils.py +++ b/server/core/env_utils.py @@ -1,6 +1,6 @@ import re -regex = re.compile('^<(?P.*)>\s*(?P.*@.*)') +regex = re.compile(r"^<(?P.*)>\s*(?P.*@.*)") def parse_emails(emails): @@ -15,7 +15,7 @@ def parse_emails(emails): return [] email_tuples = [] - for email in emails.split(','): + for email in emails.split(","): r = regex.match(email.strip()) if r: email_tuples.append(r.groups()) @@ -37,8 +37,8 @@ def bool_value(value, default=False): if not value: return default - true_values = ('yes', 'y', 'true', '1') - false_values = ('no', 'n', 'false', '0', '') + true_values = ("yes", "y", "true", "1") + false_values = ("no", "n", "false", "0", "") normalized_value = value.strip().lower() if normalized_value in true_values: return True diff --git a/server/users/serializers.py b/server/users/serializers.py index f0cd5573..b19be114 100644 --- a/server/users/serializers.py +++ b/server/users/serializers.py @@ -24,31 +24,32 @@ def validate_old_password(old_password, username): if user.check_password(old_password): return old_password else: - raise serializers.ValidationError(_(u'Das eingegebene Passwort ist falsch')) + raise serializers.ValidationError(_("Das eingegebene Passwort ist falsch")) def validate_old_new_password(value): - if value.get('old_password') == '' and value.get('new_password') == '': + if value.get("old_password") == "" and value.get("new_password") == "": return value - elif value.get('old_password') == '' and value.get('new_password') != '': - raise serializers.ValidationError(_(u'Das neue Passwort muss gesetzt werden')) - elif value.get('old_password') != '' and value.get('new_password') == '': - raise serializers.ValidationError(_(u'Das alte Passwort muss angegeben werden')) + elif value.get("old_password") == "" and value.get("new_password") != "": + raise serializers.ValidationError(_("Das neue Passwort muss gesetzt werden")) + elif value.get("old_password") != "" and value.get("new_password") == "": + raise serializers.ValidationError(_("Das alte Passwort muss angegeben werden")) return value def validate_strong_password(password): - - has_number = re.search('\d', password) - has_upper = re.search('[A-Z]', password) - has_lower = re.search('[a-z]', password) - has_special = re.search('[!@#$%^&*(),.?":{}|<>\+]', password) + has_number = re.search(r"\d", password) + has_upper = re.search(r"[A-Z]", password) + has_lower = re.search(r"[a-z]", password) + has_special = re.search(r'[!@#$%^&*(),.?":{}|<>\+]', password) if has_number and has_upper and has_lower and has_special: return password else: - raise serializers.ValidationError(_(u'Das Passwort muss Grossbuchstaben, Zahlen und Sonderzeichen beinhalten')) + raise serializers.ValidationError( + _("Das Passwort muss Grossbuchstaben, Zahlen und Sonderzeichen beinhalten") + ) class PasswordSerialzer(serializers.Serializer): diff --git a/server/users/tests/test_school_classes.py b/server/users/tests/test_school_classes.py index 1dad68e0..49b11d18 100644 --- a/server/users/tests/test_school_classes.py +++ b/server/users/tests/test_school_classes.py @@ -1,3 +1,4 @@ +import pytest from django.db import transaction from django.test import TestCase from graphene import Context @@ -11,57 +12,61 @@ from core.tests.base_test import SkillboxTestCase from users.models import SchoolClass, User from users.services import create_users -UPDATE_SCHOOL_CLASS_MUTATION = get_graphql_mutation('updateSchoolClass.gql') +UPDATE_SCHOOL_CLASS_MUTATION = get_graphql_mutation("updateSchoolClass.gql") -class SchoolClassesTest(TestCase): +pytestmark = pytest.mark.django_db - def setUp(self): - self.prefix = 'Meine Klasse' - def test_default_class_name_initial(self): - class_name = SchoolClass.generate_default_group_name() - self.assertEqual('{} 1'.format(self.prefix), class_name) +# @pytest.fixture +# def prefix(): +# return "Meine Klasse" - def test_default_class_name_initial_with_similar_existing(self): - SchoolClass.objects.create(name='{} abc212'.format(self.prefix)) - 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(self.prefix)) - SchoolClass.objects.create(name='{} 10'.format(self.prefix)) - class_name = SchoolClass.generate_default_group_name() - self.assertEqual('{} 11'.format(self.prefix), class_name) +def test_default_class_name_initial(prefix): + class_name = SchoolClass.generate_default_group_name() + assert "{} 1".format(prefix) == class_name - def test_default_class_name_with_user(self): - user = UserFactory(username='hansli') - class_name = SchoolClass.generate_default_group_name(user=user) - self.assertEqual(f'{self.prefix} {user.pk}', class_name) + +def test_default_class_name_initial_with_similar_existing(prefix): + SchoolClass.objects.create(name="{} abc212".format(prefix)) + class_name = SchoolClass.generate_default_group_name() + assert "{} 1".format(prefix) == class_name + + +def test_default_class_name_if_existing(prefix): + SchoolClass.objects.create(name="{} 1".format(prefix)) + SchoolClass.objects.create(name="{} 10".format(prefix)) + class_name = SchoolClass.generate_default_group_name() + assert "{} 11".format(prefix) == class_name + + +def test_default_class_name_with_user(prefix): + user = UserFactory(username="hansli") + class_name = SchoolClass.generate_default_group_name(user=user) + assert f"{prefix} {user.pk}" == class_name class ModifySchoolClassTest(SkillboxTestCase): def setUp(self): create_users() - self.teacher = User.objects.get(username='teacher') - self.student = User.objects.get(username='student1') + self.teacher = User.objects.get(username="teacher") + self.student = User.objects.get(username="student1") self.client = self.get_client(user=self.teacher) self.student_client = self.get_client(user=self.student) def test_update_school_class(self): - class_name = 'The Colbert Show' + class_name = "The Colbert Show" - school_class = SchoolClass.objects.get(name='skillbox') - self.assertEqual(school_class.name, 'skillbox') - id = to_global_id('SchoolClassNode', school_class.id) + school_class = SchoolClass.objects.get(name="skillbox") + self.assertEqual(school_class.name, "skillbox") + id = to_global_id("SchoolClassNode", school_class.id) - result = self.client.execute(UPDATE_SCHOOL_CLASS_MUTATION, variables={ - 'input': { - 'id': id, - 'name': class_name - } - }) + result = self.client.execute( + UPDATE_SCHOOL_CLASS_MUTATION, + variables={"input": {"id": id, "name": class_name}}, + ) self.assertIsNone(result.errors) school_class = get_object(SchoolClass, id) @@ -69,48 +74,41 @@ class ModifySchoolClassTest(SkillboxTestCase): def test_update_school_class_not_in_class_fails(self): client = self.get_client() - teacher = TeacherFactory(username='conan') + teacher = TeacherFactory(username="conan") context = Context(user=teacher) - school_class = SchoolClass.objects.get(name='skillbox') - self.assertEqual(school_class.name, 'skillbox') - id = to_global_id('SchoolClassNode', school_class.id) - variables = { - 'input': { - 'id': id, - 'name': 'Nein' - } - } - result = client.execute(UPDATE_SCHOOL_CLASS_MUTATION, variables=variables, context=context) + school_class = SchoolClass.objects.get(name="skillbox") + self.assertEqual(school_class.name, "skillbox") + id = to_global_id("SchoolClassNode", school_class.id) + variables = {"input": {"id": id, "name": "Nein"}} + result = client.execute( + UPDATE_SCHOOL_CLASS_MUTATION, variables=variables, context=context + ) self.assertIsNone(result.errors) def test_update_school_class_fail(self): - class_name = 'Nanana' + class_name = "Nanana" - school_class = SchoolClass.objects.get(name='skillbox') - self.assertEqual(school_class.name, 'skillbox') - id = to_global_id('SchoolClassNode', school_class.id) + school_class = SchoolClass.objects.get(name="skillbox") + self.assertEqual(school_class.name, "skillbox") + id = to_global_id("SchoolClassNode", school_class.id) - result = self.student_client.execute(UPDATE_SCHOOL_CLASS_MUTATION, variables={ - 'input': { - 'id': id, - 'name': class_name - } - }) + result = self.student_client.execute( + UPDATE_SCHOOL_CLASS_MUTATION, + variables={"input": {"id": id, "name": class_name}}, + ) self.assertIsNotNone(result.errors) def test_create_school_class(self): self.assertEqual(SchoolClass.objects.count(), 2) - class_name = 'Moordale' - mutation = get_graphql_mutation('createClass.gql') - query_result = self.client.execute(mutation, variables={ - 'input': { - 'name': class_name - } - }) + class_name = "Moordale" + mutation = get_graphql_mutation("createClass.gql") + query_result = self.client.execute( + mutation, variables={"input": {"name": class_name}} + ) self.assertIsNone(query_result.errors) - result = query_result.data.get('createSchoolClass').get('result') - self.assertEqual(result.get('__typename'), 'SchoolClassNode') - id = result.get('id') + result = query_result.data.get("createSchoolClass").get("result") + self.assertEqual(result.get("__typename"), "SchoolClassNode") + id = result.get("id") self.assertEqual(SchoolClass.objects.count(), 3) school_class = get_object(SchoolClass, id) self.assertEqual(school_class.name, class_name) @@ -119,29 +117,25 @@ class ModifySchoolClassTest(SkillboxTestCase): def test_create_school_class_duplicate_name_fail(self): self.assertEqual(SchoolClass.objects.count(), 2) - class_name = 'skillbox' - mutation = get_graphql_mutation('createClass.gql') + class_name = "skillbox" + mutation = get_graphql_mutation("createClass.gql") # if we don't do this, django wraps the whole test in an atomic operation, # and we trigger an exception so the query later in the test would fail with transaction.atomic(): - query_result = self.client.execute(mutation, variables={ - 'input': { - 'name': class_name - } - }) + query_result = self.client.execute( + mutation, variables={"input": {"name": class_name}} + ) self.assertIsNone(query_result.errors) - result = query_result.data.get('createSchoolClass').get('result') - self.assertEqual(result.get('__typename'), 'DuplicateName') - reason = result.get('reason') - self.assertEqual(reason, 'Dieser Name wird bereits verwendet.') + result = query_result.data.get("createSchoolClass").get("result") + self.assertEqual(result.get("__typename"), "DuplicateName") + reason = result.get("reason") + self.assertEqual(reason, "Dieser Name wird bereits verwendet.") self.assertEqual(SchoolClass.objects.count(), 2) def test_create_school_class_fail_permission(self): self.assertEqual(SchoolClass.objects.count(), 2) - mutation = get_graphql_mutation('createClass.gql') - result = self.student_client.execute(mutation, variables={ - 'input': { - 'name': 'No School' - } - }) + mutation = get_graphql_mutation("createClass.gql") + result = self.student_client.execute( + mutation, variables={"input": {"name": "No School"}} + ) self.assertIsNotNone(result.errors)