Ejemplo n.º 1
0
    def test_preclude_delete_all(self):
        '''
            Tests deleting all preclusions of specific module.
        '''
        if not self.preclude_delete_all_tested:
            model.add_module(self.test_preclude_code, self.test_module_name,
                             self.test_module_desc, self.test_module_mc,
                             self.test_module_status)
            model.add_module(self.test_preclude_code2, self.test_module_name,
                             self.test_module_desc, self.test_module_mc,
                             self.test_module_status)

            model.add_preclusion(self.test_module_code,
                                 self.test_preclude_code)
            model.add_preclusion(self.test_module_code,
                                 self.test_preclude_code2)

            outcome = model.delete_all_preclusions(self.test_module_code)
            assert_true(outcome)

            preclude_info_1 = model.get_preclusion(self.test_preclude_code)
            preclude_info_2 = model.get_preclusion(self.test_preclude_code2)
            preclude_info_3 = model.get_preclusion(self.test_module_code)

            model.delete_module(self.test_preclude_code)
            model.delete_module(self.test_preclude_code2)

            assert_true(len(preclude_info_1) == 0)
            assert_true(len(preclude_info_2) == 0)
            assert_true(len(preclude_info_3) == 0)
            return
Ejemplo n.º 2
0
    def setUp(self):
        '''
            Add dummy modules and mountings into database
        '''
        self.test_module_CRD()
        self.module_CRD_tested = True
        model.add_module(self.test_module_code, self.test_module_name,
                         self.test_module_desc, self.test_module_mc,
                         self.test_module_status)

        self.test_fixed_mounting_CRD()
        self.fixed_mounting_CRD_tested = True

        self.test_tenta_mounting_CRD()
        self.tenta_mounting_CRD_tested = True
        model.add_tenta_mounting(self.test_module_code,
                                 self.test_module_tenta_mounting_s1,
                                 self.test_module_quota1)

        self.test_prereq_CRD()
        self.prereq_CRD_tested = True
        self.test_prereq_delete_all()
        self.prereq_delete_all_tested = True
        self.test_preclude_CRD()
        self.preclude_CRD_tested = True
        self.test_preclude_delete_all()
        self.preclude_delete_all_tested = True
        self.test_starred_CRD()
        self.starred_CRD_tested = True
Ejemplo n.º 3
0
    def test_preclude_CRD(self):
        '''
            Tests creating, reading and deleting of preclusions.
        '''
        if not self.preclude_CRD_tested:
            model.add_module(self.test_preclude_code, self.test_module_name,
                             self.test_module_desc, self.test_module_mc,
                             self.test_module_status)

            outcome = model.add_preclusion(self.test_module_code,
                                           self.test_preclude_code)
            assert_true(outcome)

            # Module should not preclude itself check
            outcome = model.add_preclusion(self.test_preclude_code,
                                           self.test_preclude_code)
            assert_false(outcome)

            # Modules should mutually preclude each other
            preclude_info = model.get_preclusion(self.test_module_code)
            assert_true(preclude_info is not None)
            assert_equal(self.test_preclude_code, preclude_info[0][0])

            preclude_info = model.get_preclusion(self.test_preclude_code)
            assert_true(preclude_info is not None)
            assert_equal(self.test_module_code, preclude_info[0][0])

            model.delete_preclusion(self.test_module_code,
                                    self.test_preclude_code)
            model.delete_module(self.test_preclude_code)

            # After deleting preclusion, it should not exist
            preclude_info = model.get_preclusion(self.test_module_code)
            assert_true(len(preclude_info) == 0)
            return
Ejemplo n.º 4
0
    def test_prereq_delete_all(self):
        '''
            Tests deleting all prerequisites of specific module.
        '''
        if not self.prereq_delete_all_tested:
            model.add_module(self.test_prereq_code, self.test_module_name,
                             self.test_module_desc, self.test_module_mc,
                             self.test_module_status)
            model.add_module(self.test_prereq2_code, self.test_module_name,
                             self.test_module_desc, self.test_module_mc,
                             self.test_module_status)

            model.add_prerequisite(self.test_module_code,
                                   self.test_prereq_code,
                                   self.test_prereq_index)
            model.add_prerequisite(self.test_module_code,
                                   self.test_prereq2_code,
                                   self.test_prereq2_index)

            outcome = model.delete_all_prerequisite(self.test_module_code)
            assert_true(outcome)

            model.delete_module(self.test_prereq_code)
            model.delete_module(self.test_prereq2_code)
            prereq_info = model.get_prerequisite(self.test_module_code)
            assert_true(len(prereq_info) == 0)
            return
