Beispiel #1
0
 def test_labgroup_filter_by_course(self):
     """
     Tests that labgroups can be filtered by the courses query parameter.
     """
     # add course to database
     course = Course(name='course name')
     course.save()
     # add labgroups to database
     labgroup = LabGroup(course=course,
                         instructor=self.instructor,
                         group_name='test name 1',
                         term=get_current_term(),
                         enroll_key='test key 1')
     labgroup.save()
     LabGroup(course=self.course,
              instructor=self.instructor,
              group_name='test name 2',
              term=get_current_term(),
              enroll_key='test key 2').save()
     # request
     response = self.client.get(reverse(self.view_name), {'course': course.id})
     response_body = json.loads(response.content.decode('utf-8'))
     # test response
     self.assertEqual(response.status_code, status.HTTP_200_OK)
     self.assertEqual(len(response_body['labgroups']), 1)
     self.assertEqual(response_body['labgroups'][0]['pk'], labgroup.id)
     self.assertEqual(response_body['labgroups'][0]['course'], labgroup.course.id)
     self.assertEqual(response_body['labgroups'][0]['instructor'], labgroup.instructor.id)
     self.assertEqual(response_body['labgroups'][0]['group_name'], labgroup.group_name)
     self.assertEqual(response_body['labgroups'][0]['term'], labgroup.term)
     self.assertEqual(response_body['labgroups'][0]['enroll_key'], labgroup.enroll_key)
    def setUp(self):
        # create test user with permissions
        self.username = '******'
        self.password = '******'
        self.user = User.objects.create_user(username=self.username, password=self.password)
        Instructor(user=self.user, wwuid='9999999').save()
        group = permissions.get_or_create_instructor_permissions()
        group.user_set.add(self.user)
        self.client.login(username=self.username, password=self.password)
        # add courses and or templates to database
        self.course = Course(name="Astrophysics 820")
        self.course.save()
        self.template = AssignmentTemplate(name='Gravitational Vortices', course=self.course)
        self.template.save()
        self.template_2 = AssignmentTemplate(name='Cosmic Drift', course=self.course)
        self.template_2.save()

        self.task_template_1 = TaskTemplate(assignment_template=self.template, problem_num=1,
                                            summary='This is a summary.', prompt='This is the prompt1',
                                            prompt_format='CAF-citation', image_urls='all', attempts_allowed=1,
                                            numeric_accuracy=1, numeric_only=False)
        self.task_template_1.save()
        self.task_template_2 = TaskTemplate(assignment_template=self.template, problem_num=2,
                                            summary='This is a summary.', prompt='This is the prompt2',
                                            prompt_format='CAF-citation', image_urls='all', attempts_allowed=2,
                                            numeric_accuracy=2, numeric_only=False)
        self.task_template_2.save()
        self.task_template_3 = TaskTemplate(assignment_template=self.template, problem_num=3,
                                            summary='This is a summary.', prompt='This is the prompt3',
                                            prompt_format='SIGFIGS', image_urls='all', attempts_allowed=3,
                                            numeric_accuracy=3, numeric_only=True)
        self.task_template_3.save()

        # retrieve the view
        self.view_name = 'api:task-template-rud'
Beispiel #3
0
 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'
Beispiel #4
0
 def setUp(self):
     # create test user with permissions
     self.username = '******'
     self.password = '******'
     self.student_username = '******'
     self.instructor_user = User.objects.create_user(username=self.username,
                                                     password=self.password)
     group = permissions.get_or_create_instructor_permissions()
     group.user_set.add(self.instructor_user)
     self.student_user = User.objects.create_user(
         username=self.student_username, password=self.password)
     self.client.login(username=self.username, password=self.password)
     # populate test database
     self.instructor = Instructor(user=self.instructor_user,
                                  wwuid='9994141')
     self.instructor.save()
     self.course = Course(name='fact')
     self.course.save()
     self.group = LabGroup(course=self.course,
                           instructor=self.instructor,
                           term='never',
                           enroll_key='6')
     self.group.save()
     # retrieve the view
     self.view_name = 'api:student-lc'
Beispiel #5
0
 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'
Beispiel #6
0
 def test_assignment_update_template_course_incompatible(self):
     """
     Tests that an assignment is not created when the assignment template doesn't belong to a shared course.
     """
     # create different course
     course = Course(name='other course')
     course.save()
     # create different template
     template = AssignmentTemplate(course=course, name='other template')
     template.save()
     # request
     current_time = datetime.now(timezone(settings.TIME_ZONE))
     request_body = {
         'assignment_template':
         template.id,
         'labgroup':
         self.group.id,
         'open_date':
         (current_time - timedelta(days=1)).strftime('%Y-%m-%dT%H:%M:%SZ'),
         'close_date':
         (current_time + timedelta(days=1)).strftime('%Y-%m-%dT%H:%M:%SZ'),
     }
     response = self.client.put(
         reverse(self.view_name, args=[self.assignment.id]), request_body)
     # test response
     self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
     # test database
     assignment = Assignment.objects.get(id=self.assignment.id)
     self.assertNotEqual(assignment.assignment_template, template)
Beispiel #7
0
 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'
Beispiel #8
0
 def setUp(self):
     # create test user with permissions and test student user
     self.instructor_username = '******'
     self.student_username_1 = 'test student 1'
     self.student_username_2 = 'test student 2'
     self.student_username_3 = 'test student 3'
     self.password = '******'
     self.student_user_1 = User.objects.create_user(
         username=self.student_username_1, password=self.password)
     self.student_user_2 = User.objects.create_user(
         username=self.student_username_2, password=self.password)
     self.student_user_3 = User.objects.create_user(
         username=self.student_username_3, password=self.password)
     self.instructor_user = User.objects.create_user(
         username=self.instructor_username, password=self.password)
     self.instructor_user.user_permissions.add(
         Permission.objects.get(codename='change_student'))
     self.instructor_user.user_permissions.add(
         Permission.objects.get(codename='delete_student'))
     self.client.login(username=self.instructor_username,
                       password=self.password)
     # populate database
     self.instructor = Instructor(user=self.instructor_user,
                                  wwuid='9999999')
     self.instructor.save()
     self.course = Course(name='test course')
     self.course.save()
     self.group_1 = LabGroup(course=self.course,
                             instructor=self.instructor,
                             term='never',
                             enroll_key='6')
     self.group_1.save()
     self.group_2 = LabGroup(course=self.course,
                             instructor=self.instructor,
                             term='ever',
                             enroll_key='8')
     self.group_2.save()
     self.student_1 = Student(user=self.student_user_1,
                              labgroup=self.group_1,
                              wwuid='1111111')
     self.student_1.save()
     self.student_2 = Student(user=self.student_user_2,
                              labgroup=self.group_1,
                              wwuid='2222222')
     self.student_2.save()
     self.student_3 = Student(user=self.student_user_3,
                              labgroup=self.group_1,
                              wwuid='3333333')
     self.student_3.save()
     # retrieve the view
     self.view_name = 'api:student-rud'
Beispiel #9
0
 def test_course_list(self):
     """
     Tests that courses are properly listed.
     """
     # add courses to database
     Course(name='test name 1').save()
     Course(name='test name 2').save()
     # request
     response = self.client.get(reverse(self.view_name))
     response_body = json.loads(response.content.decode('utf-8'))
     # test response
     courses = Course.objects.all()
     self.assertEqual(response.status_code, status.HTTP_200_OK)
     self.assertEqual(response_body['courses'][0]['pk'], courses[0].id)
     self.assertEqual(response_body['courses'][0]['name'], courses[0].name)
     self.assertEqual(response_body['courses'][1]['pk'], courses[1].id)
     self.assertEqual(response_body['courses'][1]['name'], courses[1].name)
Beispiel #10
0
 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()
