Ejemplo n.º 1
0
def save_courses(course_list):
    """
    Saves a list of course information dictionaries to the database.

    :param course_list: List of dict, List of course information for courses
    """
    for course_dict in course_info_list:
        Course.create(code=course_dict["code"],
                      name=course_dict["norwegian_name"].strip(),
                      credit=course_dict["credit"],
                      average_grade=course_dict["average"],
                      pass_rate=course_dict["pass_rate"]).save()
Ejemplo n.º 2
0
 def test_retrieve_courses_from_token_invalid_token(self):
     with patch("course.views.Course") as mock_course_db:
         mock_course_db.return_value.objects.return_value.filter.return_value = [
             Course.create("AAA9999", "Test course", 0, 0, 100.0)
         ]
     with self.assertRaises(TypeError):
         retrieve_courses_from_token("invalid_token")
Ejemplo n.º 3
0
 def test_retrieve_courses_from_token_valid_token(self):
     with patch("course.views.Course") as mock_course_db:
         mock_course_db.return_value.objects.return_value.filter.return_value = [
             Course.create("AAA9999", "Test course", 0, 0, 100.0)
         ]
         number_of_courses = len(retrieve_courses_from_token("valid_token"))
         self.assertEqual(number_of_courses, 28)
Ejemplo n.º 4
0
 def test_get_reviewable_courses_invalid_token(self):
     with patch("course.views.get_current_semester") as mock_curr_semester, \
          patch("course.views.Course") as mock_course_db:
         mock_curr_semester.return_value = "H2020"
         mock_course_db.return_value.objects.return_value.filter.return_value = [
             Course.create("AAA9999", "Test course", 0, 0, 100.0)]
         with self.assertRaises(ValueError):
             get_reviewable_courses("invalid token")
Ejemplo n.º 5
0
 def test_can_review_successful(self):
     c = APIClient()
     c.credentials(HTTP_AUTHORIZATION='valid_token')
     with patch("course.views.Course.objects.filter") as mock_course_db:
         mock_course_db.return_value = MockQuerySet(
             [Course.create("AAA9999", "Test course", 0, 0, 100.0)])
         res = c.get("/review/check/?courseCode=TMA4100")
     self.assertEqual(res.status_code, 200)
     self.assertEqual(res.data, 0)
Ejemplo n.º 6
0
    def test_get_current_user_courses_valid_token(self):
        with patch("course.views.Course.objects.filter") as mock_course_db:
            mock_course_db.return_value = [
                Course.create("AAA9999", "Test course", 0, 0, 100.0)
            ]

            c = APIClient()
            c.credentials(HTTP_AUTHORIZATION='valid_token')
            response = c.get("/course/me/")
            self.assertEqual(response.status_code, 200)
            self.assertEqual(len(json.loads(response.content)), 28)
Ejemplo n.º 7
0
 def test_get_reviewable_courses_valid_token(self):
     # Check that courses for the current semester are removed.
     with patch("course.views.get_current_semester") as mock_curr_semester, \
          patch("course.views.Course") as mock_course_db:
         mock_curr_semester.return_value = "H2020"
         mock_course_db.return_value.objects.return_value.filter.return_value = [
             Course.create("AAA9999", "Test course", 0, 0, 100.0)]
         actual_reviewables = [
             'EXPH0004', 'TDT4137', 'TMA4140', 'TDT4136', 'TFE4101', 'TDT4112', 'TDT4113', 'TDT4110', 'TMA4100',
             'TDT4180', 'HMS0002', 'TDT4160', 'TDT4186', 'TFY4125', 'TDT4100', 'TMA4135', 'TDT4145', 'TDT4120',
             'TDT4140', 'TDT4171', 'TMA4115', 'TMA4240', 'TIØ4252', 'TTM4100', 'TDT4290', 'TDT4165',
             'TDT4173', 'TIØ4146']
         for course in get_reviewable_courses("valid_token"):
             if course not in actual_reviewables:
                 self.fail("Invalid course in reviewable courses")
Ejemplo n.º 8
0
 def test_post_review_valid_request_course_exists(self):
     # Test valid request with existing course
     valid_test_data = {"courseCode": "TDT4120",
                        "score": 1,
                        "workload": 1,
                        "difficulty": 1,
                        "reviewText": "Lorem ipsum"}
     c = APIClient()
     c.credentials(HTTP_AUTHORIZATION='valid_token')
     with patch("course.views.Course") as mock_course_db:
         mock_course_db.return_value.objects.return_value.filter.return_value = [
             Course.create("AAA9999", "Test course", 0, 0, 100.0)]
         response = c.post("/review/", data=valid_test_data, format="json")
     self.assertEqual(response.status_code, 200)
     self.assertTrue(Review.objects.filter(course_code="TDT4120", user_email="*****@*****.**").exists())
Ejemplo n.º 9
0
 def test_can_review_review_exists(self):
     c = APIClient()
     c.credentials(HTTP_AUTHORIZATION='valid_token')
     Review(course_code="TMA4100",
            user_email="*****@*****.**",
            score=5,
            workload=1,
            difficulty=2,
            review_text="Bra f*g",
            full_name="Test testesen",
            study_programme="MTDT").save()
     with patch("course.views.Course.objects.filter") as mock_course_db:
         mock_course_db.return_value = MockQuerySet(
             [Course.create("AAA9999", "Test course", 0, 0, 100.0)])
         res = c.get("/review/check/?courseCode=TMA4100")
     self.assertEqual(res.status_code, 200)
     self.assertEqual(res.data, 2)
