def test_duplication_exception(self): d = yaml.safe_load(example_yaml) d["task"].append({"name": "TK1"}) d["task"].append({"name": "TK2"}) n = Normalizer() n.normalize(d) with self.assertRaises(Exception) as cm: Resolver().resolve(d) self.assertEqual(cm.exception.args[0], "TK1, TK2 are duplicated.")
def test_profile(self): d = yaml.safe_load(example_yaml) n = Normalizer() n.normalize(d) pr = cProfile.Profile() pr.enable() Resolver().resolve(d) pr.disable() st = pstats.Stats(pr) st.sort_stats("cumtime") st.print_stats(0.1)
def process_yaml(b64_data, output_svg): data_yaml = decode_base64url(b64_data) logger.debug(data_yaml) data_dict = yaml.safe_load(data_yaml) n = Normalizer() n.normalize(data_dict) renderer = resolve_render(data_dict) if output_svg: return make_svg_response(renderer.get_svg().tostring()) else: return make_png_response(renderer.get_svg().tostring())
def process_sch(b64_data, output_svg=True): data_sch = decode_base64url(b64_data) logger.debug(data_sch) p = Parser() p.parse(data_sch) n = Normalizer() n.normalize(p.output) renderer = resolve_render(p.output) if output_svg: return make_svg_response(renderer.get_svg().tostring()) else: return make_png_response(renderer.get_svg().tostring())
class TestNormalize(unittest.TestCase): def test_normalize_weekday(self): d = {"project": {"closed": ["su", "sat", "Wed", "Mo"]}} n = Normalizer() n.normalize(d) self.assertEqual(d["project"]["closed"], ["Sunday", "Saturday", "Wednesday", "Monday"]) def test_normalize_period_in_task_plan(self): cases = [ (1, 1), (1.5, 1.5), ("1", 1), ("1 day", 1), ("2 days", 2), ("0.5 days", 0.5), ("1.5 days", 1.5), ("1 hour", 0.125), ("8 hours", 1), ] for case in cases: with self.subTest(period=case[0], type=type(case[0]), expected=case[1]): d = {"task": [{"plan": {"period": case[0]}}]} n = Normalizer() n.normalize(d) self.assertEqual(d["task"][0]["plan"]["period"], case[1]) self.assertTrue(isinstance(d["task"][0]["plan"]["period"], float))
def test_normalize_period_in_others(self): d = { "task": [{"actual": {"period": "2 days"}}], "milestone": [{"plan": {"period": "2 days"}, "actual": {"period": "2 days"}}], } n = Normalizer() n.normalize(d) self.assertEqual(d["task"][0]["actual"]["period"], 2.0) self.assertTrue(isinstance(d["task"][0]["actual"]["period"], float)) self.assertEqual(d["milestone"][0]["plan"]["period"], 2.0) self.assertTrue(isinstance(d["milestone"][0]["plan"]["period"], float)) self.assertEqual(d["milestone"][0]["actual"]["period"], 2.0) self.assertTrue(isinstance(d["milestone"][0]["actual"]["period"], float))
def test_schedule_to_drawing(self): d = yaml.safe_load(example_yaml) n = Normalizer() n.normalize(d) result = Resolver().resolve(d) self.assertEqual(result["calendar"].start, date(2020, 4, 1)) self.assertEqual(result["calendar"].end, date(2020, 5, 15)) self.assertEqual(result["calendar"].today, date(2020, 4, 20)) self.assertEqual(len(result["calendar"].closed), 13) names = {sc.name for sc in result["schedules"]} self.assertEqual( names, { "TK1", "TK2", "task1", "task2", "task3", "task4", "task5", "milestone1" })
def test_calculate_plan_dates(self): d = yaml.safe_load(example_yaml) n = Normalizer() n.normalize(d) result = Resolver().resolve(d) sc = {sc.name: sc for sc in result["schedules"]} expected = { "TK1": ((2020, 4, 10), (2020, 4, 24)), "TK2": ((2020, 4, 27), (2020, 5, 11)), "task1": ((2020, 4, 1), (2020, 4, 6)), "task2": ((2020, 4, 7), (2020, 4, 9)), "task3": ((2020, 4, 10), (2020, 5, 15)), "task4": ((2020, 4, 10), (2020, 4, 17)), "task5": ((2020, 4, 9), (2020, 4, 22)), } for name, plan in expected.items(): with self.subTest(name=name, plan=plan): start = date(*plan[0]) end = date(*plan[1]) self.assertEqual(sc[name].plan_start, start) self.assertEqual(sc[name].plan_end, end)
def test_normalize_progress_in_milestone(self): d = {"milestone": [{"actual": {"progress": "50%"}}]} n = Normalizer() n.normalize(d) self.assertEqual(d["milestone"][0]["actual"]["progress"], 0.5)
def test_normalize_weekday(self): d = {"project": {"closed": ["su", "sat", "Wed", "Mo"]}} n = Normalizer() n.normalize(d) self.assertEqual(d["project"]["closed"], ["Sunday", "Saturday", "Wednesday", "Monday"])
cases = [ (0.1, 0.1), (1, 1), ("0.1", 0.1), ("1", 1), ("10%", 0.1), ("200%", 2), ("10 %", 0.1), ("0.1%", 0.001), ("1/5", 0.2), ("1/3", 0.333), ("1/0.5", 2), ("1 / 5", 0.2), ] for case in cases: with self.subTest(period=case[0], type=type(case[0]), expected=case[1]): d = {"task": [{"actual": {"progress": case[0]}}]} n = Normalizer() n.normalize(d) self.assertEqual(round(d["task"][0]["actual"]["progress"], 3), case[1]) self.assertTrue(isinstance(d["task"][0]["actual"]["progress"], float)) def test_normalize_progress_in_milestone(self): d = {"milestone": [{"actual": {"progress": "50%"}}]} n = Normalizer() n.normalize(d) self.assertEqual(d["milestone"][0]["actual"]["progress"], 0.5)