Beispiel #11
0
 def setUp(self):
     # create test user with permissions
     self.username = '******'
     self.password = '******'
     self.instructor_user = User.objects.create_user(username=self.username,
                                                     password=self.password)
     self.instructor_user.user_permissions.add(
         Permission.objects.get(codename='add_assignment'))
     self.instructor_user.user_permissions.add(
         Permission.objects.get(codename='change_assignment'))
     self.instructor_user.user_permissions.add(
         Permission.objects.get(codename='delete_assignment'))
     self.client.login(username=self.username, password=self.password)
     # populate test database
     self.instructor = Instructor(user=self.instructor_user,
                                  wwuid='9994141')
     self.instructor.save()
     self.course = Course(name='Bounty Hunting 101')
     self.course.save()
     self.group = LabGroup(course=self.course,
                           instructor=self.instructor,
                           term='before',
                           enroll_key='4')
     self.group.save()
     self.template = AssignmentTemplate(course=self.course,
                                        name='Royalty Kidnapping Section A')
     self.template.save()
     self.assignment = Assignment(assignment_template=self.template,
                                  labgroup=self.group,
                                  open_date='2013-12-10T22:22:22Z',
                                  close_date='2014-12-10T22:22:22Z')
     self.assignment.save()
     self.assignment2 = Assignment(assignment_template=self.template,
                                   labgroup=self.group,
                                   open_date='2014-12-10T22:22:22Z',
                                   close_date='2015-12-10T22:22:22Z')
     self.assignment2.save()
     self.assignment3 = Assignment(assignment_template=self.template,
                                   labgroup=self.group,
                                   open_date='1492-12-10T22:22:22Z',
                                   close_date='3012-12-10T22:22:22Z')
     self.assignment3.save()
     # retrieve the view
     self.view_name = 'api:assignment-rud'
    def setUp(self):
        # create test user with permissions
        self.instructor_username = '******'
        self.password = '******'
        self.instructor_user = User.objects.create_user(
            username=self.instructor_username, password=self.password)
        self.instructor = Instructor(user=self.instructor_user,
                                     wwuid='9999999')
        self.instructor.save()
        group = permissions.get_or_create_instructor_permissions()
        group.user_set.add(self.instructor_user)
        self.client.login(username=self.instructor_username,
                          password=self.password)
        # retrieve the view
        self.view_name = 'api:template-lc'

        # make a fake course
        self.course = Course(name="TestCourse")
        self.course.save()
 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)
     self.instructor_user = User.objects.create_user(
         username=self.instructor_username, password=self.password)
     self.client.login(username=self.student_username,
                       password=self.password)
     # populate test database
     self.instructor = Instructor(user=self.instructor_user,
                                  wwuid='9994141')
     self.instructor.save()
     self.course = Course(name='Bounty Hunting 101')
     self.course.save()
     self.group = LabGroup(course=self.course,
                           instructor=self.instructor,
                           term=get_current_term(),
                           enroll_key='4',
                           group_name='Group A')
     self.group.save()
     self.student = Student(user=self.student_user,
                            labgroup=self.group,
                            wwuid='1111111')
     self.student.save()
     self.template = AssignmentTemplate(course=self.course,
                                        name='Royalty Kidnapping Section A')
     self.template.save()
     self.assignment = Assignment(
         assignment_template=self.template,
         labgroup=self.group,
         open_date=datetime.now(timezone(settings.TIME_ZONE)),
         close_date=datetime.now(timezone(settings.TIME_ZONE)) +
         timedelta(days=1))
     self.assignment.save()
     self.assignment_entry = AssignmentEntry(student=self.student,
                                             assignment=self.assignment)
     self.assignment_entry.save()
     # retrieve the view
     self.view_name = 'api:assignment-entry-submit'
Beispiel #14
0
def updateCourseData(request):
	START = 0
	LIMIT = 1000
	count = 0

	url = 'http://oars.cc.iitk.ac.in:4040/Common/CourseListing.asp'
	page = urllib2.urlopen(url)
	soup = BeautifulSoup(page.read())

	course_codes = soup.find_all('a')

	for code in course_codes:
		if count < START:
			count += 1
			continue
		if count > LIMIT:
			break
		course = code.text.strip()
		course_url = 'http://oars.cc.iitk.ac.in:4040/Utils/CourseInfoPopup2.asp?Course='+course
		course_page = urllib2.urlopen(course_url)
		course_soup = BeautifulSoup(course_page.read())

		cells = course_soup.find_all('td')

		title = cells[3].text.strip()
		instr = cells[5].text.strip()
		instr_mail = cells[7].text.strip()
		prereq = cells[9].text.strip()
		credits_distrb = cells[11].text.strip()
		credits = int(credits_distrb.split('-')[-1])
		dept = cells[13].text.strip()
		schedule = cells[15].text.strip()
		instr_notes = cells[17].text.strip()

		course_model = Course(code=course,title=title,instructor=instr,instr_mail=instr_mail,prereq=prereq,credits=credits,credits_distrb=credits_distrb,dept=dept,schedule=schedule,instr_notes=instr_notes)
		course_model.save()
		print course
		count += 1

	print 'count = ', count
	print 'Last inserted course : %s' % course
Beispiel #15
0
 def create(self, request, *args, **kwargs):
     """
     Override create method to create access codes as well.
     :param request: POST with 'name', 'description', 'students', 'tas, 'instructors'. Last three fields optional.
     :return: 201 response
     """
     data = request.data
     course = Course(name=data['name'], description=data['description'])
     course.save()
     # convert to dict to deal with issues of managing the lists passed in
     data = dict(data)
     students, tas, instructors = [], [], []
     # set the students, tas, and instructors
     if 'students' in data:
         students = User.objects.filter(id__in=data['students'])
     if 'tas' in data:
         tas = User.objects.filter(id__in=data['tas'])
     if 'instructors' in data:
         instructors = User.objects.filter(id__in=data['instructors'])
     course.students.set(students)
     course.tas.set(tas)
     course.instructors.set(instructors)
     generate_access_codes(course)
     course.save()
     return Response(status=status.HTTP_201_CREATED)
 def setUp(self):
     # create test user with permissions
     self.username = '******'
     self.password = '******'
     self.user = User.objects.create_user(username=self.username,
                                          password=self.password)
     Instructor(user=self.user, wwuid='9999999').save()
     group = permissions.get_or_create_instructor_permissions()
     group.user_set.add(self.user)
     self.client.login(username=self.username, password=self.password)
     # add courses and or templates to database
     self.course = Course(name="testcourse")
     self.course.save()
     self.template_1 = AssignmentTemplate(name='test name 1',
                                          course=self.course)
     self.template_1.save()
     self.template_2 = AssignmentTemplate(name='test name 2',
                                          course=self.course)
     self.template_2.save()
     self.template_3 = AssignmentTemplate(name='test name 3',
                                          course=self.course)
     self.template_3.save()
     # retrieve the view
     self.view_name = 'api:template-rud'
Beispiel #17
0
def course(db):
    phase = Phase(title='Lobby', timer=False)
    phase.save()
    phase2 = Phase(title='calculate', timer=True)
    phase2.save()
    course = Course(title='Math', default_phase=phase)
    course.save()
    course.phases.add(phase)
    course.phases.add(phase2)
    course.save()
    return course
Beispiel #18
0
    def create_courses(self):
        with open('optimizer/resources/static/courses.csv', 'rU') as course_file:
            course_reader = csv.DictReader(course_file)
            for c in course_reader:
                db_course = Course(course_name=c['course_name'],
                                   course_number=c['course_number'],
                                   is_fall=(c['fall_term'] is '1'),
                                   is_spring=(c['spring_term'] is '1'),
                                   is_summer=(c['summer_term'] is '1'),
                                   availability_string=c['availability'])

                db_session.add(db_course)
                db_session.flush()
                self.courses[db_course.id] = dict(is_fall=db_course.is_fall, is_spring=db_course.is_spring,
                                                    is_summer=db_course.is_summer)

            db_session.commit()
    def setUp(self):
        course_a = Course(
            name=f'Course A',
            description='',
            start_date=datetime.date.today(),
            end_date=datetime.date.today() + datetime.timedelta(days=1),
        )
        course_b = Course(
            name=f'Course B',
            description='',
            start_date=datetime.date.today(),
            end_date=datetime.date.today() + datetime.timedelta(days=1),
        )
        course_a.save()
        course_b.save()

        student_a = Student(first_name="Student A",
                            last_name="aaa",
                            email="*****@*****.**")
        student_b = Student(first_name="Student B",
                            last_name="bbb",
                            email="*****@*****.**")
        student_a.save()
        student_b.save()

        participants = [
            CourseParticipant(course=course_a,
                              student=student_a,
                              completed=True),
            CourseParticipant(course=course_b,
                              student=student_b,
                              completed=False),
            CourseParticipant(course=course_a,
                              student=student_b,
                              completed=True),
        ]
        CourseParticipant.objects.bulk_create(participants)