Ejemplo n.º 5
0
    def test_query_module_taken_together_specified_mod_specified_aysem(self):
        '''
            Tests querying the list of modules taken together
            with specified module in the specified semester
        '''

        # Add some dummy students and modules
        model.add_student('dummyYr1A', 1)
        model.add_module('AAA1111', 'Dummy 1', 'Description', 4, 'Active')
        model.add_module('AAA1112', 'Dummy 2', 'Description', 4, 'Active')
        model.add_student_plan('dummyYr1A', True, 'AAA1111', 'AY 17/18 Sem 2')
        model.add_student_plan('dummyYr1A', True, 'AAA1112', 'AY 17/18 Sem 2')

        list_of_mod_taken_together = \
            model.get_mod_taken_together_with_mod_and_aysem('AAA1111', 'AY 17/18 Sem 2')

        required_list = [('AAA1111', 'Dummy 1', 'AAA1112', 'Dummy 2', 1)]

        assert_equal(len(list_of_mod_taken_together), len(required_list))
        assert_equal(sorted(list_of_mod_taken_together), sorted(required_list))
        assert_true(
            self.is_count_in_non_ascending_order(list_of_mod_taken_together))

        # Clean up database
        model.delete_all_plans_of_student('dummyYr1A')
        model.delete_module('AAA1111')
        model.delete_module('AAA1112')
        model.delete_student('dummyYr1A')
Ejemplo n.º 6
0
    def test_query_module_before_internship(self):
        '''
            Tests querying the list of modules taken before internship,
            in AY/Sem with people doing internship in.
        '''
        # Add some modules and dummy students
        required_dummy = ('AAA1111', 'Dummy for Intern', 1)
        model.add_student('dummyYr1A', 1)
        model.add_module('AAA1111', 'Dummy for Intern', 'Description', 4,
                         'Active')
        model.add_student_plan('dummyYr1A', True, 'AAA1111', 'AY 16/17 Sem 2')
        model.add_student_plan('dummyYr1A', True, self.INTERN_MOD,
                               self.INTERN_SEM)

        # Get list of modules taken before internship
        list_of_modules_before_internship = model.get_mod_before_intern(
            self.INTERN_SEM)

        assert required_dummy in list_of_modules_before_internship

        # Clean up database
        model.delete_all_plans_of_student('dummyYr1A')
        model.delete_module('AAA1111')
        model.delete_student('dummyYr1A')

        # Test that required dummy no longer in list
        list_of_modules_before_internship = model.get_mod_before_intern(
            self.INTERN_SEM)

        assert required_dummy not in list_of_modules_before_internship
Ejemplo n.º 7
0
    def test_query_module_before_internship_with_mod_after_internship(self):
        '''
            Tests querying the list of modules taken before internship,
            in AY/Sem with people doing internship in, and
            with some modules taken after or during aysem of internship
        '''
        # Get list of modules before internship
        list_of_modules_before_internship = model.get_mod_before_intern(
            self.INTERN_SEM)

        # Add some dummy students and plans. They should not affect the list
        model.add_student('dummyYr1A', 1)
        model.add_module('AAA1111', 'Dummy with Intern', 'Description', 4,
                         'Active')
        model.add_module('AAA1112', 'Dummy after Intern', 'Description', 4,
                         'Active')
        model.add_student_plan('dummyYr1A', True, 'AAA1111', self.INTERN_SEM)
        model.add_student_plan('dummyYr1A', True, self.INTERN_MOD,
                               self.INTERN_SEM)
        model.add_student_plan('dummyYr1A', True, 'AAA1112', 'AY 17/18 Sem 2')

        # Get new list of modules before internship. It should remain unchanged.
        new_list_of_modules_before_internship = model.get_mod_before_intern(
            self.INTERN_SEM)

        assert_equal(len(list_of_modules_before_internship),
                     len(new_list_of_modules_before_internship))
        assert_equal(sorted(list_of_modules_before_internship),
                     sorted(new_list_of_modules_before_internship))

        # Clean up database
        model.delete_all_plans_of_student('dummyYr1A')
        model.delete_module('AAA1111')
        model.delete_module('AAA1112')
        model.delete_student('dummyYr1A')
Ejemplo n.º 8
0
    def setUp(self):
        '''
            Sets up the 'app.py' fixture
        '''
        self.middleware = []
        self.test_app = TestApp(APP.wsgifunc(*self.middleware))
        session.set_up(self.test_app)

        model.add_module(self.DUMMY_MODULE_CODE, self.DUMMY_MODULE_NAME, self.DUMMY_MODULE_NAME,
                         1, "New")
