def setUp(self): super(TestProgressSummary, self).setUp() self.course_key = CourseLocator( org='some_org', course='some_course', run='some_run' ) self.loc_a = self.create_location('chapter', 'a') self.loc_b = self.create_location('section', 'b') self.loc_c = self.create_location('section', 'c') self.loc_d = self.create_location('vertical', 'd') self.loc_e = self.create_location('vertical', 'e') self.loc_f = self.create_location('vertical', 'f') self.loc_g = self.create_location('vertical', 'g') self.loc_h = self.create_location('problem', 'h') self.loc_i = self.create_location('problem', 'i') self.loc_j = self.create_location('problem', 'j') self.loc_k = self.create_location('html', 'k') self.loc_l = self.create_location('problem', 'l') self.loc_m = self.create_location('html', 'm') self.loc_n = self.create_location('problem', 'n') weighted_scores = { self.loc_h: self.create_score(2, 5), self.loc_i: self.create_score(3, 5), self.loc_j: self.create_score(0, 1), self.loc_l: self.create_score(1, 3), self.loc_n: self.create_score(3, 10), } locations_to_scored_children = { self.loc_a: [self.loc_h, self.loc_i, self.loc_j, self.loc_l, self.loc_n], self.loc_b: [self.loc_h, self.loc_i, self.loc_j, self.loc_l], self.loc_c: [self.loc_n], self.loc_d: [self.loc_h, self.loc_i], self.loc_e: [self.loc_j, self.loc_l], self.loc_f: [], self.loc_g: [self.loc_n], self.loc_k: [], self.loc_m: [], } locations_function = lambda location: locations_to_scored_children[location] self.progress_summary = ProgressSummary( None, weighted_scores, locations_function )
def setUp(self): super(TestProgressSummary, self).setUp() self.course_key = CourseLocator( org='some_org', course='some_course', run='some_run' ) self.loc_a = self.create_location('chapter', 'a') self.loc_b = self.create_location('section', 'b') self.loc_c = self.create_location('section', 'c') self.loc_d = self.create_location('vertical', 'd') self.loc_e = self.create_location('vertical', 'e') self.loc_f = self.create_location('vertical', 'f') self.loc_g = self.create_location('vertical', 'g') self.loc_h = self.create_location('problem', 'h') self.loc_i = self.create_location('problem', 'i') self.loc_j = self.create_location('problem', 'j') self.loc_k = self.create_location('html', 'k') self.loc_l = self.create_location('problem', 'l') self.loc_m = self.create_location('html', 'm') self.loc_n = self.create_location('problem', 'n') weighted_scores = { self.loc_h: self.create_score(2, 5), self.loc_i: self.create_score(3, 5), self.loc_j: self.create_score(0, 1), self.loc_l: self.create_score(1, 3), self.loc_n: self.create_score(3, 10), } locations_to_scored_children = { self.loc_a: [self.loc_h, self.loc_i, self.loc_j, self.loc_l, self.loc_n], self.loc_b: [self.loc_h, self.loc_i, self.loc_j, self.loc_l], self.loc_c: [self.loc_n], self.loc_d: [self.loc_h, self.loc_i], self.loc_e: [self.loc_j, self.loc_l], self.loc_f: [], self.loc_g: [self.loc_n], self.loc_k: [], self.loc_m: [], } self.progress_summary = ProgressSummary( None, weighted_scores, locations_to_scored_children )
def setUp(self): super(TestProgressSummary, self).setUp() self.course_key = CourseLocator(org="some_org", course="some_course", run="some_run") self.loc_a = self.create_location("chapter", "a") self.loc_b = self.create_location("section", "b") self.loc_c = self.create_location("section", "c") self.loc_d = self.create_location("vertical", "d") self.loc_e = self.create_location("vertical", "e") self.loc_f = self.create_location("vertical", "f") self.loc_g = self.create_location("vertical", "g") self.loc_h = self.create_location("problem", "h") self.loc_i = self.create_location("problem", "i") self.loc_j = self.create_location("problem", "j") self.loc_k = self.create_location("html", "k") self.loc_l = self.create_location("problem", "l") self.loc_m = self.create_location("html", "m") self.loc_n = self.create_location("problem", "n") weighted_scores = { self.loc_h: self.create_score(2, 5), self.loc_i: self.create_score(3, 5), self.loc_j: self.create_score(0, 1), self.loc_l: self.create_score(1, 3), self.loc_n: self.create_score(3, 10), } locations_to_scored_children = { self.loc_a: [self.loc_h, self.loc_i, self.loc_j, self.loc_l, self.loc_n], self.loc_b: [self.loc_h, self.loc_i, self.loc_j, self.loc_l], self.loc_c: [self.loc_n], self.loc_d: [self.loc_h, self.loc_i], self.loc_e: [self.loc_j, self.loc_l], self.loc_f: [], self.loc_g: [self.loc_n], self.loc_k: [], self.loc_m: [], } self.progress_summary = ProgressSummary(None, weighted_scores, locations_to_scored_children)
class TestProgressSummary(TestCase): """ Test the method that calculates the score for a given block based on the cumulative scores of its children. This test class uses a hard-coded block hierarchy with scores as follows: a +--------+--------+ b c +--------------+-----------+ | d e f g +-----+ +-----+-----+ | | h i j k l m n (2/5) (3/5) (0/1) - (1/3) - (3/10) """ def setUp(self): super(TestProgressSummary, self).setUp() self.course_key = CourseLocator( org='some_org', course='some_course', run='some_run' ) self.loc_a = self.create_location('chapter', 'a') self.loc_b = self.create_location('section', 'b') self.loc_c = self.create_location('section', 'c') self.loc_d = self.create_location('vertical', 'd') self.loc_e = self.create_location('vertical', 'e') self.loc_f = self.create_location('vertical', 'f') self.loc_g = self.create_location('vertical', 'g') self.loc_h = self.create_location('problem', 'h') self.loc_i = self.create_location('problem', 'i') self.loc_j = self.create_location('problem', 'j') self.loc_k = self.create_location('html', 'k') self.loc_l = self.create_location('problem', 'l') self.loc_m = self.create_location('html', 'm') self.loc_n = self.create_location('problem', 'n') weighted_scores = { self.loc_h: self.create_score(2, 5), self.loc_i: self.create_score(3, 5), self.loc_j: self.create_score(0, 1), self.loc_l: self.create_score(1, 3), self.loc_n: self.create_score(3, 10), } locations_to_scored_children = { self.loc_a: [self.loc_h, self.loc_i, self.loc_j, self.loc_l, self.loc_n], self.loc_b: [self.loc_h, self.loc_i, self.loc_j, self.loc_l], self.loc_c: [self.loc_n], self.loc_d: [self.loc_h, self.loc_i], self.loc_e: [self.loc_j, self.loc_l], self.loc_f: [], self.loc_g: [self.loc_n], self.loc_k: [], self.loc_m: [], } self.progress_summary = ProgressSummary( None, weighted_scores, locations_to_scored_children ) def create_score(self, earned, possible): """ Create a new mock Score object with specified earned and possible values """ score = MagicMock() score.possible = possible score.earned = earned return score def create_location(self, block_type, block_id): """ Create a new BlockUsageLocation with the given type and ID. """ return BlockUsageLocator( course_key=self.course_key, block_type=block_type, block_id=block_id ) def test_score_chapter(self): earned, possible = self.progress_summary.score_for_module(self.loc_a) self.assertEqual(earned, 9) self.assertEqual(possible, 24) def test_score_section_many_leaves(self): earned, possible = self.progress_summary.score_for_module(self.loc_b) self.assertEqual(earned, 6) self.assertEqual(possible, 14) def test_score_section_one_leaf(self): earned, possible = self.progress_summary.score_for_module(self.loc_c) self.assertEqual(earned, 3) self.assertEqual(possible, 10) def test_score_vertical_two_leaves(self): earned, possible = self.progress_summary.score_for_module(self.loc_d) self.assertEqual(earned, 5) self.assertEqual(possible, 10) def test_score_vertical_two_leaves_one_unscored(self): earned, possible = self.progress_summary.score_for_module(self.loc_e) self.assertEqual(earned, 1) self.assertEqual(possible, 4) def test_score_vertical_no_score(self): earned, possible = self.progress_summary.score_for_module(self.loc_f) self.assertEqual(earned, 0) self.assertEqual(possible, 0) def test_score_vertical_one_leaf(self): earned, possible = self.progress_summary.score_for_module(self.loc_g) self.assertEqual(earned, 3) self.assertEqual(possible, 10) def test_score_leaf(self): earned, possible = self.progress_summary.score_for_module(self.loc_h) self.assertEqual(earned, 2) self.assertEqual(possible, 5) def test_score_leaf_no_score(self): earned, possible = self.progress_summary.score_for_module(self.loc_m) self.assertEqual(earned, 0) self.assertEqual(possible, 0)
class TestProgressSummary(TestCase): """ Test the method that calculates the score for a given block based on the cumulative scores of its children. This test class uses a hard-coded block hierarchy with scores as follows: a +--------+--------+ b c +--------------+-----------+ | d e f g +-----+ +-----+-----+ | | h i j k l m n (2/5) (3/5) (0/1) - (1/3) - (3/10) """ # Tell Django to clean out all databases, not just default multi_db = True def setUp(self): super(TestProgressSummary, self).setUp() self.course_key = CourseLocator(org='some_org', course='some_course', run='some_run') self.loc_a = self.create_location('chapter', 'a') self.loc_b = self.create_location('section', 'b') self.loc_c = self.create_location('section', 'c') self.loc_d = self.create_location('vertical', 'd') self.loc_e = self.create_location('vertical', 'e') self.loc_f = self.create_location('vertical', 'f') self.loc_g = self.create_location('vertical', 'g') self.loc_h = self.create_location('problem', 'h') self.loc_i = self.create_location('problem', 'i') self.loc_j = self.create_location('problem', 'j') self.loc_k = self.create_location('html', 'k') self.loc_l = self.create_location('problem', 'l') self.loc_m = self.create_location('html', 'm') self.loc_n = self.create_location('problem', 'n') weighted_scores = { self.loc_h: self.create_score(2, 5), self.loc_i: self.create_score(3, 5), self.loc_j: self.create_score(0, 1), self.loc_l: self.create_score(1, 3), self.loc_n: self.create_score(3, 10), } locations_to_scored_children = { self.loc_a: [self.loc_h, self.loc_i, self.loc_j, self.loc_l, self.loc_n], self.loc_b: [self.loc_h, self.loc_i, self.loc_j, self.loc_l], self.loc_c: [self.loc_n], self.loc_d: [self.loc_h, self.loc_i], self.loc_e: [self.loc_j, self.loc_l], self.loc_f: [], self.loc_g: [self.loc_n], self.loc_k: [], self.loc_m: [], } self.progress_summary = ProgressSummary(None, weighted_scores, locations_to_scored_children) def create_score(self, earned, possible): """ Create a new mock Score object with specified earned and possible values """ score = MagicMock() score.possible = possible score.earned = earned return score def create_location(self, block_type, block_id): """ Create a new BlockUsageLocation with the given type and ID. """ return BlockUsageLocator(course_key=self.course_key, block_type=block_type, block_id=block_id) def test_score_chapter(self): earned, possible = self.progress_summary.score_for_module(self.loc_a) self.assertEqual(earned, 9) self.assertEqual(possible, 24) def test_score_section_many_leaves(self): earned, possible = self.progress_summary.score_for_module(self.loc_b) self.assertEqual(earned, 6) self.assertEqual(possible, 14) def test_score_section_one_leaf(self): earned, possible = self.progress_summary.score_for_module(self.loc_c) self.assertEqual(earned, 3) self.assertEqual(possible, 10) def test_score_vertical_two_leaves(self): earned, possible = self.progress_summary.score_for_module(self.loc_d) self.assertEqual(earned, 5) self.assertEqual(possible, 10) def test_score_vertical_two_leaves_one_unscored(self): earned, possible = self.progress_summary.score_for_module(self.loc_e) self.assertEqual(earned, 1) self.assertEqual(possible, 4) def test_score_vertical_no_score(self): earned, possible = self.progress_summary.score_for_module(self.loc_f) self.assertEqual(earned, 0) self.assertEqual(possible, 0) def test_score_vertical_one_leaf(self): earned, possible = self.progress_summary.score_for_module(self.loc_g) self.assertEqual(earned, 3) self.assertEqual(possible, 10) def test_score_leaf(self): earned, possible = self.progress_summary.score_for_module(self.loc_h) self.assertEqual(earned, 2) self.assertEqual(possible, 5) def test_score_leaf_no_score(self): earned, possible = self.progress_summary.score_for_module(self.loc_m) self.assertEqual(earned, 0) self.assertEqual(possible, 0)