Beispiel #20
0
 def setUp(self):
     # create test user with permissions
     self.username = '******'
     self.password = '******'
     self.user = User.objects.create_user(username=self.username, password=self.password)
     self.user.user_permissions.add(Permission.objects.get(codename='change_course'))
     self.user.user_permissions.add(Permission.objects.get(codename='delete_course'))
     self.client.login(username=self.username, password=self.password)
     # add courses to database
     self.course_1 = Course(name='test name 1')
     self.course_1.save()
     self.course_2 = Course(name='test name 2')
     self.course_2.save()
     self.course_3 = Course(name='test name 3')
     self.course_3.save()
     # retrieve the view
     self.view_name = 'api:course-rud'
Beispiel #21
0
class StudentRUDTest(APITestCase):
    """
    Test cases for retrieve, update, and destroy requests on StudentRUDView.
    """
    def setUp(self):
        # create test user with permissions and test student user
        self.instructor_username = '******'
        self.student_username_1 = 'test student 1'
        self.student_username_2 = 'test student 2'
        self.student_username_3 = 'test student 3'
        self.password = '******'
        self.student_user_1 = User.objects.create_user(
            username=self.student_username_1, password=self.password)
        self.student_user_2 = User.objects.create_user(
            username=self.student_username_2, password=self.password)
        self.student_user_3 = User.objects.create_user(
            username=self.student_username_3, password=self.password)
        self.instructor_user = User.objects.create_user(
            username=self.instructor_username, password=self.password)
        self.instructor_user.user_permissions.add(
            Permission.objects.get(codename='change_student'))
        self.instructor_user.user_permissions.add(
            Permission.objects.get(codename='delete_student'))
        self.client.login(username=self.instructor_username,
                          password=self.password)
        # populate database
        self.instructor = Instructor(user=self.instructor_user,
                                     wwuid='9999999')
        self.instructor.save()
        self.course = Course(name='test course')
        self.course.save()
        self.group_1 = LabGroup(course=self.course,
                                instructor=self.instructor,
                                term='never',
                                enroll_key='6')
        self.group_1.save()
        self.group_2 = LabGroup(course=self.course,
                                instructor=self.instructor,
                                term='ever',
                                enroll_key='8')
        self.group_2.save()
        self.student_1 = Student(user=self.student_user_1,
                                 labgroup=self.group_1,
                                 wwuid='1111111')
        self.student_1.save()
        self.student_2 = Student(user=self.student_user_2,
                                 labgroup=self.group_1,
                                 wwuid='2222222')
        self.student_2.save()
        self.student_3 = Student(user=self.student_user_3,
                                 labgroup=self.group_1,
                                 wwuid='3333333')
        self.student_3.save()
        # retrieve the view
        self.view_name = 'api:student-rud'

    def test_student_retrieve(self):
        """
        Tests that a student is properly retrieved.
        """
        # request
        response = self.client.get(
            reverse(self.view_name, args=[self.student_2.id]))
        response_body = json.loads(response.content.decode('utf-8'))
        # test response
        self.assertEqual(response.status_code, status.HTTP_200_OK)
        self.assertEqual(response_body['user'], self.student_2.user.id)
        self.assertEqual(response_body['labgroup'], self.student_2.labgroup.id)
        self.assertEqual(response_body['wwuid'], self.student_2.wwuid)

    def test_student_update(self):
        """
        Tests that a student is properly updated.
        """
        # modify values
        request_body = {
            'user': self.student_user_2.id,
            'labgroup': self.group_2.id,
            'wwuid': '8888888',
        }
        # request
        response = self.client.put(
            reverse(self.view_name, args=[self.student_2.id]), request_body)
        response_body = json.loads(response.content.decode('utf-8'))
        # test database
        student = Student.objects.filter(user=self.student_user_2).first()
        self.assertEqual(student.user.id, request_body['user'])
        self.assertEqual(student.labgroup.id, request_body['labgroup'])
        self.assertEqual(student.wwuid, request_body['wwuid'])
        # test response
        self.assertEqual(response.status_code, status.HTTP_200_OK)
        self.assertEqual(response_body['user'], request_body['user'])
        self.assertEqual(response_body['labgroup'], request_body['labgroup'])
        self.assertEqual(response_body['wwuid'], request_body['wwuid'])

    def test_student_destroy(self):
        """
        Tests that a student is properly destroyed.
        """
        # request
        response = self.client.delete(
            reverse(self.view_name, args=[self.student_2.id]))
        # test database
        students = Student.objects.all()
        self.assertTrue(self.student_1 in students)
        self.assertTrue(self.student_2 not in students)
        self.assertTrue(self.student_3 in students)
        # test response
        self.assertEqual(response.status_code, status.HTTP_204_NO_CONTENT)
Beispiel #22
0
class StudentLCTest(APITestCase):
    """
    Test cases for list and create requests on StudentLCView.
    """
    def setUp(self):
        # create test user with permissions
        self.username = '******'
        self.password = '******'
        self.student_username = '******'
        self.instructor_user = User.objects.create_user(username=self.username,
                                                        password=self.password)
        group = permissions.get_or_create_instructor_permissions()
        group.user_set.add(self.instructor_user)
        self.student_user = User.objects.create_user(
            username=self.student_username, password=self.password)
        self.client.login(username=self.username, password=self.password)
        # populate test database
        self.instructor = Instructor(user=self.instructor_user,
                                     wwuid='9994141')
        self.instructor.save()
        self.course = Course(name='fact')
        self.course.save()
        self.group = LabGroup(course=self.course,
                              instructor=self.instructor,
                              term='never',
                              enroll_key='6')
        self.group.save()
        # retrieve the view
        self.view_name = 'api:student-lc'

    def test_student_create(self):
        """
        Tests that a student is properly created.
        """
        # request
        request_body = {
            'user': self.student_user.id,
            'labgroup': self.group.id,
            'wwuid': '16',
        }
        response = self.client.post(reverse(self.view_name), request_body)
        response_body = json.loads(response.content.decode('utf-8'))
        # test database
        student = Student.objects.first()
        self.assertEqual(student.user.id, request_body['user'])
        self.assertEqual(student.labgroup.id, request_body['labgroup'])
        self.assertEqual(student.wwuid, request_body['wwuid'])
        # test response
        self.assertEqual(response.status_code, status.HTTP_201_CREATED)
        self.assertEqual(response_body['user'], request_body['user'])
        self.assertEqual(response_body['labgroup'], request_body['labgroup'])
        self.assertEqual(response_body['wwuid'], request_body['wwuid'])

    def test_student_permissions(self):
        """
        Tests that a student's user is assigned the appropriate permissions.
        """
        # request
        request_body = {'wwuid': '1111111', 'user': self.student_user.id}
        self.client.post(reverse(self.view_name), request_body)
        # check that the user is in the instructor group
        self.assertTrue(
            self.student_user.groups.filter(name='Student').exists())

    def test_student_list(self):
        """
        Tests that students are properly listed.
        """
        # add students to database
        Student(user=self.student_user, labgroup=self.group, wwuid='64').save()
        Student(user=self.instructor_user, labgroup=self.group,
                wwuid='12').save()
        # request
        response = self.client.get(reverse(self.view_name))
        response_body = json.loads(response.content.decode('utf-8'))
        # test response
        students = Student.objects.all()
        self.assertEqual(response.status_code, status.HTTP_200_OK)
        self.assertEqual(response_body['students'][0]['user'],
                         students[0].user.id)
        self.assertEqual(response_body['students'][0]['labgroup'],
                         students[0].labgroup.id)
        self.assertEqual(response_body['students'][0]['wwuid'],
                         students[0].wwuid)
        self.assertEqual(response_body['students'][1]['user'],
                         students[1].user.id)
        self.assertEqual(response_body['students'][1]['labgroup'],
                         students[1].labgroup.id)
        self.assertEqual(response_body['students'][1]['wwuid'],
                         students[1].wwuid)

    def test_student_list_not_shown_to_students(self):
        """
        Tests that students are not listed to other students.
        """
        # login the student
        self.client.logout()
        self.client.login(username=self.student_username,
                          password=self.password)
        # add students to database
        Student(user=self.student_user, labgroup=self.group, wwuid='64').save()
        Student(user=self.instructor_user, labgroup=self.group,
                wwuid='12').save()
        # request
        response = self.client.get(reverse(self.view_name))
        # test response
        self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN)
