def testShouldNotAddStudentToFullClass(self): class_id = "1" class_a = self.MakeClass("Class A", class_id, "Mon") # setup the fake model objects logic.models.Classes = fake_ndb.FakeClasses([class_a]) logic.models.ClassRoster = fake_ndb.FakeClassRoster() logic.models.Schedule = fake_ndb.FakeSchedule() # call the unit under test and fill up the class with students institution = 'abc' session = 'fall 2015' for student_number in range(1,21): student_email = "*****@*****.**" % student_number logic.AddStudentToClass(institution, session, student_email, class_id) actual_emails = logic.models.ClassRoster.FetchEntity( institution, session, class_id)['emails'] self.AssertEqual(student_number, len(actual_emails)) # verify all the students are there and the class is full actual_emails = logic.models.ClassRoster.FetchEntity( institution, session, class_id)['emails'] self.AssertEqual(20, len(actual_emails)) self.AssertTrue("*****@*****.**" in actual_emails) self.AssertTrue("*****@*****.**" in actual_emails) self.AssertSchedule(institution, session, '*****@*****.**', class_id) self.AssertSchedule(institution, session, '*****@*****.**', class_id) # Now that the class is full try adding another student student_email = "*****@*****.**" logic.AddStudentToClass(institution, session, student_email, class_id) # verify they didn't get added actual_emails = logic.models.ClassRoster.FetchEntity( institution, session, class_id)['emails'] self.AssertEqual(20, len(actual_emails)) self.AssertTrue("*****@*****.**" not in actual_emails) self.AssertSchedule(institution, session, "*****@*****.**")
def post(self): auth = authorizer.Authorizer(self) if not auth.HasStudentAccess(): self.response.status = 403 # Forbidden return institution = self.request.get("institution") if not institution: logging.fatal("no institution") session = self.request.get("session") if not session: logging.fatal("no session") if not auth.HasPageAccess(institution, session, "schedule"): self.response.status = 403 # Forbidden return email = auth.student_email class_id = self.request.get("class_id") action = self.request.get("action") if action == "add": logic.AddStudentToClass(institution, session, email, class_id) if action == "del": logic.RemoveStudentFromClass(institution, session, email, class_id) schedule = models.Schedule.Fetch(institution, session, email) schedule = schedule.split(",") if schedule and schedule[0] == "": schedule = schedule[1:] self.response.write(json.dumps(schedule))
def AutoRegister(self, institution, session, auto_register): auto_register = models.AutoRegister.FetchJson(institution, session) students = models.Students.FetchJson(institution, session) for auto_class in auto_register: class_id = str(auto_class['class_id']) if (auto_class['applies_to'] == []): # applies to all students for s in students: if not ('exempt' in auto_class and s['email'] in auto_class['exempt']): logic.AddStudentToClass(institution, session, s['email'], class_id) for grp in auto_class['applies_to']: if 'current_grade' in grp: for s in students: if (s['current_grade'] == grp['current_grade']): if not ('exempt' in auto_class and s['email'] in auto_class['exempt']): logic.AddStudentToClass( institution, session, s['email'].lower(), class_id) if 'group' in grp: student_groups = models.GroupsStudents.FetchJson( institution, session) for sg in student_groups: if (sg['group_name'] == grp['group']): for s_email in sg['emails']: if not ('exempt' in auto_class and s_email in auto_class['exempt']): logic.AddStudentToClass( institution, session, s_email.lower(), class_id) if 'email' in grp: # We have no way to prevent an exempt field here, so we should check for it. # But there really is no point to an exempt field when applies_to is email. if not ('exempt' in auto_class and grp['email'] in auto_class['exempt']): logic.AddStudentToClass(institution, session, grp['email'].lower(), class_id)
def testAddStudentToClass(self): # setup selective classes class_a = self.MakeClass("Class A", 1, "Mon") new_class = self.MakeClass("New Class", 2, "Mon", "Tue") class_b = self.MakeClass("Class B", 3, "Tue", "Fri") class_c = self.MakeClass("Class C", 4, "Wed") # setup the fake model objects logic.models.Classes = fake_ndb.FakeClasses( [class_a, new_class, class_b, class_c]) logic.models.ClassRoster = fake_ndb.FakeClassRoster() logic.models.Schedule = fake_ndb.FakeSchedule() # call the unit under test to give a schedule to a couple of students institution = 'abc' session = 'fall 2015' student_email = '*****@*****.**' logic.AddStudentToClass(institution, session, student_email, class_a['id']) logic.AddStudentToClass(institution, session, student_email, class_b['id']) logic.AddStudentToClass(institution, session, student_email, class_c['id']) student_email = '*****@*****.**' logic.AddStudentToClass(institution, session, student_email, class_a['id']) logic.AddStudentToClass(institution, session, student_email, class_b['id']) logic.AddStudentToClass(institution, session, student_email, class_c['id']) # verify the student schedules and class rosters self.AssertSchedule(institution, session, '*****@*****.**', 1, 3, 4) self.AssertSchedule(institution, session, '*****@*****.**', 1, 3, 4) self.AssertClassRoster(institution, session, "1", "*****@*****.**", "*****@*****.**") self.AssertClassRoster(institution, session, "2") self.AssertClassRoster(institution, session, "3", "*****@*****.**", "*****@*****.**") self.AssertClassRoster(institution, session, "4", "*****@*****.**", "*****@*****.**") # add a new class to one student that conflict prior classes # this should replace classes 1 and 3 with class 2 student_email = '*****@*****.**' logic.AddStudentToClass(institution, session, student_email, new_class['id']) # verify the student schedule and class rosters self.AssertSchedule(institution, session, '*****@*****.**', 2, 4) self.AssertSchedule(institution, session, '*****@*****.**', 1, 3, 4) self.AssertClassRoster(institution, session, "1", "*****@*****.**") self.AssertClassRoster(institution, session, "2", "*****@*****.**") self.AssertClassRoster(institution, session, "3", "*****@*****.**") self.AssertClassRoster(institution, session, "4", "*****@*****.**", "*****@*****.**")
def testRemoveOneStudentFromOneClass(self): # setup selective classes class_a = self.MakeClass("Class A", 1, "Mon") # setup the fake model objects logic.models.Classes = fake_ndb.FakeClasses( [class_a]) logic.models.ClassRoster = fake_ndb.FakeClassRoster() logic.models.Schedule = fake_ndb.FakeSchedule() # add a student to a class institution = 'abc' session = 'fall 2015' student_email = '*****@*****.**' logic.AddStudentToClass(institution, session, student_email, class_a['id']) # call the unit under test to remove the student from the class logic.RemoveStudentFromClass( institution, session, '*****@*****.**', "1") # verify the new class roster and student schedule self.AssertSchedule(institution, session, '*****@*****.**') self.AssertClassRoster(institution, session, "1")
def testRemoveStudentFromClass(self): # setup selective classes class_a = self.MakeClass("Class A", 1, "Mon") class_b = self.MakeClass("Class B", 2, "Tue", "Fri") class_c = self.MakeClass("Class C", 3, "Wed") # setup the fake model objects logic.models.Classes = fake_ndb.FakeClasses( [class_a, class_b, class_c]) logic.models.ClassRoster = fake_ndb.FakeClassRoster() logic.models.Schedule = fake_ndb.FakeSchedule() # add a schedule to a couple of students institution = 'abc' session = 'fall 2015' student_email = '*****@*****.**' logic.AddStudentToClass(institution, session, student_email, class_a['id']) logic.AddStudentToClass(institution, session, student_email, class_b['id']) logic.AddStudentToClass(institution, session, student_email, class_c['id']) student_email = '*****@*****.**' logic.AddStudentToClass(institution, session, student_email, class_a['id']) logic.AddStudentToClass(institution, session, student_email, class_b['id']) logic.AddStudentToClass(institution, session, student_email, class_c['id']) # call the unit under test to remove some students from classes logic.RemoveStudentFromClass( institution, session, '*****@*****.**', "1") # verify the new class roster and student schedule self.AssertSchedule(institution, session, '*****@*****.**', 2, 3) self.AssertSchedule(institution, session, '*****@*****.**', 1, 2, 3) self.AssertClassRoster(institution, session, "1", "*****@*****.**") self.AssertClassRoster(institution, session, "2", "*****@*****.**", "*****@*****.**") self.AssertClassRoster(institution, session, "3", "*****@*****.**", "*****@*****.**")