Exemplo n.º 1
0
    def test_course_offering(self):
        """
        Create and test a course offering
        """
        s, c = create_offering()
        
        # should have a get_absolute_url
        url = c.get_absolute_url()
        self.assertEquals(url, str(url))
        self.assertEquals(url[0], '/')
        self.assertEquals(str(c), "CMPT 120 D100 (Fall 2007)")
        self.assertEquals(c.name(), "CMPT 120 D1")

        # check uniqueness criteria
        c2 = CourseOffering(subject="CMPT", number="120", section="D100", semester=s, component="LAB",
                graded=True, crse_id=11112, class_nbr=22223, campus='SURRY',
                enrl_cap=101, enrl_tot=100, wait_tot=3)
        # south doesn't seem to create the constraints in SQLite for testing
        #self.assertRaises(IntegrityError, c2.save)

        c2 = CourseOffering(subject="CMPT", number="121", section="D100", semester=s, component="LAB",
                graded=True, crse_id=11111, class_nbr=22223, campus='SURRY',
                enrl_cap=101, enrl_tot=100, wait_tot=3)
        # south doesn't seem to create the constraints in SQLite for testing
        #self.assertRaises(IntegrityError, c2.save)

        c2 = CourseOffering(subject="MACM", number="121", section="D102", semester=s, component="LAB",
                graded=True, crse_id=11112, class_nbr=22222, campus='SURRY',
                enrl_cap=101, enrl_tot=100, wait_tot=3)
        # south doesn't seem to create the constraints in SQLite for testing
        #self.assertRaises(IntegrityError, c2.save)

        # test some course memberships
        p1 = Person(emplid=210012345, userid="test1",
                last_name="Lname", first_name="Fname", pref_first_name="Fn", middle_name="M")
        p1.save()
        m = Member(person=p1, offering=c, role="INST", credits=0, career="NONS", added_reason="AUTO")
        m.save()
        
        self.assertEqual( str(list(c.instructors())), "[<Person: Lname, Fname>]")
        self.assertEqual( str(list(c.tas())), "[]")
        self.assertEqual( c.student_count(), 0)

        m.role = "TA"
        m.save()
        self.assertEqual( str(list(c.instructors())), "[]")
        self.assertEqual( str(list(c.tas())), "[<Person: Lname, Fname>]")
        self.assertEqual( c.student_count(), 0)

        m.role = "STUD"
        m.save()
        self.assertEqual( str(list(c.instructors())), "[]")
        self.assertEqual( str(list(c.tas())), "[]")
        self.assertEqual( c.student_count(), 1)
        
        self.assertEqual( str(m), "test1 (210012345) in CMPT 120 D100 (Fall 2007)")
Exemplo n.º 2
0
def create_test_offering():
    """
    Create a CourseOffering (and related stuff) that can be used in tests with no fixtures
    """
    s = create_fake_semester('1144')
    u = Unit(label='BABL', name="Department of Babbling")
    u.save()
    o = CourseOffering(subject='BABL',
                       number='123',
                       section='F104',
                       semester=s,
                       component='LEC',
                       owner=u,
                       title='Babbling for Baferad Ferzizzles',
                       enrl_cap=100,
                       enrl_tot=5,
                       wait_tot=0)
    o.save()

    i = Person(first_name='Insley',
               last_name='Instructorberg',
               emplid=20000009,
               userid='instr')
    i.save()
    s = Person(first_name='Stanley',
               last_name='Studentson',
               emplid=20000010,
               userid='student')
    s.save()

    Member(offering=o, person=i, role='INST').save()
    Member(offering=o, person=s, role='STUD').save()

    return o
Exemplo n.º 3
0
def create_offering():
    s = create_semester()
    c = CourseOffering(subject="CMPT", number="120", section="D100", semester=s, component="LEC",
                graded=True, crse_id=11111, class_nbr=22222, campus='BRNBY', title="Computer Stuff",
                enrl_cap=100, enrl_tot=99, wait_tot=2)
    c.save()
    return s, c