class AssignmentEntryEntrySubmitTest(APITestCase):
    """
    Test cases for submitting assignment on AssignmentEntrySubmitView.
    """
    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)
        self.instructor_user = User.objects.create_user(
            username=self.instructor_username, password=self.password)
        self.client.login(username=self.student_username,
                          password=self.password)
        # populate test database
        self.instructor = Instructor(user=self.instructor_user,
                                     wwuid='9994141')
        self.instructor.save()
        self.course = Course(name='Bounty Hunting 101')
        self.course.save()
        self.group = LabGroup(course=self.course,
                              instructor=self.instructor,
                              term=get_current_term(),
                              enroll_key='4',
                              group_name='Group A')
        self.group.save()
        self.student = Student(user=self.student_user,
                               labgroup=self.group,
                               wwuid='1111111')
        self.student.save()
        self.template = AssignmentTemplate(course=self.course,
                                           name='Royalty Kidnapping Section A')
        self.template.save()
        self.assignment = Assignment(
            assignment_template=self.template,
            labgroup=self.group,
            open_date=datetime.now(timezone(settings.TIME_ZONE)),
            close_date=datetime.now(timezone(settings.TIME_ZONE)) +
            timedelta(days=1))
        self.assignment.save()
        self.assignment_entry = AssignmentEntry(student=self.student,
                                                assignment=self.assignment)
        self.assignment_entry.save()
        # retrieve the view
        self.view_name = 'api:assignment-entry-submit'

    def test_assignment_entry_submit(self):
        """
        Tests that an assignment is properly submitted.
        """
        # request
        response = self.client.post(
            reverse(self.view_name, args=[self.assignment.id]))
        response_body = json.loads(response.content.decode('utf-8'))
        # test database
        assignment_entry = AssignmentEntry.objects.get(
            id=self.assignment_entry.id)
        self.assertEqual(assignment_entry.student, self.student)
        self.assertEqual(assignment_entry.assignment, self.assignment)
        self.assertNotEqual(assignment_entry.start_date, None)
        self.assertNotEqual(assignment_entry.submit_date, None)
        # test response
        self.assertEqual(response.status_code, status.HTTP_200_OK)
        self.assertEqual(response_body['pk'], assignment_entry.id)
        self.assertEqual(response_body['student'], self.student.id)
        self.assertEqual(response_body['assignment'], self.assignment.id)
        self.assertTrue('start_date' in response_body.keys())
        self.assertTrue('submit_date' in response_body.keys())

    def test_assignment_entry_does_not_exist(self):
        """
        Tests that nothing happens when the assignment does not exist.
        """
        # request
        response = self.client.post(reverse(self.view_name, args=[0]))
        # test database
        assignment_entry = AssignmentEntry.objects.get(
            id=self.assignment_entry.id)
        self.assertEqual(assignment_entry.submit_date, None)
        # test response
        self.assertEqual(response.status_code, status.HTTP_404_NOT_FOUND)

    def test_assignment_entry_not_started(self):
        """
        Tests that nothing happens when the assignment entry has not been started.
        """
        # delete assignment_entry
        self.assignment_entry.delete()
        # request
        response = self.client.post(
            reverse(self.view_name, args=[self.assignment.id]))
        # test database
        self.assertEqual(len(AssignmentEntry.objects.all()), 0)
        # test response
        self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)

    def test_assignment_entry_already_submitted(self):
        """
        Tests that nothing happens when the assignment entry has already been submitted.
        """
        # submit assignment
        self.assignment_entry.submit_date = datetime.now(
            timezone(settings.TIME_ZONE))
        self.assignment_entry.save()
        # request
        response = self.client.post(
            reverse(self.view_name, args=[self.assignment.id]))
        # test response
        self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
        # test database
        self.assertEqual(
            AssignmentEntry.objects.get(
                id=self.assignment_entry.id).submit_date,
            self.assignment_entry.submit_date)

    def test_assignment_closed(self):
        """
        Tests that nothing happens when the user tries to start an assignment that has been closed.
        """
        # modify open dates
        self.assignment.open_date = datetime.now(timezone(
            settings.TIME_ZONE)) - timedelta(days=2)
        self.assignment.close_date = datetime.now(timezone(
            settings.TIME_ZONE)) - timedelta(days=1)
        self.assignment.save()
        # request
        response = self.client.post(
            reverse(self.view_name, args=[self.assignment.id]))
        # test response
        self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN)
        # test database
        self.assertEqual(self.assignment_entry.submit_date, None)
Beispiel #24
0
class LabGroupRUDTest(APITestCase):
    """
    Test cases for retrieve, update, and destroy requests on LabGroupRUDView.
    """

    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 test_labgroup_retrieve_instructor(self):
        """
        Tests that a labgroup is properly retrieved for instructors.
        """
        # request
        response = self.client.get(reverse(self.view_name, args=[self.labgroup_2.id]))
        response_body = json.loads(response.content.decode('utf-8'))
        # test response
        self.assertEqual(response.status_code, status.HTTP_200_OK)
        self.assertEqual(response_body['pk'], self.labgroup_2.id)
        self.assertEqual(response_body['course'], self.labgroup_2.course.id)
        self.assertEqual(response_body['term'], self.labgroup_2.term)
        self.assertEqual(response_body['group_name'], self.labgroup_2.group_name)
        self.assertEqual(response_body['instructor'], self.labgroup_2.instructor.id)
        self.assertEqual(response_body['enroll_key'], self.labgroup_2.enroll_key)

    def test_labgroup_retrieve_student(self):
        """
        Tests that a labgroup is properly retrieved for students.
        """
        # request
        self.client.logout()
        self.client.login(username=self.student_username, password=self.password)
        response = self.client.get(reverse(self.view_name, args=[self.labgroup_2.id]))
        response_body = json.loads(response.content.decode('utf-8'))
        # test response
        self.assertEqual(response.status_code, status.HTTP_200_OK)
        self.assertEqual(response_body['pk'], self.labgroup_2.id)
        self.assertEqual(response_body['course'], self.labgroup_2.course.id)
        self.assertEqual(response_body['term'], self.labgroup_2.term)
        self.assertEqual(response_body['group_name'], self.labgroup_2.group_name)
        self.assertEqual(response_body['instructor'], self.labgroup_2.instructor.id)
        self.assertTrue('enroll_key' not in response_body.keys())

    def test_labgroup_update(self):
        """
        Tests that a labgroup is properly updated.
        """
        # modify values
        request_body = {
            'course': self.course_2.id,
            'instructor': self.instructor.id,
            'group_name': 'changed',
            'term': 'FALL2000',
            'enroll_key': 'changed',
        }
        # request
        response = self.client.put(reverse(self.view_name, args=[self.labgroup_2.id]), request_body)
        response_body = json.loads(response.content.decode('utf-8'))
        # test database
        labgroup = LabGroup.objects.get(id=self.labgroup_2.id)
        self.assertEqual(labgroup.id, self.labgroup_2.id)
        self.assertEqual(labgroup.course.id, request_body['course'])
        self.assertEqual(labgroup.group_name, request_body['group_name'])
        self.assertEqual(labgroup.instructor.id, request_body['instructor'])
        self.assertEqual(labgroup.term, request_body['term'])
        self.assertEqual(labgroup.enroll_key, request_body['enroll_key'])
        # test response
        self.assertEqual(response.status_code, status.HTTP_200_OK)
        self.assertEqual(response_body['pk'], self.labgroup_2.id)
        self.assertEqual(response_body['course'], request_body['course'])
        self.assertEqual(response_body['group_name'], request_body['group_name'])
        self.assertEqual(response_body['instructor'], request_body['instructor'])
        self.assertEqual(response_body['term'], request_body['term'])
        self.assertEqual(response_body['enroll_key'], request_body['enroll_key'])

    def test_labgroup_destroy(self):
        """
        Tests that a labgroup is properly destroyed.
        """
        # request
        response = self.client.delete(reverse(self.view_name, args=[self.labgroup_2.id]))
        # test database
        labgroups = LabGroup.objects.all()
        self.assertTrue(self.labgroup_1 in labgroups)
        self.assertTrue(self.labgroup_2 not in labgroups)
        self.assertTrue(self.labgroup_3 in labgroups)
        # test response
        self.assertEqual(response.status_code, status.HTTP_204_NO_CONTENT)
