From 6194f498ce1b3c6f75858471e32cd5a1749d441c Mon Sep 17 00:00:00 2001 From: lgdtimtou Date: Thu, 21 Mar 2024 10:11:24 +0100 Subject: [PATCH 1/8] Indiening bestanden worden nu vanzelf opgevraagd via get queries naar een indiening. Aparte indiening_bestanden api call is dus verwijderd --- api/models/indiening.py | 2 +- api/serializers/gebruiker.py | 3 +- api/serializers/indiening.py | 20 +++++------ api/urls.py | 17 +--------- api/utils.py | 1 - api/views/indiening.py | 66 +----------------------------------- 6 files changed, 14 insertions(+), 95 deletions(-) diff --git a/api/models/indiening.py b/api/models/indiening.py index b3b67298..5d428a78 100644 --- a/api/models/indiening.py +++ b/api/models/indiening.py @@ -59,7 +59,7 @@ class IndieningBestand(models.Model): """ indiening_bestand_id = models.AutoField(primary_key=True) - indiening = models.ForeignKey("Indiening", on_delete=models.CASCADE) + indiening = models.ForeignKey(Indiening, related_name='indiening_bestanden', on_delete=models.CASCADE) bestand = models.FileField(upload_to=upload_to) def __str__(self): diff --git a/api/serializers/gebruiker.py b/api/serializers/gebruiker.py index f8aacf44..ac21686f 100644 --- a/api/serializers/gebruiker.py +++ b/api/serializers/gebruiker.py @@ -1,7 +1,6 @@ from rest_framework import serializers from api.models.gebruiker import Gebruiker - class GebruikerSerializer(serializers.ModelSerializer): """ Serializer voor het serialiseren en deserialiseren van Gebruiker objecten. @@ -18,7 +17,7 @@ class GebruikerSerializer(serializers.ModelSerializer): class Meta: model = Gebruiker - fields = "__all__" + fields = ['user', 'user.first_name', 'is_lesgever'] def create(self, validated_data): """ diff --git a/api/serializers/indiening.py b/api/serializers/indiening.py index aa96fbb0..cd682572 100644 --- a/api/serializers/indiening.py +++ b/api/serializers/indiening.py @@ -2,31 +2,31 @@ from api.models.indiening import Indiening, IndieningBestand -class IndieningSerializer(serializers.ModelSerializer): +class IndieningBestandSerializer(serializers.ModelSerializer): """ - Serializer voor het serialiseren en deserialiseren van Indiening objecten. + Serializer voor het serialiseren en deserialiseren van IndieningBestand objecten. Fields: - Meta.model (Indiening): Het model waarop de serializer is gebaseerd. + Meta.model (IndieningBestand): Het model waarop de serializer is gebaseerd. Meta.fields (tuple): De velden die moeten worden opgenomen in de serializer. Hier worden alle velden opgenomen. """ class Meta: - model = Indiening + model = IndieningBestand fields = "__all__" - -class IndieningBestandSerializer(serializers.ModelSerializer): +class IndieningSerializer(serializers.ModelSerializer): """ - Serializer voor het serialiseren en deserialiseren van IndieningBestand objecten. + Serializer voor het serialiseren en deserialiseren van Indiening objecten. Fields: - Meta.model (IndieningBestand): Het model waarop de serializer is gebaseerd. + Meta.model (Indiening): Het model waarop de serializer is gebaseerd. Meta.fields (tuple): De velden die moeten worden opgenomen in de serializer. Hier worden alle velden opgenomen. """ + indiening_bestanden = IndieningBestandSerializer(many=True, read_only=True) class Meta: - model = IndieningBestand - fields = "__all__" + model = Indiening + fields = ['indiening_id', 'groep', 'tijdstip', 'indiening_bestanden'] diff --git a/api/urls.py b/api/urls.py index 16d7321b..9173c623 100644 --- a/api/urls.py +++ b/api/urls.py @@ -23,12 +23,7 @@ from .views.gebruiker import gebruiker_list, gebruiker_detail from .views.vak import vak_list, vak_detail from .views.project import project_list, project_detail -from .views.indiening import ( - indiening_list, - indiening_detail, - indiening_bestand_list, - indiening_bestand_detail, -) +from .views.indiening import indiening_list, indiening_detail from .views.score import score_list, score_detail from .views.groep import groep_list, groep_detail @@ -46,16 +41,6 @@ path("api/projecten//", project_detail, name="project_detail"), path("api/indieningen/", indiening_list, name="indiening_list"), path("api/indieningen//", indiening_detail, name="indiening_detail"), - path( - "api/indiening_bestanden/", - indiening_bestand_list, - name="indiening_bestand_list", - ), - path( - "api/indiening_bestanden//", - indiening_bestand_detail, - name="indiening_bestand_detail", - ), path("api/scores/", score_list, name="score_list"), path("api/scores//", score_detail, name="score_detail"), path("api/groepen/", groep_list, name="groep_list"), diff --git a/api/utils.py b/api/utils.py index 6a25d2f6..29bfec31 100644 --- a/api/utils.py +++ b/api/utils.py @@ -8,7 +8,6 @@ "vakken": "/api/vakken", "groepen": "/api/groepen", "indieningen": "/api/indieningen", - "indiening_bestanden": "/api/indiening_bestanden", "scores": "api/scores", "projecten": "api/projecten", } diff --git a/api/views/indiening.py b/api/views/indiening.py index 097cd265..9b76c138 100644 --- a/api/views/indiening.py +++ b/api/views/indiening.py @@ -4,7 +4,7 @@ from api.models.indiening import Indiening, IndieningBestand from api.models.groep import Groep -from api.serializers.indiening import IndieningSerializer, IndieningBestandSerializer +from api.serializers.indiening import IndieningSerializer from api.utils import is_lesgever, contains @@ -95,67 +95,3 @@ def indiening_detail(request, id, format=None): indiening.delete() return Response(status=status.HTTP_204_NO_CONTENT) return Response(status=status.HTTP_403_FORBIDDEN) - - -@api_view(["GET"]) -def indiening_bestand_list(request, format=None): - """ - Een view om een lijst van indieningbestanden op te halen (GET). - GET: - Als de gebruiker een lesgever is, worden alle indieningbestanden opgehaald. - Als de gebruiker geen lesgever is, worden alleen de indieningbestanden opgehaald - van de ingelogde gebruiker. - - Optionele query parameters: - indiening (int): Filtert indieningbestanden op basis van indiening-ID. - - Returns: - Response: Een lijst van indieningbestandgegevens. - """ - if request.method == "GET": - if is_lesgever(request.user): - indieningen_bestanden = IndieningBestand.objects.all() - else: - groepen = Groep.objects.filter(studenten=request.user.id) - indieningen = Indiening.objects.filter(groep__in=groepen) - indieningen_bestanden = IndieningBestand.objects.filter( - indiening__in=indieningen - ) - - if "indiening" in request.GET: - try: - indiening = eval(request.GET.get("indiening")) - indieningen_bestanden = indieningen_bestanden.filter( - indiening=indiening - ) - except NameError: - return Response(status=status.HTTP_400_BAD_REQUEST) - - serializer = IndieningBestandSerializer(indieningen_bestanden, many=True) - return Response(serializer.data) - - -@api_view(["GET"]) -def indiening_bestand_detail(request, id, format=None): - """ - Een view om de gegevens van een specifiek indieningbestand op te halen (GET). - - Args: - id (int): De primaire sleutel van het indieningbestand. - - Returns: - Response: Gegevens van het indieningbestand of een foutmelding als - het indieningbestand niet bestaat of als er een ongeautoriseerde toegang is. - """ - try: - indiening_bestand = IndieningBestand.objects.get(pk=id) - except IndieningBestand.DoesNotExist: - return Response(status=status.HTTP_404_NOT_FOUND) - - if request.method == "GET": - if is_lesgever(request.user) or contains( - indiening_bestand.indiening.groep.studenten, request.user - ): - serializer = IndieningBestandSerializer(indiening_bestand) - return Response(serializer.data) - return Response(status=status.HTTP_403_FORBIDDEN) From 1f5904a1a540e7bd9d75dc9108355a25f0566adc Mon Sep 17 00:00:00 2001 From: lgdtimtou Date: Thu, 21 Mar 2024 10:15:37 +0100 Subject: [PATCH 2/8] Zorgen dat extra gebruiker data wordt getoond zonder deze expleciet op te slaan in het gebruiker model --- api/serializers/gebruiker.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/api/serializers/gebruiker.py b/api/serializers/gebruiker.py index ac21686f..3e4fd26d 100644 --- a/api/serializers/gebruiker.py +++ b/api/serializers/gebruiker.py @@ -15,9 +15,13 @@ class GebruikerSerializer(serializers.ModelSerializer): update(self, instance, validated_data): Werkt een bestaande gebruiker bij in de database. """ + first_name = serializers.CharField(source='user.first_name', read_only=True) + last_name = serializers.CharField(source='user.last_name', read_only=True) + email = serializers.EmailField(source='user.email', read_only=True) + class Meta: model = Gebruiker - fields = ['user', 'user.first_name', 'is_lesgever'] + fields = ['user', 'is_lesgever', 'first_name', 'last_name', 'email'] def create(self, validated_data): """ From 1a56bf7b3a3f688f038f8409765767e58e49aa56 Mon Sep 17 00:00:00 2001 From: lgdtimtou Date: Thu, 21 Mar 2024 10:38:20 +0100 Subject: [PATCH 3/8] Veld extra_deadline aan project toegevoegd en ook extra validatiecheck toegevoegd dat extra deadline na de eerste deadline moet liggen --- api/models/project.py | 3 ++- api/serializers/project.py | 13 ++++++++++--- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/api/models/project.py b/api/models/project.py index 8a91e275..12f2bcd6 100644 --- a/api/models/project.py +++ b/api/models/project.py @@ -46,7 +46,8 @@ class Project(models.Model): beschrijving = models.TextField() opgave_bestand = models.FileField(upload_to=upload_to) vak = models.ForeignKey(Vak, on_delete=models.CASCADE) - deadline = models.DateTimeField(null=True) + deadline = models.DateTimeField(null=True, blank=True) + extra_deadline = models.DateTimeField(null=True, blank=True) max_score = models.IntegerField(default=20) # indiening restricties diff --git a/api/serializers/project.py b/api/serializers/project.py index 90f808ef..746e06ea 100644 --- a/api/serializers/project.py +++ b/api/serializers/project.py @@ -30,10 +30,12 @@ def create(self, validated_data): Project: Het aangemaakte project. """ deadline = validated_data.pop("deadline") - validate_deadline(deadline) + extra_deadline = validated_data.pop("extra_deadline") + validate_deadlines(deadline, extra_deadline) project = Project.objects.create(**validated_data) project.deadline = deadline + project.extra_deadline = extra_deadline project.save() return project @@ -47,15 +49,17 @@ def update(self, instance, validated_data): Project: Het bijgewerkte project. """ deadline = validated_data.pop("deadline") - validate_deadline(deadline) + extra_deadline = validated_data.pop("extra_deadline") + validate_deadlines(deadline, extra_deadline) super().update(instance=instance, validated_data=validated_data) instance.deadline = deadline + instance.extra_deadline = extra_deadline instance.save() return instance -def validate_deadline(deadline): +def validate_deadlines(deadline, extra_deadline): """ Controleert of de opgegeven deadline in de toekomst ligt. @@ -67,3 +71,6 @@ def validate_deadline(deadline): """ if deadline <= timezone.now(): raise serializers.ValidationError("Deadline moet in de toekomst liggen") + + if extra_deadline <= deadline: + raise serializers.ValidationError("Extra deadline moet na de eerste deadline liggen") From 080bd50c9c315107df83eb1c83173c8124eb2867 Mon Sep 17 00:00:00 2001 From: lgdtimtou Date: Thu, 21 Mar 2024 10:48:48 +0100 Subject: [PATCH 4/8] Status veld toevoegen aan indiening --- api/models/indiening.py | 1 + api/serializers/indiening.py | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/api/models/indiening.py b/api/models/indiening.py index 5d428a78..6bf265fd 100644 --- a/api/models/indiening.py +++ b/api/models/indiening.py @@ -36,6 +36,7 @@ class Indiening(models.Model): indiening_id = models.AutoField(primary_key=True) groep = models.ForeignKey("Groep", on_delete=models.CASCADE) tijdstip = models.DateTimeField(auto_now_add=True) + status = models.BooleanField() def __str__(self): return str(self.indiening_id) diff --git a/api/serializers/indiening.py b/api/serializers/indiening.py index cd682572..65d5446d 100644 --- a/api/serializers/indiening.py +++ b/api/serializers/indiening.py @@ -29,4 +29,4 @@ class IndieningSerializer(serializers.ModelSerializer): class Meta: model = Indiening - fields = ['indiening_id', 'groep', 'tijdstip', 'indiening_bestanden'] + fields = ['indiening_id', 'groep', 'tijdstip', 'status', 'indiening_bestanden'] From 80c152503858fcdda65b573506fab1900397ae3f Mon Sep 17 00:00:00 2001 From: lgdtimtou Date: Thu, 21 Mar 2024 11:13:18 +0100 Subject: [PATCH 5/8] zichtbaar en gearchiveerd velden toegevoegd aan een project. Een student kan enkel zichtbare projecten zien --- api/models/project.py | 2 ++ api/views/project.py | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/api/models/project.py b/api/models/project.py index 12f2bcd6..7c925530 100644 --- a/api/models/project.py +++ b/api/models/project.py @@ -49,6 +49,8 @@ class Project(models.Model): deadline = models.DateTimeField(null=True, blank=True) extra_deadline = models.DateTimeField(null=True, blank=True) max_score = models.IntegerField(default=20) + zichtbaar = models.BooleanField(default = True, blank = True) + gearchiveerd = models.BooleanField(default = False, blank = True) # indiening restricties def __str__(self): diff --git a/api/views/project.py b/api/views/project.py index d2fa57a8..c9ee1ecd 100644 --- a/api/views/project.py +++ b/api/views/project.py @@ -32,7 +32,7 @@ def project_list(request, format=None): projects = Project.objects.all() else: vakken = Vak.objects.filter(studenten=request.user.id) - projects = Project.objects.filter(vak__in=vakken) + projects = Project.objects.filter(vak__in=vakken).filter(zichtbaar=True) if "vak" in request.GET: try: From 36a626eb133a0a28dab715c074544454bfc11ecd Mon Sep 17 00:00:00 2001 From: lgdtimtou Date: Thu, 21 Mar 2024 11:28:59 +0100 Subject: [PATCH 6/8] Validatiecheck om te zorgen dat alle studenten van een groep wel degelijk het vak hebben van het project voor die groep --- api/serializers/groep.py | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/api/serializers/groep.py b/api/serializers/groep.py index 7a99be60..3c0b2eb7 100644 --- a/api/serializers/groep.py +++ b/api/serializers/groep.py @@ -1,6 +1,5 @@ from rest_framework import serializers from api.models.groep import Groep -from collections import Counter class GroepSerializer(serializers.ModelSerializer): @@ -73,18 +72,17 @@ def validate_students(students_data, project, current_group=None): """ groepen = Groep.objects.filter(project=project) - student_counts = Counter(students_data) - for student, count in student_counts.items(): - if count > 1: - raise serializers.ValidationError( - f"Student {student} zit al in deze groep!" - ) for student in students_data: if student.is_lesgever: raise serializers.ValidationError( "Alle gebruikers in 'studenten' moeten studenten zijn!" ) + + if not project.vak.studenten.all().contains(student): + raise serializers.ValidationError( + f"Student {student} is geen student van het vak {project.vak}" + ) for groep in groepen: if ( @@ -93,5 +91,5 @@ def validate_students(students_data, project, current_group=None): and student in groep.studenten.all() ): raise serializers.ValidationError( - f"Gebruiker {student} zit al in een andere groep voor dit project!" + f"Student {student} zit al in een andere groep voor dit project!" ) From 93335008f6739e5558751ae26fe3a37d5194e852 Mon Sep 17 00:00:00 2001 From: lgdtimtou Date: Thu, 21 Mar 2024 12:01:35 +0100 Subject: [PATCH 7/8] Validatiecheck wanneer gebruikers hun lesgever status wordt veranderd --- api/models/indiening.py | 4 +++- api/models/project.py | 4 ++-- api/serializers/gebruiker.py | 13 ++++++++++++- api/serializers/groep.py | 3 +-- api/serializers/indiening.py | 4 +++- api/serializers/project.py | 6 ++++-- 6 files changed, 25 insertions(+), 9 deletions(-) diff --git a/api/models/indiening.py b/api/models/indiening.py index 6bf265fd..5ff293db 100644 --- a/api/models/indiening.py +++ b/api/models/indiening.py @@ -60,7 +60,9 @@ class IndieningBestand(models.Model): """ indiening_bestand_id = models.AutoField(primary_key=True) - indiening = models.ForeignKey(Indiening, related_name='indiening_bestanden', on_delete=models.CASCADE) + indiening = models.ForeignKey( + Indiening, related_name="indiening_bestanden", on_delete=models.CASCADE + ) bestand = models.FileField(upload_to=upload_to) def __str__(self): diff --git a/api/models/project.py b/api/models/project.py index 7c925530..1f9e208c 100644 --- a/api/models/project.py +++ b/api/models/project.py @@ -49,8 +49,8 @@ class Project(models.Model): deadline = models.DateTimeField(null=True, blank=True) extra_deadline = models.DateTimeField(null=True, blank=True) max_score = models.IntegerField(default=20) - zichtbaar = models.BooleanField(default = True, blank = True) - gearchiveerd = models.BooleanField(default = False, blank = True) + zichtbaar = models.BooleanField(default=True, blank=True) + gearchiveerd = models.BooleanField(default=False, blank=True) # indiening restricties def __str__(self): diff --git a/api/serializers/gebruiker.py b/api/serializers/gebruiker.py index 3e4fd26d..7dee6cdf 100644 --- a/api/serializers/gebruiker.py +++ b/api/serializers/gebruiker.py @@ -1,5 +1,6 @@ from rest_framework import serializers from api.models.gebruiker import Gebruiker +from api.models.vak import Vak class GebruikerSerializer(serializers.ModelSerializer): """ @@ -43,6 +44,16 @@ def update(self, instance, validated_data): Returns: Gebruiker: De bijgewerkte gebruiker. """ - instance.is_lesgever = validated_data.pop("is_lesgever") + is_lesgever = validated_data.pop("is_lesgever") + if instance.is_lesgever != is_lesgever: + validate_lesgever_change(instance) + + instance.is_lesgever = is_lesgever instance.save() return instance + +def validate_lesgever_change(instance): + if instance.is_lesgever and Vak.objects.filter(lesgevers=instance): + raise serializers.ValidationError(f"De lesgever {instance} moet eerst verwijderd worden als lesgever in zijn huidige vakken") + elif not instance.is_lesgever and Vak.objects.filter(studenten=instance): + raise serializers.ValidationError(f"De student {instance} moet eerst verwijderd worden als student in zijn huidige vakken") \ No newline at end of file diff --git a/api/serializers/groep.py b/api/serializers/groep.py index 3c0b2eb7..af8f84cf 100644 --- a/api/serializers/groep.py +++ b/api/serializers/groep.py @@ -72,13 +72,12 @@ def validate_students(students_data, project, current_group=None): """ groepen = Groep.objects.filter(project=project) - for student in students_data: if student.is_lesgever: raise serializers.ValidationError( "Alle gebruikers in 'studenten' moeten studenten zijn!" ) - + if not project.vak.studenten.all().contains(student): raise serializers.ValidationError( f"Student {student} is geen student van het vak {project.vak}" diff --git a/api/serializers/indiening.py b/api/serializers/indiening.py index 65d5446d..016a169d 100644 --- a/api/serializers/indiening.py +++ b/api/serializers/indiening.py @@ -16,6 +16,7 @@ class Meta: model = IndieningBestand fields = "__all__" + class IndieningSerializer(serializers.ModelSerializer): """ Serializer voor het serialiseren en deserialiseren van Indiening objecten. @@ -25,8 +26,9 @@ class IndieningSerializer(serializers.ModelSerializer): Meta.fields (tuple): De velden die moeten worden opgenomen in de serializer. Hier worden alle velden opgenomen. """ + indiening_bestanden = IndieningBestandSerializer(many=True, read_only=True) class Meta: model = Indiening - fields = ['indiening_id', 'groep', 'tijdstip', 'status', 'indiening_bestanden'] + fields = ["indiening_id", "groep", "tijdstip", "status", "indiening_bestanden"] diff --git a/api/serializers/project.py b/api/serializers/project.py index 746e06ea..0243ebc5 100644 --- a/api/serializers/project.py +++ b/api/serializers/project.py @@ -71,6 +71,8 @@ def validate_deadlines(deadline, extra_deadline): """ if deadline <= timezone.now(): raise serializers.ValidationError("Deadline moet in de toekomst liggen") - + if extra_deadline <= deadline: - raise serializers.ValidationError("Extra deadline moet na de eerste deadline liggen") + raise serializers.ValidationError( + "Extra deadline moet na de eerste deadline liggen" + ) From 5482180844464af3511ac7aa99046a8c716c3f0e Mon Sep 17 00:00:00 2001 From: arallaer Date: Thu, 21 Mar 2024 15:43:03 +0100 Subject: [PATCH 8/8] testen model --- api/serializers/gebruiker.py | 18 ++++++++++++------ api/tests/factories/indiening.py | 5 +++++ api/tests/factories/project.py | 7 +++++++ api/tests/models/test_indiening.py | 14 ++++++-------- api/tests/models/test_project.py | 15 +++++++++++++++ 5 files changed, 45 insertions(+), 14 deletions(-) diff --git a/api/serializers/gebruiker.py b/api/serializers/gebruiker.py index 7dee6cdf..1292e010 100644 --- a/api/serializers/gebruiker.py +++ b/api/serializers/gebruiker.py @@ -2,6 +2,7 @@ from api.models.gebruiker import Gebruiker from api.models.vak import Vak + class GebruikerSerializer(serializers.ModelSerializer): """ Serializer voor het serialiseren en deserialiseren van Gebruiker objecten. @@ -16,13 +17,13 @@ class GebruikerSerializer(serializers.ModelSerializer): update(self, instance, validated_data): Werkt een bestaande gebruiker bij in de database. """ - first_name = serializers.CharField(source='user.first_name', read_only=True) - last_name = serializers.CharField(source='user.last_name', read_only=True) - email = serializers.EmailField(source='user.email', read_only=True) + first_name = serializers.CharField(source="user.first_name", read_only=True) + last_name = serializers.CharField(source="user.last_name", read_only=True) + email = serializers.EmailField(source="user.email", read_only=True) class Meta: model = Gebruiker - fields = ['user', 'is_lesgever', 'first_name', 'last_name', 'email'] + fields = ["user", "is_lesgever", "first_name", "last_name", "email"] def create(self, validated_data): """ @@ -52,8 +53,13 @@ def update(self, instance, validated_data): instance.save() return instance + def validate_lesgever_change(instance): if instance.is_lesgever and Vak.objects.filter(lesgevers=instance): - raise serializers.ValidationError(f"De lesgever {instance} moet eerst verwijderd worden als lesgever in zijn huidige vakken") + raise serializers.ValidationError( + f"De lesgever {instance} moet eerst verwijderd worden als lesgever in zijn huidige vakken" + ) elif not instance.is_lesgever and Vak.objects.filter(studenten=instance): - raise serializers.ValidationError(f"De student {instance} moet eerst verwijderd worden als student in zijn huidige vakken") \ No newline at end of file + raise serializers.ValidationError( + f"De student {instance} moet eerst verwijderd worden als student in zijn huidige vakken" + ) diff --git a/api/tests/factories/indiening.py b/api/tests/factories/indiening.py index 38d63ece..457a0a1c 100644 --- a/api/tests/factories/indiening.py +++ b/api/tests/factories/indiening.py @@ -22,6 +22,11 @@ class Meta: fake.date_time_between(start_date="+1d", end_date="+30d") ) ) + status = factory.Faker("boolean") + + indiening_bestanden = factory.RelatedFactory( + "api.tests.factories.indiening.IndieningBestandFactory", "indiening" + ) class IndieningBestandFactory(DjangoModelFactory): diff --git a/api/tests/factories/project.py b/api/tests/factories/project.py index 216d1998..19669fc5 100644 --- a/api/tests/factories/project.py +++ b/api/tests/factories/project.py @@ -23,4 +23,11 @@ class Meta: fake.date_time_between(start_date="+1d", end_date="+30d") ) ) + extra_deadline = factory.LazyFunction( + lambda: timezone.make_aware( + fake.date_time_between(start_date="+30d", end_date="+40d") + ) + ) max_score = factory.Faker("random_int", min=10, max=100) + zichtbaar = factory.Faker('boolean') + gearchiveerd = factory.Faker('boolean') diff --git a/api/tests/models/test_indiening.py b/api/tests/models/test_indiening.py index b3bd52a6..094c0f63 100644 --- a/api/tests/models/test_indiening.py +++ b/api/tests/models/test_indiening.py @@ -15,14 +15,12 @@ def test_groep(self): def test_tijdstip(self): self.assertIsNotNone(self.indiening.tijdstip) - - def test_indiening_bestand(self): - self.assertEqual(self.indiening.indieningbestand_set.count(), 0) - - def test_indiening_bestand_add(self): - IndieningBestandFactory.create(indiening=self.indiening) - self.assertEqual(self.indiening.indieningbestand_set.count(), 1) - + + def test_status(self): + self.assertIsNotNone(self.indiening.status) + + def test_indiening_bestanden(self): + self.assertEqual(self.indiening.indiening_bestanden.count(), 1) class IndieningBestandModelTest(TestCase): def setUp(self): diff --git a/api/tests/models/test_project.py b/api/tests/models/test_project.py index 971c0eec..29ec4d61 100644 --- a/api/tests/models/test_project.py +++ b/api/tests/models/test_project.py @@ -14,3 +14,18 @@ def test_project_vak(self): def test_project_max_score(self): self.assertTrue(10 <= self.project.max_score <= 100) + + def test_project_zichtbaar(self): + self.assertIsNotNone(self.project.zichtbaar) + + def test_project_gearchiveerd(self): + self.assertIsNotNone(self.project.gearchiveerd) + + def test_project_deadline(self): + self.assertIsNotNone(self.project.deadline) + + def test_project_extra_deadline(self): + self.assertIsNotNone(self.project.extra_deadline) + + def test_project_opgave_bestand(self): + self.assertEqual(self.project.opgave_bestand.read(), b"file content")