Exemplo n.º 4
0
    def test_bitfield(self):
        s, c1 = create_offering()
        c2 = CourseOffering(subject="CMPT",
                            number="121",
                            section="D100",
                            semester=s,
                            component="LEC",
                            graded=True,
                            crse_id=11112,
                            class_nbr=22223,
                            campus='BRNBY',
                            title="Other Stuff",
                            enrl_cap=100,
                            enrl_tot=99,
                            wait_tot=2)
        c2.save()

        c1.flags = CourseOffering.flags.quant
        c1.save()
        self.assertEqual(
            self._flag_filter(
                [CourseOffering.flags.quant, CourseOffering.flags.bhum]),
            set())
        self.assertEqual(self._flag_filter([CourseOffering.flags.quant]), {c1})
        self.assertEqual(self._flag_filter([~CourseOffering.flags.quant]),
                         {c2})
        self.assertEqual(self._flag_filter([~CourseOffering.flags.bhum]),
                         {c1, c2})

        c1.flags = 0
        c1.save()
        self.assertEqual(self._flag_filter([CourseOffering.flags.quant]),
                         set())
        self.assertEqual(self._flag_filter([~CourseOffering.flags.quant]),
                         {c1, c2})
Exemplo n.º 5
0
    def setUp(self):
        p1 = Person(emplid=210012345,
                    userid="test1",
                    last_name="Lname",
                    first_name="Fname",
                    pref_first_name="Fn",
                    middle_name="M")
        p1.save()

        s = Semester(name="1077",
                     start=date(2007, 9, 4),
                     end=date(2007, 12, 3))
        s.save()

        unit = Unit.objects.get(label="CMPT")
        self.co1 = CourseOffering(owner=unit,
                                  subject="CMPT",
                                  number="120",
                                  section="D100",
                                  semester=s,
                                  component="LEC",
                                  graded=True,
                                  crse_id=11111,
                                  class_nbr=22222,
                                  campus='BRNBY',
                                  title="Computer Stuff",
                                  enrl_cap=100,
                                  enrl_tot=99,
                                  wait_tot=2)

        self.co2 = CourseOffering(owner=unit,
                                  subject="CMPT",
                                  number="165",
                                  section="D100",
                                  semester=s,
                                  component="LEC",
                                  graded=True,
                                  crse_id=22222,
                                  class_nbr=11111,
                                  campus='SURRY',
                                  title="Web Stuff",
                                  enrl_cap=85,
                                  enrl_tot=80,
                                  wait_tot=4)
        self.co1.save()
        self.co2.save()