class AssignmentEntryStartTest(APITestCase):
    """
    Test cases for starting assignments on AssignmentEntryStartView.
    """
    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)
        self.instructor_user = User.objects.create_user(
            username=self.instructor_username, password=self.password)
        self.client.login(username=self.student_username,
                          password=self.password)
        # populate test database
        self.instructor = Instructor(user=self.instructor_user,
                                     wwuid='9994141')
        self.instructor.save()
        self.course = Course(name='Bounty Hunting 101')
        self.course.save()
        self.group = LabGroup(course=self.course,
                              instructor=self.instructor,
                              term=get_current_term(),
                              enroll_key='4',
                              group_name='Group A')
        self.group.save()
        self.student = Student(user=self.student_user,
                               labgroup=self.group,
                               wwuid='1111111')
        self.student.save()
        self.template = AssignmentTemplate(course=self.course,
                                           name='Royalty Kidnapping Section A')
        self.template.save()
        self.assignment = Assignment(
            assignment_template=self.template,
            labgroup=self.group,
            open_date=datetime.now(timezone(settings.TIME_ZONE)),
            close_date=datetime.now(timezone(settings.TIME_ZONE)) +
            timedelta(days=1))
        self.assignment.save()
        # retrieve the view
        self.view_name = 'api:assignment-entry-start'

    def test_assignment_start(self):
        """
        Tests that an assignment entry is properly created.
        """
        # request
        response = self.client.post(
            reverse(self.view_name, args=[self.assignment.id]))
        response_body = json.loads(response.content.decode('utf-8'))
        # test return code
        self.assertEqual(response.status_code, status.HTTP_201_CREATED)
        # test database
        assignment_entry = AssignmentEntry.objects.get(id=response_body['pk'])
        self.assertEqual(assignment_entry.student, self.student)
        self.assertEqual(assignment_entry.assignment, self.assignment)
        self.assertNotEqual(assignment_entry.start_date, None)
        self.assertEqual(assignment_entry.submit_date, None)
        # test response
        self.assertEqual(response_body['pk'], assignment_entry.id)
        self.assertEqual(response_body['student'], assignment_entry.student.id)
        self.assertEqual(
            datetime.strptime(response_body['start_date'],
                              '%Y-%m-%dT%H:%M:%S.%fZ'),
            assignment_entry.start_date.replace(tzinfo=None))
        self.assertEqual(response_body['submit_date'], None)

    def test_assignment_start_duplicate(self):
        """
        Tests that nothing happens when the assignment is started more than once.
        """
        # create extra assignment entry
        self.client.post(reverse(self.view_name, args=[self.assignment.id]))
        # request
        response = self.client.post(
            reverse(self.view_name, args=[self.assignment.id]))
        # test database
        self.assertEqual(len(AssignmentEntry.objects.all()), 1)
        # test response
        self.assertEqual(response.status_code, status.HTTP_409_CONFLICT)

    def test_assignment_does_not_exist(self):
        """
        Tests that nothing happens when the assignment does not exist.
        """
        response = self.client.post(reverse(self.view_name, args=[0]))
        # test database
        self.assertEqual(len(AssignmentEntry.objects.all()), 0)
        # test response
        self.assertEqual(response.status_code, status.HTTP_404_NOT_FOUND)

    def test_student_not_assigned_assignment(self):
        """
        Tests that nothing happens when the user tries to start an assignment not assigned to their labgroup.
        """
        # add user to different labgroup
        new_labgroup = LabGroup(course=self.course,
                                instructor=self.instructor,
                                term=get_current_term(),
                                enroll_key='ABC',
                                group_name='Group B')
        new_labgroup.save()
        self.student.labgroup = new_labgroup
        self.student.save()
        # request
        response = self.client.post(
            reverse(self.view_name, args=[self.assignment.id]))
        # test database
        self.assertEqual(len(AssignmentEntry.objects.all()), 0)
        # test response
        self.assertEqual(response.status_code, status.HTTP_404_NOT_FOUND)

    def test_assignment_not_open(self):
        """
        Tests that nothing happens when the user tries to start an assignment that is not open.
        """
        # modify open dates
        self.assignment.open_date = datetime.now(timezone(
            settings.TIME_ZONE)) + timedelta(days=1)
        self.assignment.close_date = datetime.now(timezone(
            settings.TIME_ZONE)) + timedelta(days=2)
        self.assignment.save()
        # request
        response = self.client.post(
            reverse(self.view_name, args=[self.assignment.id]))
        # test response
        self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN)
        # test database
        self.assertEqual(len(AssignmentEntry.objects.all()), 0)

    def test_assignment_closed(self):
        """
        Tests that nothing happens when the user tries to start an assignment that has been closed.
        """
        # modify open dates
        self.assignment.open_date = datetime.now(timezone(
            settings.TIME_ZONE)) - timedelta(days=2)
        self.assignment.close_date = datetime.now(timezone(
            settings.TIME_ZONE)) - timedelta(days=1)
        self.assignment.save()
        # request
        response = self.client.post(
            reverse(self.view_name, args=[self.assignment.id]))
        # test response
        self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN)
        # test database
        self.assertEqual(len(AssignmentEntry.objects.all()), 0)
