Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Request parent model implementation #426

Merged
merged 1 commit into from
Nov 13, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
1 change: 1 addition & 0 deletions project/backend/database/admin.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,3 +14,4 @@
admin.site.register(Question)
admin.site.register(WikiTag)
admin.site.register(Annotation)
admin.site.register(Request)
25 changes: 20 additions & 5 deletions project/backend/database/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down
41 changes: 40 additions & 1 deletion project/backend/database/tests.py
Original file line number Diff line number Diff line change
@@ -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
Expand Down Expand Up @@ -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):
Expand Down