Exemplo n.º 6
0
 def setUp(self):
     """
         Build a TACategory, TAContract, and two TACourses
     """
     unit = Unit(label="TEST", name="A Fake Unit for Testing") 
     unit.save()
     person = Person(emplid="300000000",
                     userid="testy",
                     first_name="Testy",
                     last_name="Testerson")
     person.save()
     semester = Semester(name="1147",
                         start=datetime.date.today(),
                         end=datetime.date.today())
     semester.save()
     course1 = Course(subject="TEST", 
                     number="100",
                     title="Intro to Testing")
     course1.save()
     course2 = Course(subject="TEST", 
                     number="200",
                     title="Advanced Testing")
     course2.save()
     courseoffering1 = CourseOffering(subject="TEST",
                                      number="100",
                                      section="D100",
                                      semester=semester,
                                      component="LEC",
                                      owner=unit,
                                      title="Intro to Testing",
                                      campus="BRNBY",
                                      enrl_cap=100,
                                      enrl_tot=100,
                                      wait_tot=50,
                                      course=course1)
     courseoffering1.save()
     courseoffering2 = CourseOffering(subject="TEST",
                                      number="200",
                                      section="D200",
                                      semester=semester,
                                      component="LEC",
                                      owner=unit,
                                      title="Advanced Testing",
                                      campus="BRNBY",
                                      enrl_cap=100,
                                      enrl_tot=100,
                                      wait_tot=50,
                                      course=course2)
     courseoffering2.save()
     account = Account(unit=unit, 
                       account_number=1337, 
                       position_number=5,
                       title="A Fake Account for Testing")
     account.save()
     four_weeks_later = datetime.date.today() + datetime.timedelta(days=28)
     hiring_semester = HiringSemester(semester=semester,
                               unit=unit,
                               deadline_for_acceptance=datetime.date.today(),
                               pay_start=datetime.date.today(),
                               pay_end=four_weeks_later,
                               payperiods=2.5)
     hiring_semester.save()
     category = TACategory(account=account,
                           hiring_semester=hiring_semester,
                           code="TST",
                           title="Test Contract Category",
                           hours_per_bu=decimal.Decimal("42"),
                           holiday_hours_per_bu=decimal.Decimal("1.1"),
                           pay_per_bu=decimal.Decimal("125.00"),
                           scholarship_per_bu=decimal.Decimal("25.00"),
                           bu_lab_bonus=decimal.Decimal("0.17"))
     category.save()
     contract = TAContract(category=category,
                           person=person,
                           status="NEW",
                           sin="123456789",
                           deadline_for_acceptance=datetime.date.today(),
                           pay_start=datetime.date.today(),
                           pay_end=datetime.date.today() + datetime.timedelta(days=10),
                           payperiods=2.5,
                           appointment="INIT",
                           conditional_appointment=True,
                           created_by="classam",
                           tssu_appointment=True)
     contract.save()
     tacourse = TACourse(course=courseoffering1,
                         contract=contract,
                         bu=decimal.Decimal('3.0'),
                         labtut=True)
     tacourse.save()
     tacourse2 = TACourse(course=courseoffering2,
                          contract=contract,
                          bu=decimal.Decimal('2.0'),
                          labtut=False)
     tacourse2.save()
Exemplo n.º 7
0
    def global_data(self):
        univ, _ = Unit.objects.get_or_create(label='UNIV',
                                             name='Simon Fraser University',
                                             parent=None)
        fas, _ = Unit.objects.get_or_create(label='FAS',
                                            name='Faculty of Applied Sciences',
                                            parent=univ)
        fas.config['informal_name'] = 'Applied Sciences'
        fas.save()
        cmpt, _ = Unit.objects.get_or_create(label='CMPT')
        cmpt.name = 'School of Computing Science'
        cmpt.config['informal_name'] = 'Computing Science'
        cmpt.parent = fas
        cmpt.save()
        ensc, _ = Unit.objects.get_or_create(label='ENSC')
        ensc.name = 'School of Engineering Science'
        ensc.config['informal_name'] = 'Engineering Science'
        ensc.parent = fas
        ensc.save()
        mse, _ = Unit.objects.get_or_create(label='MSE')
        mse.name = 'Mechatronic Systems Engineering'
        mse.config['informal_name'] = 'Mechatronics'
        mse.parent = fas
        mse.save()
        phil, _ = Unit.objects.get_or_create(label='PHIL')
        phil.name = 'Department of Philosophy'
        phil.parent = None
        phil.save()

        create_fake_semester('1134')
        create_fake_semester('1137')
        create_fake_semester('1141')
        create_fake_semester('1144')
        create_fake_semester('1147')

        danyu = get_or_create_nosave(Person,
                                     userid='dzhao',
                                     first_name='DanYu',
                                     last_name='Zhao')
        danyu.emplid = 220000123
        danyu.save()

        greg = get_or_create_nosave(Person,
                                    userid='ggbaker',
                                    first_name='Gregory',
                                    last_name='Baker')
        greg.emplid = 220000124
        greg.save()

        diana = get_or_create_nosave(Person,
                                     userid='diana',
                                     first_name='Diana',
                                     last_name='Cukierman')
        diana.emplid = 220000125
        diana.save()

        tony = get_or_create_nosave(Person,
                                    userid='dixon',
                                    first_name='Anthony',
                                    last_name='Dixon')
        tony.emplid = 220000126
        tony.save()

        brad = get_or_create_nosave(Person,
                                    userid='bbart',
                                    first_name='Bradley',
                                    last_name='Bart')
        brad.emplid = 220000127
        brad.save()

        farid = get_or_create_nosave(Person,
                                     userid='mfgolnar',
                                     first_name='Farid',
                                     last_name='Golnaraghi')
        farid.emplid = 220000128
        farid.save()

        phillip = get_or_create_nosave(Person,
                                       userid='phillip',
                                       first_name='Phillip',
                                       last_name='Philosophy')
        phillip.emplid = 220000129
        phillip.save()

        try:
            o = CourseOffering.objects.get(slug=TEST_COURSE_SLUG)
        except CourseOffering.DoesNotExist:
            o = CourseOffering(slug=TEST_COURSE_SLUG,
                               semester=Semester.current(),
                               subject='CMPT',
                               number='123',
                               enrl_cap=10,
                               enrl_tot=5,
                               wait_tot=0)
            o.save()

        m, _ = Member.objects.get_or_create(person=greg,
                                            offering=o,
                                            role='INST')
        m.added_reason = 'AUTO'
        m.save()