Ejemplo n.º 9
0
    def test_is_existing_module(self):
        '''
            Tests if is_existing_module() function is working correctly.
        '''
        current_test_module_code = "ZZ7654"

        assert_false(model.is_existing_module(current_test_module_code))
        model.add_module(current_test_module_code, "Exist Module",
                         "I describe myself", 4, "New")
        assert_true(model.is_existing_module(current_test_module_code))
        model.delete_module(current_test_module_code)
Ejemplo n.º 10
0
    def setUp(self):
        '''
            Add dummy modules and mountings into database
        '''
        self.module_overview_handler = ViewMod()
        self.mounting_view_handler = IndividualModule()
        self.current_ay = model.get_current_ay()
        self.next_ay = self.get_next_ay(self.current_ay)

        # Dummy modules
        model.add_module('BB1001', 'Dummy Module 1',
                         'This module is mounted in both sems in both AYs.', 1,
                         'Active')
        model.add_module('BB1002', 'Dummy Module 2',
                         'This module is mounted in sem 1 only, in both AYs.',
                         2, 'Active')
        model.add_module('BB1003', 'Dummy Module 3',
                         'This module is mounted in sem 2 only, in both AYs.',
                         3, 'Active')
        model.add_module(
            'BB1004', 'Dummy Module 4',
            'This module is not mounted in any sem, in both AYs.', 4, 'Active')

        # Dummy fixed mountings
        model.add_fixed_mounting('BB1001', self.current_ay + ' Sem 1', 10)
        model.add_fixed_mounting('BB1001', self.current_ay + ' Sem 2', 20)
        model.add_fixed_mounting('BB1002', self.current_ay + ' Sem 1', 30)
        model.add_fixed_mounting('BB1003', self.current_ay + ' Sem 2', 40)

        # Dummy tentative mountings
        model.add_tenta_mounting('BB1001', self.next_ay + ' Sem 1', 10)
        model.add_tenta_mounting('BB1001', self.next_ay + ' Sem 2', 20)
        model.add_tenta_mounting('BB1002', self.next_ay + ' Sem 1', 30)
        model.add_tenta_mounting('BB1003', self.next_ay + ' Sem 2', 40)
Ejemplo n.º 11
0
    def setUp(self):
        '''
            Add dummy modules and mountings into database,
            Then retrieve all fixed module mountings from database
        '''
        self.fixed_mounting_handler = Fixed()
        self.current_ay = model.get_current_ay()

        model.add_module('BB1001', 'Dummy Module 1',
                         'This module is mounted in both semesters.', 1,
                         'Active')
        model.add_module('BB1002', 'Dummy Module 2',
                         'This module is mounted in semester 1 only.', 2,
                         'Active')
        model.add_module('BB1003', 'Dummy Module 3',
                         'This module is mounted in semester 2 only.', 3,
                         'Active')
        model.add_module(
            'BB1004', 'Dummy Module 4',
            'This module is mounted in not mounted in any semester.', 4,
            'Active')

        model.add_fixed_mounting('BB1001', self.current_ay + ' Sem 1', 10)
        model.add_fixed_mounting('BB1001', self.current_ay + ' Sem 2', 20)
        model.add_fixed_mounting('BB1002', self.current_ay + ' Sem 1', 30)
        model.add_fixed_mounting('BB1003', self.current_ay + ' Sem 2', 40)

        self.fixed_mounting_handler.populate_module_code_and_name()
        self.fixed_mounting_handler.populate_module_ay_sem_data()

        assert_true(len(self.fixed_mounting_handler.full_mounting_plan) > 0)
Ejemplo n.º 12
0
    def test_add_mod_with_repeat_code(self):
        '''
            Tests that adding of module with duplicated code will fail.
        '''
        # Not duplicate code --> success
        outcome = model.add_module("AA2222", "Dummy Module",
                                   "Dummy Description", 1, "New")
        assert_true(outcome)

        # Duplicate code --> fail
        outcome = model.add_module(self.test_module_code,
                                   self.test_module_name,
                                   self.test_module_desc, self.test_module_mc,
                                   "New")
        assert_false(outcome)

        model.delete_module("AA2222")
    def test_list_students_take_module_empty(self):
        '''
            Tests querying the list of students who plan
            to take a certain mod in a specified semester,
            where these are no students planning to take the module.
        '''
        model.add_module('AAA1111', 'Dummy Module', 'Description', 4, 'Active')

        list_of_students_take_mod = \
            model.get_list_students_take_module('AAA1111', 'AY 17/18 Sem 1')

        required_list = []

        # Clean up database
        model.delete_module('AAA1111')

        assert_equal(len(list_of_students_take_mod), len(required_list))
        assert_equal(sorted(list_of_students_take_mod), sorted(required_list))
