Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
# Generated by Django 3.2.12 on 2022-06-22 20:46

from django.db import migrations, models


class Migration(migrations.Migration):

dependencies = [
("autograder", "0001_initial"),
]

operations = [
migrations.AlterField(
model_name="student",
name="courses",
field=models.ManyToManyField(
blank=True, related_name="students", to="autograder.Course"
),
),
]
2 changes: 1 addition & 1 deletion autograder_django_backend/autograder/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ class Student(models.Model):
Assignment, on_delete=models.CASCADE, related_name="students", null=True
)

courses = models.ManyToManyField(Course, related_name="students")
courses = models.ManyToManyField(Course, related_name="students", blank=True)

def get_professors(self):
return list(Professor.objects.filter(courses__in=self.courses.all()))
Expand Down
20 changes: 19 additions & 1 deletion autograder_django_backend/autograder/serializers.py
Original file line number Diff line number Diff line change
@@ -1,9 +1,27 @@
from rest_framework import serializers

from .models import Assignment
from .models import Assignment, Course, Professor, Student


class AssignmentSerializer(serializers.ModelSerializer):
class Meta:
model = Assignment
fields = "__all__"


class CourseSerializer(serializers.ModelSerializer):
class Meta:
model = Course
fields = "__all__"


class StudentSerializer(serializers.ModelSerializer):
class Meta:
model = Student
fields = "__all__"


class ProfessorSerializer(serializers.ModelSerializer):
class Meta:
model = Professor
fields = "__all__"
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
from autograder.models import Course, Assignment, Professor, Student
from autograder_django_backend.utils.tests import get_client

# Test creating a course through the API
# Test creating an assignment through the API
@pytest.mark.django_db(transaction=True)
def test_create_assignment_api():
client, user = get_client()
Expand Down
28 changes: 28 additions & 0 deletions autograder_django_backend/autograder/tests/test_course.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
from django.test import TestCase
import pytest
from autograder.models import Course, Assignment, Professor, Student
from autograder_django_backend.utils.tests import get_client


@pytest.mark.django_db(transaction=True)
Expand Down Expand Up @@ -76,3 +77,30 @@ def test_get_students_of_course():
assert student_one in list_of_students
assert student_two in list_of_students
assert student_three in list_of_students


# Test creating a course through the API
@pytest.mark.django_db(transaction=True)
def test_create_course_api():
client, user = get_client()

professor = Professor.objects.create(name="test_professor", email="[email protected]")

response = client.post(
"/api/courses/",
{
"course_id": "COMP 2406",
"name": "Fundamentals of Web Applications",
"description": "Introduction to Internet application development; emphasis on computer science fundamentals of technologies underlying web applications. Topics include: scripting and functional languages, language-based virtual machines, database query languages, remote procedure calls over the Internet, and performance and security concerns in modern distributed applications.",
"section": "A",
"professor": professor.id,
},
format="json",
)

assert response.status_code == 201

assignment = Course.objects.get(course_id="COMP 2406")

assert assignment.course_id == "COMP 2406"
assert assignment.name == "Fundamentals of Web Applications"
19 changes: 19 additions & 0 deletions autograder_django_backend/autograder/tests/test_professor.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
import pytest
from autograder.models import Course, Assignment, Professor, Student
from autograder.tests.factory import student_factory
from autograder_django_backend.utils.tests import get_client


@pytest.mark.django_db(transaction=True)
Expand Down Expand Up @@ -36,3 +37,21 @@ def test_get_students_of_professor():

# Check that the student is in the list
assert student in students


@pytest.mark.django_db(transaction=True)
def test_create_professor_api():
client, user = get_client()

response = client.post(
"/api/professors/",
{"name": "test_professor", "email": "[email protected]"},
format="json",
)

assert response.status_code == 201

assignment = Professor.objects.get(name="test_professor")

assert assignment.name == "test_professor"
assert assignment.email == "[email protected]"
24 changes: 24 additions & 0 deletions autograder_django_backend/autograder/tests/test_student.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
import pytest
from autograder.models import Course, Assignment, Professor, Student
from autograder.tests.factory import student_factory
from autograder_django_backend.utils.tests import get_client


@pytest.mark.django_db(transaction=True)
Expand Down Expand Up @@ -54,3 +55,26 @@ def test_student_get_all_professors():

assert professor_one in list_of_professors
assert professor_two in list_of_professors


@pytest.mark.django_db(transaction=True)
def test_create_student_api():
client, user = get_client()

response = client.post(
"/api/students/",
{
"name": "test_student",
"email": "[email protected]",
},
format="json",
)

print(response.data)

assert response.status_code == 201

assignment = Student.objects.get(name="test_student")

assert assignment.name == "test_student"
assert assignment.email == "[email protected]"
24 changes: 22 additions & 2 deletions autograder_django_backend/autograder/views.py
Original file line number Diff line number Diff line change
@@ -1,9 +1,29 @@
from rest_framework import viewsets

from .models import Assignment
from .serializers import AssignmentSerializer
from .models import Assignment, Course, Professor, Student
from .serializers import (
AssignmentSerializer,
CourseSerializer,
ProfessorSerializer,
StudentSerializer,
)


class AssignmentViewSet(viewsets.ModelViewSet):
queryset = Assignment.objects.all()
serializer_class = AssignmentSerializer


class StudentViewSet(viewsets.ModelViewSet):
queryset = Student.objects.all()
serializer_class = StudentSerializer


class ProfessorViewSet(viewsets.ModelViewSet):
queryset = Professor.objects.all()
serializer_class = ProfessorSerializer


class CourseViewSet(viewsets.ModelViewSet):
queryset = Course.objects.all()
serializer_class = CourseSerializer
10 changes: 9 additions & 1 deletion autograder_django_backend/config/api_router.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,11 @@
from django.conf import settings
from rest_framework.routers import DefaultRouter, SimpleRouter
from autograder.views import AssignmentViewSet
from autograder.views import (
AssignmentViewSet,
CourseViewSet,
ProfessorViewSet,
StudentViewSet,
)

from autograder_django_backend.users.api.views import UserViewSet

Expand All @@ -11,6 +16,9 @@

router.register("users", UserViewSet)
router.register("assignments", AssignmentViewSet)
router.register("courses", CourseViewSet)
router.register("professors", ProfessorViewSet)
router.register("students", StudentViewSet)


app_name = "api"
Expand Down