From dc6a832464b4a5b6182b79a82eb6551afa0959c0 Mon Sep 17 00:00:00 2001
From: "robinwilliam.hundt" <robinwilliam.hundt@stud.uni-goettingen.de>
Date: Tue, 21 Nov 2017 22:08:55 +0100
Subject: [PATCH] Started work on more data factorys for test #55

The methods in core.tests.data_factories.py are not finished nor good and overlap with GradyUserFactory.
---
 backend/core/serializers.py          |  1 -
 backend/core/tests/data_factories.py | 63 ++++++++++++++++++++++++++++
 backend/core/views.py                |  1 -
 3 files changed, 63 insertions(+), 2 deletions(-)
 create mode 100644 backend/core/tests/data_factories.py

diff --git a/backend/core/serializers.py b/backend/core/serializers.py
index 8178ecfa..59e7587d 100644
--- a/backend/core/serializers.py
+++ b/backend/core/serializers.py
@@ -1,5 +1,4 @@
 from rest_framework import serializers
-
 from core.models import ExamType, Feedback, Student, Submission
 
 
diff --git a/backend/core/tests/data_factories.py b/backend/core/tests/data_factories.py
new file mode 100644
index 00000000..259d6d76
--- /dev/null
+++ b/backend/core/tests/data_factories.py
@@ -0,0 +1,63 @@
+from core.models import (UserAccount, Student, Tutor, Reviewer,
+                         ExamType, SubmissionType, Submission, Feedback)
+
+
+# These methods are meant to be used to provide data to insert into the test database
+
+def make_user(username='user01', password='p', fullname='us er01', is_admin=False):
+    user = UserAccount.objects.create(username=username, fullname=fullname,
+                                      is_admin=is_admin)
+    user.set_password(password)
+    user.save()
+    return user
+
+
+def make_exam(module_reference='TestExam B.Inf.0042', total_score=42, pass_score=21, **kwargs):
+    return ExamType.objects.create(module_reference=module_reference, total_score=total_score,
+                                   pass_score=pass_score, **kwargs)
+
+
+def make_submission_type(name='problem01', full_score=10, description='Very hard',
+                         solution='Impossible!'):
+    return SubmissionType.objects.create(name=name, full_score=full_score,
+                                         description=description, solution=solution)
+
+
+def make_student(user=None, exam=None):
+    if user is None:
+        user = make_user()
+    if exam is None:
+        exam = make_exam()
+    return Student.objects.create(user=user, exam=exam)
+
+
+def make_tutor(user=None):
+    if user is None:
+        user = make_user()
+    return Tutor.objects.create(user=user)
+
+
+def make_reviewer(user=None):
+    if user is None:
+        user = make_user()
+    return Reviewer.objects.create(user=user)
+
+
+def make_submission(type=None, student=None, text='Too hard for me ;-('):
+    if type is None:
+        type = make_submission_type()
+    if student is None:
+        student = make_student()
+    return Submission.objects.create(text=text, type=type, student=student)
+
+
+def make_feedback(of_tutor, of_submission=None, text='Very bad!', score=3):
+    if of_submission is None:
+        of_submission = make_submission()
+    return Feedback.objects.create(of_tutor=of_tutor, of_submission=of_submission, text=text, score=score)
+
+
+def make_minimal_exam():
+    submission = make_submission()     # also creates default examType, submissionType and student
+    tutor = make_tutor(user=make_user(username='tutor01'))
+    make_feedback(of_tutor=tutor, of_submission=submission)
diff --git a/backend/core/views.py b/backend/core/views.py
index 2932ec09..20f185b4 100644
--- a/backend/core/views.py
+++ b/backend/core/views.py
@@ -9,7 +9,6 @@ from core.serializers import (FeedbackSerializer, StudentSerializer,
 log = logging.getLogger(__name__)
 
 
-
 class StudentApiView(RetrieveAPIView):
     permission_classes = (IsStudent,)
 
-- 
GitLab