Ejemplo n.º 10
0
  def post(self, request):
    current_user = request.user
    course_name = request.POST.get("Course Name", "")
    department = request.POST.get("Department", "")
    course_number = int(request.POST.get("Course Number", ""))
    # add functionality to assign instructor upon creation

    permission_check = current_user.is_at_least(4)

    course_name_already_exists = Course.objects.filter(courseName=course_name)
    course_number_already_exists = Course.objects.filter(courseNumber=course_number)
    create = False

    if permission_check and not course_name_already_exists:
        new_course = Course.create(course_name,department,course_number)
        new_course.save()
        create = True
        return render(request, 'createCourse.html', {"permission_check": permission_check, "create" : create})
    else:
      return render(request, 'createCourse.html', {"permission_check": permission_check, "create" : create, "message" : "Error! The course "
                                                   + course_name + " " + course_number.__str__() + " already exists"})
Ejemplo n.º 11
0
 def command(self, s, request):
   try:
     currentUser = self.getActiveUser(request)
   except:
     pass
   tokens = s.split()
   cmd = tokens[0]
   args = tokens[1:]
   if cmd == "login":
     if len(args) < 2:
       return "Insufficient arguments for command " + cmd
     username = args[0]
     password = args[1]
     try:
       user = Users.objects.get(username=username)
       if user.check_password(password):
         login(request, user)
         return "Login successful."
       else:
         return "Login failed, wrong password"
     except Exception as e:
       print(e)
       return "Login failed, no such user"
   elif cmd == 'logout':
     logout(request)
     return "Logged out"
   elif cmd == "createCourse":
     return "Pass - implemented in Web Interface not Command Line."
     if len(args) < 3:
       return "Insufficient arguments for command " + cmd
     coursename = args[0]
     department = args[1]
     coursenumber = args[2]
     permission = True  # todo : check permissions of active user
     Course.create(coursename, department, coursenumber).save()
     return "Course created successfully."
   elif cmd == "createAccount":
     if len(args) < 3:
       return "Insufficient arguments for command " + cmd
     username = args[0]
     password = args[1]
     role = int(args[2])
     try:
       permission = self.getActiveUser(request).is_at_least(4)
     except:
       return "Permission denied - Your role may not create accounts!"
     greater = self.getActiveUser(request).is_at_least(role)
     if permission:
       if not greater:
         return "Permission denied - Your role may not create accounts of this type!"
       else:
         try:
           user = Users.create(username, password, role)
           user.set_password(password) #hashing fix
           user.save() #ci looks for user in db so save first
           user.set_contact_info("","","","","","") #initialize ci
           user.save() #now save updated ci
         except:
           return "Account already exists!"
         return "Account created successfully."
     else:
       return "Permission denied - Your role may not create accounts!"
   elif cmd == "deleteAccount":
     if len(args) < 1:
       return "Insufficient arguments for command " + cmd
     username = args[0]
     permission = self.getActiveUser(request).is_at_least(4)
     user = Users.objects.filter(username=username)
     if len(user) == 0:
       return "No such user"
     if not self.getActiveUser(request).is_at_least(user[0].roles):
       return "Permission denied - Your role may not delete accounts of this type!"
     user[0].delete()
     return "User deleted"
   elif cmd == "editContactInfo":
     if len(args) < 6:
       return "Missing arguments"
     if len(args) > 6:
       return "Field does not exist"
     try:
       u = self.getActiveUser(request)
       if not u:
         return "Login a user first"
       if len(ContactInfo.objects.filter(account=u)) == 0:
         ContactInfo.create(u.username, args[0], args[1], args[2], args[3], args[4], args[5]).save()
         return "field successfully revised"
       u.editContactInfo(u, args[0], args[1], args[2], args[3], args[4], args[5])
       return "field successfully revised"
     except:
       return "Login a user first"
   # todo : support other commands
   elif cmd == "assignInstructor":
     return "Pass - implemented in Web Interface not Command Line."
     course = Course.objects.get(courseName=args[0])
     user = Users.objects.get(username=args[1])
     course.assign_instructor(user)
     return "Successfully added instructor to course"
   elif cmd == "removeInstructor":
     return "Pass - implemented in Web Interface not Command Line."
   elif cmd == "assignTACourse":
     return "Pass - implemented in Web Interface not Command Line."
     course = Course.objects.get(courseName=args[0])
     user = Users.objects.get(username=args[1])
     ta = TA.create(user, True, 1)
     ta.save()
     course.assign_TA(ta)
     return "Successfully added TA to course"
   elif cmd == "sendEmail":
     return "Failed- Unimplemented"
   elif cmd == "removeTACourse":
     return "Pass - implemented in Web Interface not Command Line."
     return
   elif cmd == "assignTALab":
     return "Pass - implemented in Web Interface not Command Line."
     lab = Lab.objects.get(labNumber=args[0])
     user = Users.objects.get(username=args[1])
     ta = TA.create(user, True, 1)
     ta.save()
     lab.assign_TA(ta)
     return "Successfully added TA to lab"
   elif cmd == "removeTALab":
     return "Pass - implemented in Web Interface not Command Line."
     return
   elif cmd == "courseAssignments":
     return "Pass - implemented in Web Interface not Command Line."
     return
   elif cmd == "readTAAssignment":
     return "Pass - implemented in Web Interface not Command Line."
     return
   elif cmd == "readAllTAAssignment":
     return "Pass - implemented in Web Interface not Command Line."
     return
   elif cmd == "readPublicContactInfo":
     return "Pass - implemented in Web Interface not Command Line."
   elif cmd == "readAllTAAssignments":
     return "Pass - implemented in Web Interface not Command Line."
   elif cmd == "editAccount":
     return "Pass - implemented in Web Interface not Command Line."
   else:
     return "Unrecognized command: " + cmd