def setUp(self): # create test user with permissions self.student_username = '******' self.instructor_username = '******' self.password = '******' self.student_user = User.objects.create_user( username=self.student_username, password=self.password) group = permissions.get_or_create_student_permissions() group.user_set.add(self.student_user) self.instructor_user = User.objects.create_user( username=self.instructor_username, password=self.password) group = permissions.get_or_create_instructor_permissions() group.user_set.add(self.instructor_user) self.client.login(username=self.instructor_username, password=self.password) # populate test database self.course = Course(name='Bounty Hunting 101') self.course.save() self.instructor = Instructor(user=self.instructor_user, wwuid='9994141') self.instructor.save() self.group = LabGroup(course=self.course, instructor=self.instructor, term='before', enroll_key='4') self.group.save() self.student = Student(user=self.student_user, wwuid='9994141', labgroup=self.group) self.student.save() self.template = AssignmentTemplate(course=self.course, name='Royalty Kidnapping Section A') self.template.save() # retrieve the view self.view_name = 'api:assignment-lc'
def setUp(self): # create test user with permissions self.instructor_username = '******' self.student_username = '******' self.password = '******' self.instructor_user = User.objects.create_user(username=self.instructor_username, password=self.password) self.student_user = User.objects.create_user(username=self.student_username, password=self.password) self.instructor_user.groups.add(permissions.get_or_create_instructor_permissions()) self.student_user.groups.add(permissions.get_or_create_student_permissions()) self.client.login(username=self.instructor_username, password=self.password) # Create foreign keys self.instructor = Instructor(user=self.instructor_user, wwuid="1234567") self.instructor.save() self.course_1 = Course(name="test course 1") self.course_1.save() self.course_2 = Course(name="test course 2") self.course_2.save() # add labgroups to database self.labgroup_1 = LabGroup(course=self.course_1, instructor=self.instructor, term='test1', enroll_key='test key 1') self.labgroup_1.save() self.labgroup_2 = LabGroup(course=self.course_1, instructor=self.instructor, term='test2', enroll_key='test key 2') self.labgroup_2.save() self.labgroup_3 = LabGroup(course=self.course_1, instructor=self.instructor, term='test3', enroll_key='test key 3') self.labgroup_3.save() # retrieve the view self.view_name = 'api:lab-group-rud'
def setUp(self): # create test users self.student_username = '******' self.instructor_username = '******' self.password = '******' self.student_user = User.objects.create_user( username=self.student_username, password=self.password) self.instructor_user = User.objects.create_user( username=self.instructor_username, password=self.password) group = permissions.get_or_create_instructor_permissions() group.user_set.add(self.instructor_user) group = permissions.get_or_create_student_permissions() group.user_set.add(self.student_user) self.client.login(username=self.student_username, password=self.password) # populate the database self.student = Student(labgroup=None, user=self.student_user, wwuid='1111111') self.student.save() self.instructor = Instructor(user=self.instructor_user, wwuid='2222222') self.instructor.save() self.course = Course(name='test name') self.course.save() self.labgroup = LabGroup(course=self.course, instructor=self.instructor, group_name='A', term='FALL2018', enroll_key='ABC') self.labgroup.save() # retrieve the view self.view_name = 'api:enroll'
def create(self, request, *args, **kwargs): response = super(StudentLCView, self).create(request, *args, **kwargs) # do not modify permissions if the request fails if response.status_code is not status.HTTP_201_CREATED: return response # add new student to the student group group = permissions.get_or_create_student_permissions() group.user_set.add(request.data['user']) return response
def setUp(self): # create test user with permissions self.instructor_username = '******' self.student_username = '******' self.password = '******' self.instructor_user = User.objects.create_user(username=self.instructor_username, password=self.password) self.student_user = User.objects.create_user(username=self.student_username, password=self.password) self.instructor_user.groups.add(permissions.get_or_create_instructor_permissions()) self.student_user.groups.add(permissions.get_or_create_student_permissions()) self.client.login(username=self.instructor_username, password=self.password) # retrieve the view self.view_name = 'api:lab-group-lc' # Create foreign keys self.instructor = Instructor(user=self.instructor_user, wwuid="1234567") self.instructor.save() self.course = Course(name="test_course") self.course.save()
def post(self, request): """ Enroll in a labgroup. """ # ensure all parameters are present in the request data for param in ('wwuid', 'labgroup', 'enroll_key'): if param not in request.data.keys(): return Response(status=status.HTTP_400_BAD_REQUEST) # load the labgroup from the database try: labgroup = LabGroup.objects.get(id=request.data['labgroup']) except LabGroup.DoesNotExist: return Response(status=status.HTTP_404_NOT_FOUND) # check enroll key if request.data['enroll_key'] != labgroup.enroll_key: return Response(status=status.HTTP_403_FORBIDDEN) # delete student if it exists try: student = Student.objects.get(user=request.user) student.delete() except Student.DoesNotExist: pass # validate student data in request student_data = { 'user': request.user.id, 'labgroup': labgroup.id, 'wwuid': request.data['wwuid'], } serializer = StudentSerializer(data=student_data) if not serializer.is_valid(): return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) # create the student student = Student(user=request.user, labgroup=labgroup, wwuid=request.data['wwuid']) student.save() # add new student to the student group group = permissions.get_or_create_student_permissions() group.user_set.add(request.user) # return successful response return Response(status=status.HTTP_204_NO_CONTENT)
def test_assignment_template_list_student(self): """ Tests that assignment templates are properly listed for students. """ # create a labgroup labgroup_1 = LabGroup(group_name='A', course=self.course, instructor=self.instructor, term=get_current_term(), enroll_key='ABC') labgroup_1.save() # create an unused labgroup labgroup_2 = LabGroup(group_name='B', course=self.course, instructor=self.instructor, term=get_current_term(), enroll_key='ABC') labgroup_2.save() # create student user student_user = User.objects.create_user(username='******', password=self.password) Student(user=student_user, wwuid='1111111', labgroup=labgroup_1).save() group = permissions.get_or_create_student_permissions() group.user_set.add(student_user) self.client.logout() self.client.login(username=student_user.username, password=self.password) # add assignment templates to database at1 = AssignmentTemplate(name='test name 1', course=self.course) at1.save() at2 = AssignmentTemplate(name='test name 2', course=self.course) at2.save() # assign student the first assignment template assignment = Assignment( assignment_template=at1, labgroup=labgroup_1, open_date=datetime.now(timezone(settings.TIME_ZONE)) - timedelta(days=1), close_date=datetime.now(timezone(settings.TIME_ZONE)) + timedelta(days=1)) assignment.save() # create different assignment Assignment(assignment_template=at2, labgroup=labgroup_2, open_date=datetime.now(timezone(settings.TIME_ZONE)) - timedelta(days=1), close_date=datetime.now(timezone(settings.TIME_ZONE)) + timedelta(days=1)) # request response = self.client.get(reverse(self.view_name)) response_body = json.loads(response.content.decode('utf-8')) # test response assignments = AssignmentTemplate.objects.all() self.assertEqual(response.status_code, status.HTTP_200_OK) self.assertEqual(len(response_body['templates']), 1) self.assertEqual(response_body['templates'][0]['pk'], assignments[0].id) self.assertEqual(response_body['templates'][0]['course'], assignments[0].course.id) self.assertEqual(response_body['templates'][0]['name'], assignments[0].name)