Ejemplo n.º 14
0
    def setUp(self):
        '''
            Add dummy modules, mountings and student planners into database
        '''

        # Dummy modules
        model.add_module('PT1001', 'Dummy Module 1',
                         "Dummy Module 1", 1, 'Active')
        model.add_module('PT1002', 'Dummy Module 2',
                         "Dummy Module 2", 2, 'Active')
        model.add_module('PT1003', 'Dummy Module 3',
                         "Dummy Module 3", 3, 'Active')
        model.add_module('PT1004', 'Dummy Module 4',
                         "Dummy Module 4", 4, 'Active')
        model.add_module('PT1005', 'Dummy Module 5',
                         "Dummy Module 5", 5, 'Active')

        model.add_fixed_mounting('PT1001', self.current_ay+' Sem 1', 10)
        model.add_fixed_mounting('PT1001', self.current_ay+' Sem 2', 15)
        model.add_fixed_mounting('PT1002', self.current_ay+' Sem 2', 20)

        model.add_tenta_mounting('PT1001', self.next_ay+' Sem 1', 10)
        model.add_tenta_mounting('PT1002', self.next_ay+' Sem 2', 20)
        model.add_tenta_mounting('PT1003', self.next_ay+' Sem 1', 30)
        model.add_tenta_mounting('PT1003', self.next_ay+' Sem 2', 35)
        model.add_tenta_mounting('PT1004', self.next_ay+' Sem 2', 40)
        model.add_tenta_mounting('PT1005', self.next_ay+' Sem 1', 50)

        model.add_student_plan('D1000000A', True, 'PT1001', self.current_ay+' Sem 1')
        model.add_student_plan('D1000000A', True, 'PT1002', self.current_ay+' Sem 2')
        model.add_student_plan('D2000000A', True, 'PT1001', self.current_ay+' Sem 1')
        model.add_student_plan('D2000000A', False, 'PT1002', self.current_ay+' Sem 2')
        model.add_student_plan('D1000000A', False, 'PT1003', self.next_ay+' Sem 1')
        model.add_student_plan('D3000000A', False, 'PT1001', self.current_ay+' Sem 1')
        model.add_student_plan('D3000000A', False, 'PT1004', self.next_ay+' Sem 2')

        model.add_student_plan('D5000000A', True, 'PT1001', self.current_ay+' Sem 1')
        model.add_student_plan('D5000001A', True, 'PT1001', self.current_ay+' Sem 1')
        model.add_student_plan('D5000002A', True, 'PT1001', self.current_ay+' Sem 2')
        model.add_student_plan('D5000000A', False, 'PT1005', self.next_ay+' Sem 1')
        model.add_student_plan('D5000001A', False, 'PT1005', self.next_ay+' Sem 1')
        model.add_student_plan('D5000002A', False, 'PT1005', self.next_ay+' Sem 1')
        model.add_student_plan('D5000003A', False, 'PT1005', self.next_ay+' Sem 1')
        model.add_student_plan('D5000004A', False, 'PT1005', self.next_ay+' Sem 1')
    def test_query_oversubscribed_modules(self):
        '''
            Tests querying the list of oversubscribed modules.
        '''
        # To simulate an oversubscribed module, add a module with 0 quota,
        # then add a student who wants to take the module.
        model.add_student('dummyYr1A', 1)
        model.add_module('AAA1111', 'Test Module', 'Description', 4, 'Active')
        model.add_student_plan('dummyYr1A', False, 'AAA1111', 'AY 17/18 Sem 1')

        list_of_oversub_mod = model.get_oversub_mod()
        oversubscribed_module = ('AAA1111', 'Test Module', 'AY 17/18 Sem 1',
                                 '?', 1)

        # Clean up the database
        model.delete_all_plans_of_student('dummyYr1A')
        model.delete_module("AAA1111")
        model.delete_student('dummyYr1A')

        # Test for presence of oversubscribed module
        assert oversubscribed_module in list_of_oversub_mod
