Example #1
0
 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, "*****@*****.**")
Example #2
0
  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))
Example #3
0
 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)
Example #4
0
  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",
                           "*****@*****.**", "*****@*****.**")
Example #5
0
  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")
Example #6
0
  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",
                           "*****@*****.**", "*****@*****.**")