Beispiel #26
0
class AssignmentLCTest(APITestCase):
    """
    Test cases for list and create requests on AssignmentLCView.
    """
    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 test_assignment_create(self):
        """
        Tests that an assignment is properly created.
        """
        # request
        request_body = {
            'assignment_template': self.template.id,
            'labgroup': self.group.id,
            'open_date': '2013-12-12T22:22:22Z',
            'close_date': '2014-12-12T22:22:22Z',
        }
        response = self.client.post(reverse(self.view_name), request_body)
        response_body = json.loads(response.content.decode('utf-8'))
        # test database
        assignment = Assignment.objects.first()
        self.assertEqual(assignment.assignment_template.id,
                         request_body['assignment_template'])
        self.assertEqual(assignment.labgroup.id, request_body['labgroup'])
        self.assertEqual(
            assignment.open_date.replace(tzinfo=None),
            datetime.strptime(request_body['open_date'], '%Y-%m-%dT%H:%M:%SZ'))
        self.assertEqual(
            assignment.close_date.replace(tzinfo=None),
            datetime.strptime(request_body['close_date'],
                              '%Y-%m-%dT%H:%M:%SZ'))
        # test response
        self.assertEqual(response.status_code, status.HTTP_201_CREATED)
        self.assertEqual(response_body['assignment_template'],
                         request_body['assignment_template'])
        self.assertEqual(response_body['labgroup'], request_body['labgroup'])
        self.assertEqual(response_body['open_date'], request_body['open_date'])
        self.assertEqual(response_body['close_date'],
                         request_body['close_date'])

    def test_assignment_create_check_valid_dates(self):
        """
        Tests that an assignment is not created when the open and close dates are incompatible.
        """
        # get current time
        current_time = datetime.now(timezone(settings.TIME_ZONE))
        # request
        request_body = {
            'assignment_template':
            self.template.id,
            'labgroup':
            self.group.id,
            'open_date':
            (current_time + timedelta(days=1)).strftime('%Y-%m-%dT%H:%M:%SZ'),
            'close_date':
            current_time.strftime('%Y-%m-%dT%H:%M:%SZ'),
        }
        response = self.client.post(reverse(self.view_name), request_body)
        # test response
        self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
        # test database
        self.assertFalse(Assignment.objects.exists())

    def test_assignment_create_template_course_incompatible(self):
        """
        Tests that an assignment is not created when the assignment template doesn't belong to a shared course.
        """
        # create different course
        course = Course(name='other course')
        course.save()
        # create different template
        template = AssignmentTemplate(course=course, name='other template')
        template.save()
        # request
        current_time = datetime.now(timezone(settings.TIME_ZONE))
        request_body = {
            'assignment_template':
            template.id,
            'labgroup':
            self.group.id,
            'open_date':
            (current_time - timedelta(days=1)).strftime('%Y-%m-%dT%H:%M:%SZ'),
            'close_date':
            (current_time + timedelta(days=1)).strftime('%Y-%m-%dT%H:%M:%SZ'),
        }
        response = self.client.post(reverse(self.view_name), request_body)
        # test response
        self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
        # test database
        self.assertFalse(Assignment.objects.exists())

    def test_assignment_list_instructor(self):
        """
        Tests that assignments are properly listed.
        """
        # add assignments to database
        current_time = datetime.now(timezone(settings.TIME_ZONE))
        Assignment(assignment_template=self.template,
                   labgroup=self.group,
                   open_date=current_time,
                   close_date=current_time + timedelta(days=1)).save()
        Assignment(assignment_template=self.template,
                   labgroup=self.group,
                   open_date=current_time,
                   close_date=current_time + timedelta(days=1)).save()
        # request
        response = self.client.get(reverse(self.view_name))
        response_body = json.loads(response.content.decode('utf-8'))
        # test response
        assignments = Assignment.objects.all()
        self.assertEqual(response.status_code, status.HTTP_200_OK)
        self.assertEqual(
            response_body['assignments'][0]['assignment_template'],
            assignments[0].assignment_template.id)
        self.assertEqual(response_body['assignments'][0]['name'],
                         assignments[0].assignment_template.name)
        self.assertEqual(response_body['assignments'][0]['labgroup'],
                         assignments[0].labgroup.id)
        self.assertEqual(
            datetime.strptime(response_body['assignments'][0]['open_date'],
                              '%Y-%m-%dT%H:%M:%S.%fZ'),
            assignments[0].open_date.replace(tzinfo=None))
        self.assertEqual(
            datetime.strptime(response_body['assignments'][0]['close_date'],
                              '%Y-%m-%dT%H:%M:%S.%fZ'),
            assignments[0].close_date.replace(tzinfo=None))
        self.assertEqual(
            response_body['assignments'][1]['assignment_template'],
            assignments[1].assignment_template.id)
        self.assertEqual(response_body['assignments'][1]['name'],
                         assignments[1].assignment_template.name)
        self.assertEqual(response_body['assignments'][1]['labgroup'],
                         assignments[1].labgroup.id)
        self.assertEqual(
            datetime.strptime(response_body['assignments'][1]['open_date'],
                              '%Y-%m-%dT%H:%M:%S.%fZ'),
            assignments[1].open_date.replace(tzinfo=None))
        self.assertEqual(
            datetime.strptime(response_body['assignments'][1]['close_date'],
                              '%Y-%m-%dT%H:%M:%S.%fZ'),
            assignments[1].close_date.replace(tzinfo=None))

    def test_assignment_list_instructor_does_not_own(self):
        """
        Tests that assignments are properly listed.
        """
        # create other instructor and labgroup
        user = User.objects.create_user(username='******',
                                        password='******')
        instructor = Instructor(wwuid='2027616', user=user)
        instructor.save()
        labgroup = LabGroup(course=self.course,
                            instructor=instructor,
                            term=get_current_term(),
                            enroll_key='ABC')
        labgroup.save()
        # add assignments to database
        current_time = datetime.now(timezone(settings.TIME_ZONE))
        assignment_1 = Assignment(assignment_template=self.template,
                                  labgroup=self.group,
                                  open_date=current_time,
                                  close_date=current_time + timedelta(days=1))
        assignment_1.save()
        Assignment(assignment_template=self.template,
                   labgroup=labgroup,
                   open_date=current_time,
                   close_date=current_time + timedelta(days=1)).save()
        # request
        response = self.client.get(reverse(self.view_name))
        response_body = json.loads(response.content.decode('utf-8'))
        # test response
        self.assertEqual(response.status_code, status.HTTP_200_OK)
        self.assertEqual(len(response_body['assignments']), 1)
        self.assertEqual(
            response_body['assignments'][0]['assignment_template'],
            assignment_1.assignment_template.id)
        self.assertEqual(response_body['assignments'][0]['name'],
                         assignment_1.assignment_template.name)
        self.assertEqual(response_body['assignments'][0]['labgroup'],
                         assignment_1.labgroup.id)
        self.assertEqual(
            datetime.strptime(response_body['assignments'][0]['open_date'],
                              '%Y-%m-%dT%H:%M:%S.%fZ'),
            assignment_1.open_date.replace(tzinfo=None))
        self.assertEqual(
            datetime.strptime(response_body['assignments'][0]['close_date'],
                              '%Y-%m-%dT%H:%M:%S.%fZ'),
            assignment_1.close_date.replace(tzinfo=None))

    def test_assignment_list_student(self):
        """
        Tests that assignments are properly listed.
        """
        # login the student
        self.client.logout()
        self.client.login(username=self.student_username,
                          password=self.password)
        # add assignments to database
        current_time = datetime.now(timezone(settings.TIME_ZONE))
        Assignment(assignment_template=self.template,
                   labgroup=self.group,
                   open_date=current_time,
                   close_date=current_time + timedelta(days=1)).save()
        Assignment(assignment_template=self.template,
                   labgroup=self.group,
                   open_date=current_time,
                   close_date=current_time + timedelta(days=1)).save()
        # request
        response = self.client.get(reverse(self.view_name))
        response_body = json.loads(response.content.decode('utf-8'))
        # test response
        assignments = Assignment.objects.all()
        self.assertEqual(response.status_code, status.HTTP_200_OK)
        self.assertEqual(
            response_body['assignments'][0]['assignment_template'],
            assignments[0].assignment_template.id)
        self.assertEqual(response_body['assignments'][0]['name'],
                         assignments[0].assignment_template.name)
        self.assertEqual(response_body['assignments'][0]['labgroup'],
                         assignments[0].labgroup.id)
        self.assertEqual(
            datetime.strptime(response_body['assignments'][0]['open_date'],
                              '%Y-%m-%dT%H:%M:%S.%fZ'),
            assignments[0].open_date.replace(tzinfo=None))
        self.assertEqual(
            datetime.strptime(response_body['assignments'][0]['close_date'],
                              '%Y-%m-%dT%H:%M:%S.%fZ'),
            assignments[0].close_date.replace(tzinfo=None))
        self.assertEqual(
            response_body['assignments'][1]['assignment_template'],
            assignments[1].assignment_template.id)
        self.assertEqual(response_body['assignments'][1]['name'],
                         assignments[1].assignment_template.name)
        self.assertEqual(response_body['assignments'][1]['labgroup'],
                         assignments[1].labgroup.id)
        self.assertEqual(
            datetime.strptime(response_body['assignments'][1]['open_date'],
                              '%Y-%m-%dT%H:%M:%S.%fZ'),
            assignments[1].open_date.replace(tzinfo=None))
        self.assertEqual(
            datetime.strptime(response_body['assignments'][1]['close_date'],
                              '%Y-%m-%dT%H:%M:%S.%fZ'),
            assignments[1].close_date.replace(tzinfo=None))

    def test_assignment_list_student_different_labgroup(self):
        """
        Tests that assignments are not listed if they are for a different labgroup.
        """
        # login the student
        self.client.logout()
        self.client.login(username=self.student_username,
                          password=self.password)
        # create other labgroup
        labgroup = LabGroup(course=self.course,
                            instructor=self.instructor,
                            term=get_current_term(),
                            enroll_key='ABC')
        labgroup.save()
        # add assignments to database
        current_time = datetime.now(timezone(settings.TIME_ZONE))
        assignment_1 = Assignment(assignment_template=self.template,
                                  labgroup=self.group,
                                  open_date=current_time,
                                  close_date=current_time + timedelta(days=1))
        assignment_1.save()
        Assignment(assignment_template=self.template,
                   labgroup=labgroup,
                   open_date=current_time,
                   close_date=current_time + timedelta(days=1)).save()
        # request
        response = self.client.get(reverse(self.view_name))
        response_body = json.loads(response.content.decode('utf-8'))
        # test response
        self.assertEqual(response.status_code, status.HTTP_200_OK)
        self.assertEqual(len(response_body['assignments']), 1)
        self.assertEqual(
            response_body['assignments'][0]['assignment_template'],
            assignment_1.assignment_template.id)
        self.assertEqual(response_body['assignments'][0]['name'],
                         assignment_1.assignment_template.name)
        self.assertEqual(response_body['assignments'][0]['labgroup'],
                         assignment_1.labgroup.id)
        self.assertEqual(
            datetime.strptime(response_body['assignments'][0]['open_date'],
                              '%Y-%m-%dT%H:%M:%S.%fZ'),
            assignment_1.open_date.replace(tzinfo=None))
        self.assertEqual(
            datetime.strptime(response_body['assignments'][0]['close_date'],
                              '%Y-%m-%dT%H:%M:%S.%fZ'),
            assignment_1.close_date.replace(tzinfo=None))
