From 4d6fcce6f1aa41b95ec7f7a2bc89822c1d8d1008 Mon Sep 17 00:00:00 2001 From: simurgan Date: Mon, 13 Nov 2023 19:33:52 +0300 Subject: [PATCH] implement request model and its tests, closes #399 --- project/backend/database/admin.py | 1 + project/backend/database/models.py | 25 ++++++++++++++---- project/backend/database/tests.py | 41 +++++++++++++++++++++++++++++- 3 files changed, 61 insertions(+), 6 deletions(-) diff --git a/project/backend/database/admin.py b/project/backend/database/admin.py index c7db2380..314d6b67 100644 --- a/project/backend/database/admin.py +++ b/project/backend/database/admin.py @@ -14,3 +14,4 @@ admin.site.register(Question) admin.site.register(WikiTag) admin.site.register(Annotation) +admin.site.register(Request) diff --git a/project/backend/database/models.py b/project/backend/database/models.py index 9610edc1..64d15f94 100644 --- a/project/backend/database/models.py +++ b/project/backend/database/models.py @@ -58,11 +58,26 @@ def __str__(self): return self.user.first_name + " " + self.user.last_name class Request(models.Model): - """ - This class definition is written beforehand (to be implemented afterwards) - in order to be referred from other classes. e.g. ReviewRequest - """ - pass + request_status_choices = [ + ("P", "Pending"), + ("A", "Accepted"), + ("R", "Rejected") + ] + + sender = models.ForeignKey(Contributor, on_delete=models.PROTECT, related_name="outgoing_requests") + receiver = models.ForeignKey(Contributor, on_delete=models.PROTECT, related_name="incoming_requests") + title = models.CharField(max_length=80) + body = models.TextField(max_length=400) + status = models.CharField(max_length=1, choices=request_status_choices, default="P") + + def accept(self): + self.status = "A" + self.save() + + def reject(self): + self.status = "R" + self.save() + class ReviewRequest(Request): """ This class definition is written beforehand (to be implemented afterwards) diff --git a/project/backend/database/tests.py b/project/backend/database/tests.py index 92add15f..5b7468ce 100644 --- a/project/backend/database/tests.py +++ b/project/backend/database/tests.py @@ -1,6 +1,6 @@ from django.test import TestCase from django.contrib.auth.models import User -from .models import ReviewRequest, Workspace, Contributor, Reviewer, Admin +from .models import * from .serializers import RegisterSerializer, UserSerializer, BasicUserSerializer, ContributorSerializer, ReviewerSerializer from .models import BasicUser, Node, Theorem, Proof from .serializers import RegisterSerializer, UserSerializer, BasicUserSerializer @@ -343,7 +343,46 @@ def test_theorem_model(self): self.assertEqual(theorem.theorem_title, "Test Theorem") self.assertEqual(theorem.theorem_content, "This is a test theorem content.") +class RequestModelTestCase(TestCase): + def tearDown(self): + Request.objects.all().delete() + Contributor.objects.all().delete() + + def setUp(self): + sender_user = User.objects.create( + username="testuser", + email="test@example.com", + first_name="User", + last_name="Test", + ) + self.sender = Contributor.objects.create(user=sender_user, bio="Test bio 1") + receiver_user = User.objects.create( + username="testuser2", + email="test2@example.com", + first_name="User2", + last_name="Test2", + ) + self.receiver = Contributor.objects.create(user=receiver_user, bio="Test bio 2") + self.request = Request.objects.create(sender=self.sender, receiver=self.receiver, title="Request title", body="Request body") + + def test_db(self): + self.assertGreater(Request.objects.filter(sender=self.sender).count(), 0, "Could not find created request in the db with this sender!") + req = Request.objects.get(sender=self.sender) + self.assertEqual(req.receiver.id, self.receiver.id, "Receiver didn't match") + self.assertEqual(req.title, self.request.title, "Title didn't match") + self.assertEqual(req.body, self.request.body, "Body didn't match") + self.assertEqual(self.request.status, "P", "Status is not Pending") + + def test_accept(self): + self.request.accept() + req = Request.objects.get(sender=self.sender) + self.assertEqual(req.status, "A", "Accept method didn't work as expected") + + def test_reject(self): + self.request.reject() + req = Request.objects.get(sender=self.sender) + self.assertEqual(req.status, "R", "Reject method didn't work as expected") class RegisterSerializerTestCase(TestCase): def setUp(self):