Ejemplo n.º 16
0
    def setUp(self):
        '''
            Add dummy modules and mountings into database
        '''
        self.fixed_mounting_handler = Fixed()
        self.current_ay = model.get_current_ay()

        self.tentative_mounting_handler = Tentative()
        self.next_ay = self.get_next_ay(self.current_ay)
        self.selected_tenta_mountings = \
             model.get_all_tenta_mounted_modules_of_selected_ay(self.next_ay)

        # Dummy modules
        model.add_module('BB1001', 'Dummy Module 1',
                         'This module is mounted in both sems in both AYs.', 1, 'Active')
        model.add_module('BB1002', 'Dummy Module 2',
                         'This module is mounted in sem 1 only, in both AYs.', 2, 'Active')
        model.add_module('BB1003', 'Dummy Module 3',
                         'This module is mounted in sem 2 only, in both AYs.', 3, 'Active')
        model.add_module('BB1004', 'Dummy Module 4',
                         'This module is not mounted in any sem, in both AYs.', 4, 'Active')
        model.add_module('BB9999', 'Dummy Module X',
                         'This module is mounted 20 years in the future!', 0, 'Active')

        # Dummy fixed mountings
        model.add_fixed_mounting('BB1001', self.current_ay+' Sem 1', 10)
        model.add_fixed_mounting('BB1001', self.current_ay+' Sem 2', 20)
        model.add_fixed_mounting('BB1002', self.current_ay+' Sem 1', 30)
        model.add_fixed_mounting('BB1003', self.current_ay+' Sem 2', 40)

        self.load_fixed_full_mounting_plan()

        # Dummy tentative mountings
        model.add_tenta_mounting('BB1001', self.next_ay+' Sem 1', 10)
        model.add_tenta_mounting('BB1001', self.next_ay+' Sem 2', 20)
        model.add_tenta_mounting('BB1002', self.next_ay+' Sem 1', 30)
        model.add_tenta_mounting('BB1003', self.next_ay+' Sem 2', 40)
        model.add_tenta_mounting('BB9999', 'AY 36/37 Sem 1', 999)

        self.load_tenta_full_mounting_plan()
Ejemplo n.º 17
0
    def test_query_module_taken_together_entire_list(self):
        '''
            Tests querying the list of modules taken together
            in the same semester
        '''
        # Add some dummy students and modules
        model.add_student('dummyYr1A', 1)
        model.add_module('AAA1111', 'Dummy 1', 'Description', 4, 'Active')
        model.add_module('AAA1112', 'Dummy 2', 'Description', 4, 'Active')
        model.add_module('AAA1113', 'Dummy 3', 'Description', 4, 'Active')
        model.add_student_plan('dummyYr1A', True, 'AAA1111', 'AY 17/18 Sem 1')
        model.add_student_plan('dummyYr1A', True, 'AAA1112', 'AY 17/18 Sem 1')
        model.add_student_plan('dummyYr1A', True, 'AAA1112', 'AY 17/18 Sem 2')
        model.add_student_plan('dummyYr1A', True, 'AAA1113', 'AY 17/18 Sem 2')

        list_of_mod_taken_together = \
            model.get_all_mods_taken_together()

        assert_true(
            self.is_count_in_non_ascending_order(list_of_mod_taken_together))

        assert ('AAA1111', 'Dummy 1', 'AAA1112', 'Dummy 2', 'AY 17/18 Sem 1',
                1) in list_of_mod_taken_together
        assert ('AAA1112', 'Dummy 2', 'AAA1113', 'Dummy 3', 'AY 17/18 Sem 2',
                1) in list_of_mod_taken_together

        # Clean up database
        model.delete_all_plans_of_student('dummyYr1A')
        model.delete_module('AAA1111')
        model.delete_module('AAA1112')
        model.delete_module('AAA1113')
        model.delete_student('dummyYr1A')
Ejemplo n.º 18
0
    def test_module_CRD(self):
        '''
            Tests creating, reading and deleting of modules.
        '''
        if not self.module_CRD_tested:
            model.add_module(self.test_module_code, self.test_module_name,
                             self.test_module_desc, self.test_module_mc,
                             self.test_module_status)

            module_info = model.get_module(self.test_module_code)
            assert_true(module_info is not None)

            assert_equal(self.test_module_code, module_info[0])
            assert_equal(self.test_module_name, module_info[1])
            assert_equal(self.test_module_desc, module_info[2])
            assert_equal(self.test_module_mc, module_info[3])
            assert_equal(self.test_module_status, module_info[4].rstrip())

            model.delete_module(self.test_module_code)
            module_info = model.get_module(self.test_module_code)
            assert_true(module_info is None)
            return