Beispiel #27
0
    def get_task_courses(self, task: TeachTask) -> List[Course]:
        """
        获取某个教学任务的课程信息(包括理论课/实验课/实训课)
        """
        params = {
            "Action": "GetTeachTaskClass",
            "TaskId": task.task_id,
            "taskType": task.task_type
        }
        resp = self._get(self._course_api, params=params)
        if resp.status_code != 200:
            return []

        ret = []
        course_info = resp.json().get('data')
        if not course_info:
            return ret

        courses = [
            *course_info.get("01", []),  # 实验课
            *course_info.get("02", []),  # 理论课
            *course_info.get("03", [])  # 实训课
        ]

        for course in courses:
            c = Course()
            c.brief = course["Brief"]
            c.class_datetime = course["ClassDateTime"]
            c.class_address = course["ClassDress"]
            c.course_type = course["ClassMode"]  # 这两个命名很混淆, 改一下
            c.task_type = course["CourseMode"]
            c.hours_total = int(course["HoursTotle"])
            c.task_id = int(course["TaskId"])
            c.course_id = int(course["Id"])
            c.teachers = course["TeachNames"]
            c.term_id = int(course["TermId"])
            c.cur_stu_num = course["CurStuNum"]
            c.max_stu_num = course["MaxStuNum"]
            c.tech_class = course["TeachClass"]
            c.is_selected = course["IsSelected"]
            ret.append(c)
        return ret
Beispiel #28
0
class AssignmentRUDTest(APITestCase):
    """
    Test cases for retrieve, update, and destroy requests on AssignmentRUDView.
    """
    def setUp(self):
        # create test user with permissions
        self.username = '******'
        self.password = '******'
        self.instructor_user = User.objects.create_user(username=self.username,
                                                        password=self.password)
        self.instructor_user.user_permissions.add(
            Permission.objects.get(codename='add_assignment'))
        self.instructor_user.user_permissions.add(
            Permission.objects.get(codename='change_assignment'))
        self.instructor_user.user_permissions.add(
            Permission.objects.get(codename='delete_assignment'))
        self.client.login(username=self.username, password=self.password)
        # populate test database
        self.instructor = Instructor(user=self.instructor_user,
                                     wwuid='9994141')
        self.instructor.save()
        self.course = Course(name='Bounty Hunting 101')
        self.course.save()
        self.group = LabGroup(course=self.course,
                              instructor=self.instructor,
                              term='before',
                              enroll_key='4')
        self.group.save()
        self.template = AssignmentTemplate(course=self.course,
                                           name='Royalty Kidnapping Section A')
        self.template.save()
        self.assignment = Assignment(assignment_template=self.template,
                                     labgroup=self.group,
                                     open_date='2013-12-10T22:22:22Z',
                                     close_date='2014-12-10T22:22:22Z')
        self.assignment.save()
        self.assignment2 = Assignment(assignment_template=self.template,
                                      labgroup=self.group,
                                      open_date='2014-12-10T22:22:22Z',
                                      close_date='2015-12-10T22:22:22Z')
        self.assignment2.save()
        self.assignment3 = Assignment(assignment_template=self.template,
                                      labgroup=self.group,
                                      open_date='1492-12-10T22:22:22Z',
                                      close_date='3012-12-10T22:22:22Z')
        self.assignment3.save()
        # retrieve the view
        self.view_name = 'api:assignment-rud'

    def test_assignment_retrieve(self):
        """
        Tests that an assignment is properly retrieved.
        """
        # request
        response = self.client.get(
            reverse(self.view_name, args=[self.assignment.id]))
        response_body = json.loads(response.content.decode('utf-8'))
        # test response
        self.assertEqual(response.status_code, status.HTTP_200_OK)
        self.assertEqual(response_body['assignment_template'],
                         self.assignment.assignment_template.id)
        self.assertEqual(response_body['name'],
                         self.assignment.assignment_template.name)
        self.assertEqual(response_body['labgroup'],
                         self.assignment.labgroup.id)
        self.assertEqual(response_body['open_date'], self.assignment.open_date)
        self.assertEqual(response_body['close_date'],
                         self.assignment.close_date)

    def test_assignment_update(self):
        """
        Tests that an assignment is properly updated.
        """
        # modify values
        request_body = {
            'assignment_template': self.template.id,
            'labgroup': self.group.id,
            'open_date': '1890-10-10T22:22:22Z',
            'close_date': '1892-10-10T22:22:22Z',
        }
        # request
        response = self.client.put(
            reverse(self.view_name, args=[self.assignment.id]), request_body)
        response_body = json.loads(response.content.decode('utf-8'))
        # test database
        assignment_tester = Assignment.objects.filter(
            pk=self.assignment.id).first()
        self.assertEqual(assignment_tester.assignment_template.id,
                         request_body['assignment_template'])
        self.assertEqual(assignment_tester.labgroup.id,
                         request_body['labgroup'])
        self.assertEqual(
            assignment_tester.open_date.replace(tzinfo=None),
            datetime.strptime(request_body['open_date'], '%Y-%m-%dT%H:%M:%SZ'))
        self.assertEqual(
            assignment_tester.close_date.replace(tzinfo=None),
            datetime.strptime(request_body['close_date'],
                              '%Y-%m-%dT%H:%M:%SZ'))
        # test response
        self.assertEqual(response.status_code, status.HTTP_200_OK)
        self.assertEqual(response_body['assignment_template'],
                         request_body['assignment_template'])
        self.assertEqual(response_body['labgroup'], request_body['labgroup'])
        self.assertEqual(response_body['open_date'], request_body['open_date'])
        self.assertEqual(response_body['close_date'],
                         request_body['close_date'])

    def test_assignment_update_check_valid_dates(self):
        """
        Tests that an assignment is not updated when the open and close dates are incompatible.
        """
        # get current time
        current_time = datetime.now(timezone(settings.TIME_ZONE))
        # request
        request_body = {
            'assignment_template':
            self.template.id,
            'labgroup':
            self.group.id,
            'open_date':
            (current_time + timedelta(days=1)).strftime('%Y-%m-%dT%H:%M:%SZ'),
            'close_date':
            current_time.strftime('%Y-%m-%dT%H:%M:%SZ'),
        }
        response = self.client.put(
            reverse(self.view_name, args=[self.assignment.id]), request_body)
        # test response
        self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
        # test database
        self.assertEqual(self.assignment.assignment_template.id,
                         request_body['assignment_template'])
        self.assertEqual(self.assignment.labgroup.id, request_body['labgroup'])
        self.assertNotEqual(self.assignment.open_date,
                            request_body['open_date'])
        self.assertNotEqual(self.assignment.close_date,
                            request_body['close_date'])

    def test_assignment_update_template_course_incompatible(self):
        """
        Tests that an assignment is not created when the assignment template doesn't belong to a shared course.
        """
        # create different course
        course = Course(name='other course')
        course.save()
        # create different template
        template = AssignmentTemplate(course=course, name='other template')
        template.save()
        # request
        current_time = datetime.now(timezone(settings.TIME_ZONE))
        request_body = {
            'assignment_template':
            template.id,
            'labgroup':
            self.group.id,
            'open_date':
            (current_time - timedelta(days=1)).strftime('%Y-%m-%dT%H:%M:%SZ'),
            'close_date':
            (current_time + timedelta(days=1)).strftime('%Y-%m-%dT%H:%M:%SZ'),
        }
        response = self.client.put(
            reverse(self.view_name, args=[self.assignment.id]), request_body)
        # test response
        self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
        # test database
        assignment = Assignment.objects.get(id=self.assignment.id)
        self.assertNotEqual(assignment.assignment_template, template)

    def test_assignment_destroy(self):
        """
        Tests that an assignment is properly destroyed.
        """
        # request
        response = self.client.delete(
            reverse(self.view_name, args=[self.assignment2.id]))
        # test database
        assignments = Assignment.objects.all()
        self.assertTrue(self.assignment in assignments)
        self.assertTrue(self.assignment2 not in assignments)
        self.assertTrue(self.assignment3 in assignments)
        # test response
        self.assertEqual(response.status_code, status.HTTP_204_NO_CONTENT)
Beispiel #29
0
            obj = User(name=row[0])
            obj.save()
        if line_count % 100 == 0:
            print('User line: ' + str(line_count))
        line_count += 1


Course.objects.all().delete()
with open('api/csv/Course.csv', encoding="utf8") as f:
    reader = csv.reader(f, delimiter=',')
    line_count = 0
    for row in reader:
        if line_count != 0:
            obj = Course(
                name=row[0],
                description=row[1],
                price=row[6]
            )
            obj.save()
        if line_count != 0:
            print('Course line: ' + str(line_count))
        line_count += 1

CourseUser.objects.all().delete()
with open('api/csv/CourseUser.csv', encoding="utf8") as f:
    reader = csv.reader(f, delimiter=',')
    line_count = 0
    for row in reader:
        if line_count != 0:
            tmp = Course.objects.filter(name=row[2])
            tmp2 = User.objects.filter(name=row[1])
