From b94296b39d9f8766d4cbeac31427cdf425f35eac Mon Sep 17 00:00:00 2001 From: SKairinos Date: Thu, 9 Jan 2025 17:34:01 +0000 Subject: [PATCH 1/3] fix: cerate school --- src/api/serializers/school.py | 11 ++++++++++ src/api/serializers/school_test.py | 33 ++++++++++++++++++++++++++++-- 2 files changed, 42 insertions(+), 2 deletions(-) diff --git a/src/api/serializers/school.py b/src/api/serializers/school.py index 2acc42bd..d72710df 100644 --- a/src/api/serializers/school.py +++ b/src/api/serializers/school.py @@ -266,6 +266,7 @@ class SchoolSerializer(_SchoolSerializer): uk_county = serializers.ChoiceField( # type: ignore[assignment] source="county", + required=False, choices=[ "Aberdeen City", "Aberdeenshire", @@ -418,3 +419,13 @@ def validate(self, attrs): ) return attrs + + def create(self, validated_data): + school = School.objects.create(**validated_data) + + user = self.request.non_school_teacher_user + user.teacher.school = school + user.teacher.is_admin = True + user.teacher.save(update_fields=["school", "is_admin"]) + + return school diff --git a/src/api/serializers/school_test.py b/src/api/serializers/school_test.py index f2a532bb..82f441c9 100644 --- a/src/api/serializers/school_test.py +++ b/src/api/serializers/school_test.py @@ -3,8 +3,15 @@ Created on 02/02/2024 at 15:38:51(+00:00). """ +import typing as t + from codeforlife.tests import ModelSerializerTestCase -from codeforlife.user.models import School, User +from codeforlife.user.models import ( + AdminSchoolTeacherUser, + NonSchoolTeacherUser, + School, + User, +) from ..views.school import SchoolViewSet from .school import SchoolSerializer @@ -15,11 +22,15 @@ class TestSchoolSerializer(ModelSerializerTestCase[User, School]): model_serializer_class = SchoolSerializer - fixtures = ["school_1"] + fixtures = ["school_1", "non_school_teacher"] def setUp(self): self.school_1 = School.objects.get(pk=2) + non_school_teacher_user = NonSchoolTeacherUser.objects.first() + assert non_school_teacher_user + self.non_school_teacher_user = non_school_teacher_user + def test_validate__country_ne_gb(self): """ Setting a UK county raises an error if the country does not equal GB. @@ -44,3 +55,21 @@ def test_validate_name__name_not_unique(self): value=self.school_1.name, error_code="name_not_unique", ) + + def test_create(self): + """Can successfully create a school.""" + user = self.non_school_teacher_user + + self.assert_create( + validated_data={ + "name": "Test School", + "country": "CY", + }, + context={"request": self.request_factory.post(user=user)}, + new_data={"county": None}, + ) + + user = t.cast(AdminSchoolTeacherUser, user) # type: ignore[assignment] + user.teacher.refresh_from_db() + assert user.teacher.school + assert user.teacher.is_admin From cd2278d4421e2caa4c2c15be8f6969438528ed79 Mon Sep 17 00:00:00 2001 From: SKairinos Date: Mon, 13 Jan 2025 17:59:53 +0000 Subject: [PATCH 2/3] fix: country not required --- src/api/serializers/school.py | 1 + 1 file changed, 1 insertion(+) diff --git a/src/api/serializers/school.py b/src/api/serializers/school.py index d72710df..559efaf7 100644 --- a/src/api/serializers/school.py +++ b/src/api/serializers/school.py @@ -11,6 +11,7 @@ # pylint: disable-next=missing-class-docstring,too-many-ancestors class SchoolSerializer(_SchoolSerializer): country = serializers.ChoiceField( # type: ignore[assignment] + required=False, choices=[ "AF", "AX", From 06e3c60d7f21bf8bf31da487fd8ccc273bbc5d50 Mon Sep 17 00:00:00 2001 From: SKairinos Date: Mon, 13 Jan 2025 18:16:28 +0000 Subject: [PATCH 3/3] fix json serializing --- src/api/serializers/school.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/api/serializers/school.py b/src/api/serializers/school.py index 559efaf7..487942da 100644 --- a/src/api/serializers/school.py +++ b/src/api/serializers/school.py @@ -430,3 +430,11 @@ def create(self, validated_data): user.teacher.save(update_fields=["school", "is_admin"]) return school + + def to_representation(self, instance): + return { + "id": instance.id, + "name": instance.name, + "country": instance.country.code, + "uk_county": instance.county, + }