Ejemplo n.º 19
0
    def test_query_module_taken_together_specified_mod(self):
        '''
            Tests querying the list of modules taken together
            with specified module in the same semester
        '''
        # Add some dummy students and modules
        model.add_student('dummyYr1A', 1)
        model.add_module('AAA1111', 'Dummy 1', 'Description', 4, 'Active')
        model.add_module('AAA1112', 'Dummy 2', 'Description', 4, 'Active')
        model.add_student_plan('dummyYr1A', True, 'AAA1111', 'AY 17/18 Sem 2')
        model.add_student_plan('dummyYr1A', True, 'AAA1112', 'AY 17/18 Sem 2')

        list_of_mod_taken_together = \
            model.get_mod_taken_together_with('AAA1111')

        # Clean up database
        model.delete_all_plans_of_student('dummyYr1A')
        model.delete_module('AAA1111')
        model.delete_module('AAA1112')
        model.delete_student('dummyYr1A')

        assert ('AAA1111', 'Dummy 1', 'AAA1112', 'Dummy 2', 'AY 17/18 Sem 2',
                1) in list_of_mod_taken_together
    def test_query_oversubscribed_modules_reworked(self):
        '''
            Tests querying the list of oversubscribed modules.
            (This test uses the reworked function)
        '''
        # To simulate an oversubscribed module, add a module with 0 quota,
        # then add a student who wants to take the module.
        oversub_handler = OversubModule()

        model.add_student('dummyYr1A', 1)
        model.add_module('AAA1111', 'Test Module', 'Description', 4, 'Active')
        model.add_student_plan('dummyYr1A', False, 'AAA1111', 'AY 17/18 Sem 1')

        list_of_oversub_mod = oversub_handler.GET("AY 17/18 Sem 1")
        oversubscribed_module = ('AAA1111', 'Test Module', 'AY 17/18 Sem 1',
                                 '-', 1, 1)

        # Clean up the database
        model.delete_all_plans_of_student('dummyYr1A')
        model.delete_module("AAA1111")
        model.delete_student('dummyYr1A')

        # Test for presence of oversubscribed module
        assert oversubscribed_module in list_of_oversub_mod
Ejemplo n.º 21
0
    def test_prereq_CRD(self):
        '''
            Tests creating, reading and deleting of prerequisites.
        '''
        if not self.prereq_CRD_tested:
            model.add_module(self.test_prereq_code, self.test_module_name,
                             self.test_module_desc, self.test_module_mc,
                             self.test_module_status)

            model.add_prerequisite(self.test_module_code,
                                   self.test_prereq_code,
                                   self.test_prereq_index)

            prereq_info = model.get_prerequisite(self.test_module_code)
            assert_true(prereq_info is not None)
            assert_equal(self.test_prereq_index, prereq_info[0][0])
            assert_equal(self.test_prereq_code, prereq_info[0][1])

            model.delete_prerequisite(self.test_module_code,
                                      self.test_prereq_code)
            model.delete_module(self.test_prereq_code)
            prereq_info = model.get_prerequisite(self.test_module_code)
            assert_true(len(prereq_info) == 0)
            return