Exemplo n.º 8
0
def import_offering(subject, number, section, strm, crse_id, class_nbr, component, title, campus,
                    enrl_cap, enrl_tot, wait_tot, cancel_dt, acad_org, instr_mode, rqmnt_designtn, units,
                    create_units=False):
    """
    Import one offering. Returns CourseOffering or None.
    
    Arguments must be in the same order as CLASS_TBL_FIELDS.
    """
    global REQ_DES
    if not REQ_DES:
        REQ_DES = get_reqmnt_designtn()
    semester = Semester.objects.get(name=strm)
    graded = True # non-graded excluded in with "class_type='E'" in query

    # make sure the data is as we expect:
    if not CAMPUSES.has_key(campus):
        raise KeyError, "Unknown campus: %r." % (campus)
    if not COMPONENTS.has_key(component):
        raise KeyError, "Unknown course component: %r." % (component)
    if not INSTR_MODE.has_key(instr_mode):
        raise KeyError, "Unknown instructional mode: %r." % (instr_mode)

    if cancel_dt is not None:
        # mark cancelled sections
        component = "CAN"

    if section == 'G':
        section = 'G100' # fix broken data somebody entered

    owner = get_unit(acad_org, create=create_units)

    # search for existing offerings both possible ways and make sure we're consistent
    c_old1 = CourseOffering.objects.filter(subject=subject, number=number, section=section, semester=semester).select_related('course')
    c_old2 = CourseOffering.objects.filter(class_nbr=class_nbr, semester=semester)
    c_old = list(set(c_old1) | set(c_old2))
    
    if len(c_old)>1:
        raise KeyError, "Already duplicate courses: %r %r" % (c_old1, c_old2)
    elif len(c_old)==1:
        # already in DB: update things that might have changed
        c = c_old[0]
    else:
        # new record: create.
        c = CourseOffering(subject=subject, number=number, section=section, semester=semester)

    c.section = section
    c.crse_id = crse_id
    c.class_nbr = class_nbr
    c.component = component
    c.graded = graded
    c.title = title
    c.campus = campus
    c.enrl_cap = enrl_cap
    c.enrl_tot = enrl_tot
    c.wait_tot = wait_tot
    c.owner = owner
    c.instr_mode = instr_mode
    c.units = units
    c.slug = c.autoslug() # rebuild slug in case section changes for some reason

    # set the WQB flags
    flags = REQMNT_DESIGNTN_FLAGS[REQ_DES.get(rqmnt_designtn, '')]
    for pos, key in enumerate(c.flags.keys()):
        c.flags.set_bit(pos, key in flags)

    c.save_if_dirty()
    
    crs = c.course
    if crs.title != c.title:
        crs.title = c.title
        crs.save()

    return c