from models.curriculum import ( Curriculum, LO_list_to_dict, dict_to_LO_list, dump_LO_dict ) """ Scripts which builds a curriculum for the user from an input learning outcome .txt file and dumps it to a pickle file. A human-readable version is dumped to a json file, as a dictionary """ # Instantiates a curriculum object curr = Curriculum() # User inputs name of the curriculum e.g. 'computer_science' curr.user_input_name() # User inputs name of the .txt file containing the learning outcomes curr.user_input_filename_LOs() # Sets the number of learning outcome strands from blank lines in file curr.set_num_strands_from_file() # Checks with user whether number of strands is correct curr.user_check_num_strands() # User inputs names of the strands curr.user_input_strand_names() # Loads the LOs into the curriculum, as a list of lists of LearningOutcome objects curr.load_LOs_from_file(curr.filename_LOs_txt) # Writes a pickle object representation of the curriculum to file curr.dump_curriculum(f"{curr.name}.curriculum.pickle") # Converts the LO lists to dictionary form LO_dict = LO_list_to_dict(curr.LOs, curr.strand_names) dump_LO_dict(LO_dict, f"{curr.name}.LO_dict.json")
class TestCurriculum(unittest.TestCase): def setUp(self): self.curr_1 = Curriculum(name="computer_science", country="ireland", ID="n/a", num_of_strands=3, strand_names=[ "core concepts", "practices and principles", "applied learning tasks" ], filename_LOs_txt="./fixtures/test_LO_CS.txt") def tearDown(self): pass def test_init(self): self.assertEqual(self.curr_1.name, "COMPUTER_SCIENCE") self.assertEqual(self.curr_1.country, "Ireland") self.assertEqual(self.curr_1.ID, "n/a") self.assertEqual(self.curr_1.num_of_strands, 3) self.assertEqual(self.curr_1.strand_names[0], "CORE CONCEPTS") def test_set_num_of_strands(self): self.assertRaises(TypeError, self.curr_1.set_num_of_strands, 2.5) self.assertRaises(TypeError, self.curr_1.set_num_of_strands, "igs") def test_set_num_strands_from_file(self): self.curr_1.set_num_of_strands(0) self.curr_1.set_num_strands_from_file(self.curr_1.filename_LOs_txt) self.assertEqual(self.curr_1.num_of_strands, 3) def test_add_strand_name(self): self.curr_1.add_strand_name("dummy") self.assertEqual(len(self.curr_1.strand_names), 4) self.assertEqual(self.curr_1.add_strand_name("dummy"), False) self.assertEqual(len(self.curr_1.strand_names), 4) def test_add_strand_names(self): self.curr_1.add_strand_names(["dummy", "dummy_2"]) self.assertEqual(len(self.curr_1.strand_names), 5) self.curr_1.add_strand_names(["dummy", "dummy_2"]) self.assertEqual(len(self.curr_1.strand_names), 5) def test_load_LOs_from_file(self): self.curr_1.load_LOs_from_file(self.curr_1.filename_LOs_txt) self.assertEqual([len(self.curr_1.LOs[i]) for i in range(3)], [23, 22, 14]) self.assertEqual( self.curr_1.LOs[1][-1].text, "students can explain the different stages in software testing") self.assertEqual( self.curr_1.LOs[2][-2].text, "students can develop a program that utilises digital and analogue inputs" ) def test_list_to_dict_conversion(self): """ This simulataneously tests LO_list_to_dict and dict_to_LO_list (inverse functions) """ self.curr_1.load_LOs_from_file(self.curr_1.filename_LOs_txt) LO_dict = LO_list_to_dict(self.curr_1.LOs, self.curr_1.strand_names) LO_list = dict_to_LO_list(LO_dict) LO_dict_2 = LO_list_to_dict(LO_list, self.curr_1.strand_names) self.assertEqual(LO_dict, LO_dict_2) def test_getitem(self): self.curr_1.load_LOs_from_file(self.curr_1.filename_LOs_txt) dict_1, i = {}, 0 for strand in self.curr_1.LOs: for LO in strand: dict_1[i] = LO.text i += 1 dict_2 = {i: LO.text for i, LO in enumerate(self.curr_1)} self.assertEqual(dict_1, dict_2)