Ejemplo n.º 22
0
    def POST(self):
        '''
            Handles the submitting of the add module form
        '''
        #get module values from form
        try:
            data = web.input()
            module_code = data.code.upper()
            module_name = data.name
            module_desc = data.description
            module_mc = data.mc
            #string is valid
            if not (model.check_code(module_code) and model.check_name(module_name)
                    and model.check_mcs(module_mc)):
                return model.outcome_invalid()

            outcome = model.add_module(module_code, module_name, module_desc, module_mc, 'New')
            return Outcome().POST("add_module", outcome, module_code)
        except AttributeError:
            return Outcome().POST("add_module", False, None)
 def setUp(self):
     '''
         Populate database and perform testing
     '''
     model.add_module(self.test_module_code, self.test_module_name,
                      self.test_module_desc, self.test_module_mc,
                      self.test_module_status)
     model.add_module(self.test_prereq_code, self.test_module_name,
                      self.test_module_desc, self.test_module_mc,
                      self.test_module_status)
     model.add_module(self.test_prereq2_code, self.test_module_name,
                      self.test_module_desc, self.test_module_mc,
                      self.test_module_status)
     model.add_module(self.test_prereq3_code, self.test_module_name,
                      self.test_module_desc, self.test_module_mc,
                      self.test_module_status)
     self.test_no_prereq_to_one_prereq()
     self.no_prereq_to_one_prereq_tested = True
     self.test_prereq_to_one_prereq()
     self.prereq_to_one_prereq_tested = True
     self.test_no_prereq_to_no_prereq()
     self.no_prereq_to_no_prereq_tested = True
     self.test_prereq_to_no_prereq()
     self.prereq_to_no_prereq_tested = True
     self.test_no_prereq_to_multiple_prereq()
     self.no_prereq_to_multiple_prereq_tested = True
     self.test_prereq_to_multiple_prereq()
     self.prereq_to_multiple_prereq_tested = True
     self.test_edit_prereq_duplicate_modules()
     self.edit_prereq_duplicate_tested = True
     self.test_edit_prereq_non_existent_modules()
     self.edit_prereq_non_existent_tested = True
     self.test_edit_prereq_already_in_preclusion()
     self.edit_prereq_already_in_preclusion = True
     self.test_edit_prereq_multiple_errors()
     self.edit_prereq_multiple_errors_tested = True
    def setUp(self):
        '''
            Add dummy modules and mountings into database
        '''
        # Dummy modules
        self.DUMMY_MODULE_CODE_1 = 'BB1001'
        self.DUMMY_MODULE_CODE_2 = 'BB1002'
        self.DUMMY_MODULE_CODE_3 = 'BB1003'
        model.add_module(self.DUMMY_MODULE_CODE_1, 'Dummy Module 1',
                         "Dummy Module", 1, 'Active')
        model.add_module(self.DUMMY_MODULE_CODE_2, 'Dummy Module 2',
                         "Dummy Module", 2, 'Active')
        model.add_module(self.DUMMY_MODULE_CODE_3, 'Dummy Module 3',
                         "Dummy Module", 3, 'Active')

        # Dummy mountings
        self.DUMMY_QUOTA_0 = None
        self.DUMMY_QUOTA_1 = 10
        self.DUMMY_QUOTA_2 = 20
        self.DUMMY_QUOTA_3 = 30
        model.add_fixed_mounting(self.DUMMY_MODULE_CODE_1,
                                 self.current_ay+' Sem 1', self.DUMMY_QUOTA_1)
        model.add_tenta_mounting(self.DUMMY_MODULE_CODE_1,
                                 self.next_ay+' Sem 1', self.DUMMY_QUOTA_1)
        model.add_fixed_mounting(self.DUMMY_MODULE_CODE_2,
                                 self.current_ay+' Sem 2', self.DUMMY_QUOTA_2)
        model.add_tenta_mounting(self.DUMMY_MODULE_CODE_2,
                                 self.next_ay+' Sem 2', self.DUMMY_QUOTA_2)
        model.add_fixed_mounting(self.DUMMY_MODULE_CODE_3,
                                 self.current_ay+' Sem 1', self.DUMMY_QUOTA_3)
        model.add_tenta_mounting(self.DUMMY_MODULE_CODE_3,
                                 self.next_ay+' Sem 1', self.DUMMY_QUOTA_3)
        model.add_fixed_mounting(self.DUMMY_MODULE_CODE_3,
                                 self.current_ay+' Sem 2', self.DUMMY_QUOTA_0)
        model.add_tenta_mounting(self.DUMMY_MODULE_CODE_3,
                                 self.next_ay+' Sem 2', self.DUMMY_QUOTA_0)
    def setUp(self):
        '''
            Add dummy modules and mountings into database
        '''
        # Dummy modules
        model.add_module('BB1001', 'Dummy Module 1',
                         "This module's quota is NOT modified", 1, 'Active')
        model.add_module('BB1002', 'Dummy Module 2',
                         "This module's quota for sem 1 is modified", 2, 'Active')
        model.add_module('BB1003', 'Dummy Module 3',
                         "This module's quota for sem 2 is modified", 3, 'Active')
        model.add_module('BB1004', 'Dummy Module 4',
                         "This module's quota for sem 1 has become specified", 4, 'Active')
        model.add_module('BB1005', 'Dummy Module 5',
                         "This module's quota for sem 2 has become unspecified", 5, 'Active')
        model.add_module('BB1006', 'Dummy Module 6',
                         "This module's quota for both sem 1 & 2 have been modified",
                         6, 'Active')

        model.add_module('BB2001', 'Dummy Module 1',
                         "This module is unmounted from sem 1", 1, 'Active')
        model.add_module('BB2002', 'Dummy Module 2',
                         "This module is remounted in sem 2", 2, 'Active')
        model.add_module('BB2003', 'Dummy Module 3',
                         "This module is changed from mounted in sem 1 to sem 2", 3, 'Active')
        model.add_module('BB2004', 'Dummy Module 4',
                         "This module's mounting is modified but quota is not modified",
                         4, 'Active')

        model.add_module('BB3001', 'Dummy Module 1',
                         "This module's quota is modified and will be restored", 1, 'Active')
        model.add_module('BB3002', 'Dummy Module 2',
                         "This module's quota has been specified and will be restored" +\
                         "to unspecified", 2, 'Active')
        model.add_module('BB3003', 'Dummy Module 3',
                         "This module's has been mounted and will be restored to unmounted",
                         3, 'Active')
        model.add_module('BB3004', 'Dummy Module 4',
                         "This module's has been unmounted and will be restored to mounted",
                         4, 'Active')
        model.add_module('BB3005', 'Dummy Module 5',
                         "This module's name will be restored", 5, 'Active')
        model.add_module('BB3006', 'Dummy Module 6',
                         "This module's name, description and MC will be restored", 6,
                         'Active')

        # Dummy fixed mountings
        model.add_fixed_mounting('BB1001', self.current_ay+' Sem 1', 10)
        model.add_fixed_mounting('BB1001', self.current_ay+' Sem 2', 10)
        model.add_fixed_mounting('BB1002', self.current_ay+' Sem 1', 20)
        model.add_fixed_mounting('BB1002', self.current_ay+' Sem 2', 20)
        model.add_fixed_mounting('BB1003', self.current_ay+' Sem 1', 30)
        model.add_fixed_mounting('BB1003', self.current_ay+' Sem 2', 30)
        model.add_fixed_mounting('BB1004', self.current_ay+' Sem 1', None)
        model.add_fixed_mounting('BB1004', self.current_ay+' Sem 2', None)
        model.add_fixed_mounting('BB1005', self.current_ay+' Sem 1', 50)
        model.add_fixed_mounting('BB1005', self.current_ay+' Sem 2', 50)
        model.add_fixed_mounting('BB1006', self.current_ay+' Sem 1', 60)
        model.add_fixed_mounting('BB1006', self.current_ay+' Sem 2', 60)

        model.add_fixed_mounting('BB2001', self.current_ay+' Sem 1', 10)
        model.add_fixed_mounting('BB2001', self.current_ay+' Sem 2', 10)
        model.add_fixed_mounting('BB2002', self.current_ay+' Sem 1', 20)
        model.add_fixed_mounting('BB2003', self.current_ay+' Sem 1', 30)
        model.add_fixed_mounting('BB2004', self.current_ay+' Sem 1', None)

        model.add_fixed_mounting('BB3001', self.current_ay+' Sem 1', 10)
        model.add_fixed_mounting('BB3002', self.current_ay+' Sem 1', None)
        model.add_fixed_mounting('BB3004', self.current_ay+' Sem 2', 40)

        # Dummy tentative mountings
        model.add_tenta_mounting('BB1001', self.next_ay+' Sem 1', 10)
        model.add_tenta_mounting('BB1001', self.next_ay+' Sem 2', 10)
        model.add_tenta_mounting('BB1002', self.next_ay+' Sem 1', 999)
        model.add_tenta_mounting('BB1002', self.next_ay+' Sem 2', 20)
        model.add_tenta_mounting('BB1003', self.next_ay+' Sem 1', 30)
        model.add_tenta_mounting('BB1003', self.next_ay+' Sem 2', 999)
        model.add_tenta_mounting('BB1004', self.next_ay+' Sem 1', 999)
        model.add_tenta_mounting('BB1004', self.next_ay+' Sem 2', None)
        model.add_tenta_mounting('BB1005', self.next_ay+' Sem 1', 50)
        model.add_tenta_mounting('BB1005', self.next_ay+' Sem 2', None)
        model.add_tenta_mounting('BB1006', self.next_ay+' Sem 1', 999)
        model.add_tenta_mounting('BB1006', self.next_ay+' Sem 2', None)

        model.add_tenta_mounting('BB2001', self.next_ay+' Sem 2', 10)
        model.add_tenta_mounting('BB2002', self.next_ay+' Sem 1', 20)
        model.add_tenta_mounting('BB2002', self.next_ay+' Sem 2', 20)
        model.add_tenta_mounting('BB2003', self.next_ay+' Sem 2', 30)
        model.add_tenta_mounting('BB2004', self.next_ay+' Sem 1', None)
        model.add_tenta_mounting('BB2004', self.next_ay+' Sem 2', None)

        model.add_tenta_mounting('BB3001', self.next_ay+' Sem 1', 999)
        model.add_tenta_mounting('BB3002', self.next_ay+' Sem 1', 999)
        model.add_tenta_mounting('BB3003', self.next_ay+' Sem 2', 999)

        # Dummy module backup
        model.store_original_module_info('BB3005', 'Original Module Name',
                                         "This module's name will be restored", 5)
        model.store_original_module_info('BB3006', 'Original Module Name',
                                         "Original Module Description", 0)