Beispiel #30
0
class LabGroupLCTest(APITestCase):
    """
    Test cases for list and create requests on LabGroupLCView.
    """

    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 test_labgroup_create(self):
        """
        Tests that a labgroup is properly created.
        """
        # request
        request_body = {
            'course': self.course.id,
            'instructor': self.instructor.id,
            'group_name': 'test name',
            'term': 'FALL2000',
            'enroll_key': 'test enroll_key',
        }
        response = self.client.post(reverse(self.view_name), request_body)
        response_body = json.loads(response.content.decode('utf-8'))
        # test database
        labgroup = LabGroup.objects.first()
        self.assertEqual(labgroup.course.id, request_body['course'])
        self.assertEqual(labgroup.instructor.id, request_body['instructor'])
        self.assertEqual(labgroup.group_name, request_body['group_name'])
        self.assertEqual(labgroup.term, request_body['term'])
        self.assertEqual(labgroup.enroll_key, request_body['enroll_key'])
        # test response
        self.assertEqual(response.status_code, status.HTTP_201_CREATED)
        self.assertEqual(response_body['pk'], labgroup.id)
        self.assertEqual(response_body['course'], request_body['course'])
        self.assertEqual(response_body['instructor'], request_body['instructor'])
        self.assertEqual(response_body['group_name'], request_body['group_name'])
        self.assertEqual(response_body['term'], request_body['term'])
        self.assertEqual(response_body['enroll_key'], request_body['enroll_key'])

    def test_labgroup_create_different_instructor(self):
        """
        Tests that a labgroup is not created if the instructor passed in is not the instructors making the request.
        """
        # create new user and instructor
        user = User.objects.create_user(username='******', password='******')
        instructor = Instructor(user=user, wwuid='9999999')
        instructor.save()
        # request
        request_body = {
            'course': self.course.id,
            'instructor': instructor.id,
            'group_name': 'test name',
            'term': 'FALL2000',
            'enroll_key': 'test enroll_key',
        }
        response = self.client.post(reverse(self.view_name), request_body)
        # test response
        self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
        # test database
        self.assertFalse(LabGroup.objects.exists())

    def test_labgroup_list_instructor(self):
        """
        Tests that labgroups are properly listed for instructors.
        """
        # add labgroups to database
        LabGroup(course=self.course,
                 instructor=self.instructor,
                 group_name='test name 1',
                 term=get_current_term(),
                 enroll_key='test key 1').save()
        LabGroup(course=self.course,
                 instructor=self.instructor,
                 group_name='test name 2',
                 term=get_current_term(),
                 enroll_key='test key 2').save()
        # request
        response = self.client.get(reverse(self.view_name))
        response_body = json.loads(response.content.decode('utf-8'))
        # test response
        labgroups = LabGroup.objects.all()
        self.assertEqual(response.status_code, status.HTTP_200_OK)
        self.assertEqual(response_body['labgroups'][0]['pk'], labgroups[0].id)
        self.assertEqual(response_body['labgroups'][0]['course'], labgroups[0].course.id)
        self.assertEqual(response_body['labgroups'][0]['instructor'], labgroups[0].instructor.id)
        self.assertEqual(response_body['labgroups'][0]['group_name'], labgroups[0].group_name)
        self.assertEqual(response_body['labgroups'][0]['enroll_key'], labgroups[0].enroll_key)
        self.assertEqual(response_body['labgroups'][0]['term'], labgroups[0].term)
        self.assertEqual(response_body['labgroups'][1]['pk'], labgroups[1].id)
        self.assertEqual(response_body['labgroups'][1]['course'], labgroups[1].course.id)
        self.assertEqual(response_body['labgroups'][1]['instructor'], labgroups[1].instructor.id)
        self.assertEqual(response_body['labgroups'][1]['group_name'], labgroups[1].group_name)
        self.assertEqual(response_body['labgroups'][1]['enroll_key'], labgroups[1].enroll_key)
        self.assertEqual(response_body['labgroups'][1]['term'], labgroups[1].term)

    def test_labgroup_list_student(self):
        """
        Tests that labgroups are properly listed for students.
        """
        # add labgroups to database
        LabGroup(course=self.course,
                 instructor=self.instructor,
                 group_name='test name 1',
                 term=get_current_term(),
                 enroll_key='test key 1').save()
        LabGroup(course=self.course,
                 instructor=self.instructor,
                 group_name='test name 2',
                 term=get_current_term(),
                 enroll_key='test key 2').save()
        # request
        self.client.logout()
        self.client.login(username=self.student_username, password=self.password)
        response = self.client.get(reverse(self.view_name))
        response_body = json.loads(response.content.decode('utf-8'))
        # test response
        labgroups = LabGroup.objects.all()
        self.assertEqual(response.status_code, status.HTTP_200_OK)
        self.assertEqual(response_body['labgroups'][0]['pk'], labgroups[0].id)
        self.assertEqual(response_body['labgroups'][0]['course'], labgroups[0].course.id)
        self.assertEqual(response_body['labgroups'][0]['instructor'], labgroups[0].instructor.id)
        self.assertEqual(response_body['labgroups'][0]['group_name'], labgroups[0].group_name)
        self.assertTrue('enroll_key' not in response_body['labgroups'][0].keys())
        self.assertEqual(response_body['labgroups'][0]['term'], labgroups[0].term)
        self.assertEqual(response_body['labgroups'][1]['pk'], labgroups[1].id)
        self.assertEqual(response_body['labgroups'][1]['course'], labgroups[1].course.id)
        self.assertEqual(response_body['labgroups'][1]['instructor'], labgroups[1].instructor.id)
        self.assertEqual(response_body['labgroups'][1]['group_name'], labgroups[1].group_name)
        self.assertTrue('enroll_key' not in response_body['labgroups'][0].keys())
        self.assertEqual(response_body['labgroups'][1]['term'], labgroups[1].term)

    def test_labgroup_visibility_instructor(self):
        """
        Tests that labgroups displayed to instructor were created by that instructor
        """
        # setup second instructor users
        self.instructor_username_2 = 'different_instructor'
        self.instructor_user_2 = User.objects.create_user(username=self.instructor_username_2, password=self.password)
        self.instructor_2 = Instructor(user=self.instructor_user_2, wwuid="7654321")
        self.instructor_2.save()
        # add labgroups to database
        LabGroup(course=self.course,
                 instructor=self.instructor,
                 group_name='test name 1',
                 term=get_current_term(),
                 enroll_key='test key 1').save()
        LabGroup(course=self.course,
                 instructor=self.instructor_2,
                 group_name='test name 2',
                 term=get_current_term(),
                 enroll_key='test key 2').save()
        # request
        response = self.client.get(reverse(self.view_name))
        response_body = json.loads(response.content.decode('utf-8'))
        # test response
        labgroups = LabGroup.objects.all()
        self.assertEqual(response.status_code, status.HTTP_200_OK)
        # assert response_body contains exactly 1 labgroup
        self.assertEqual(len(response_body['labgroups']), 1)

    def test_labgroup_filter_by_course(self):
        """
        Tests that labgroups can be filtered by the courses query parameter.
        """
        # add course to database
        course = Course(name='course name')
        course.save()
        # add labgroups to database
        labgroup = LabGroup(course=course,
                            instructor=self.instructor,
                            group_name='test name 1',
                            term=get_current_term(),
                            enroll_key='test key 1')
        labgroup.save()
        LabGroup(course=self.course,
                 instructor=self.instructor,
                 group_name='test name 2',
                 term=get_current_term(),
                 enroll_key='test key 2').save()
        # request
        response = self.client.get(reverse(self.view_name), {'course': course.id})
        response_body = json.loads(response.content.decode('utf-8'))
        # test response
        self.assertEqual(response.status_code, status.HTTP_200_OK)
        self.assertEqual(len(response_body['labgroups']), 1)
        self.assertEqual(response_body['labgroups'][0]['pk'], labgroup.id)
        self.assertEqual(response_body['labgroups'][0]['course'], labgroup.course.id)
        self.assertEqual(response_body['labgroups'][0]['instructor'], labgroup.instructor.id)
        self.assertEqual(response_body['labgroups'][0]['group_name'], labgroup.group_name)
        self.assertEqual(response_body['labgroups'][0]['term'], labgroup.term)
        self.assertEqual(response_body['labgroups'][0]['enroll_key'], labgroup.enroll_key)