add support for reporting the closest task that is in a signed MoU
[utils.git] / src / budget_sync / test / test_write_budget_csv.py
1 from budget_sync.budget_graph import BudgetGraph
2 from budget_sync.config import Config
3 from budget_sync.test.mock_path import DIR, MockPath
4 from budget_sync.test.test_mock_path import make_filesystem_and_report_if_error
5 from budget_sync.util import pretty_print
6 from budget_sync.write_budget_csv import write_budget_csv
7 from budget_sync.test.mock_bug import MockBug
8 import unittest
9
10
11 class TestWriteBudgetMarkdown(unittest.TestCase):
12 maxDiff = None
13
14 def test(self):
15 config = Config.from_str(
16 """
17 bugzilla_url = "https://bugzilla.example.com/"
18 [people."person1"]
19 aliases = ["person1_alias1", "alias1"]
20 full_name = "Person One"
21 [people."person2"]
22 email = "person2@example.com"
23 aliases = ["person1_alias2", "alias2", "person 2"]
24 full_name = "Person Two"
25 [people."person3"]
26 email = "user@example.com"
27 full_name = "Person Three"
28 [milestones]
29 "milestone 1" = { canonical_bug_id = 1 }
30 "milestone 2" = { canonical_bug_id = 2 }
31 """)
32 budget_graph = BudgetGraph([
33 MockBug(bug_id=1,
34 cf_budget_parent=None,
35 cf_budget="1000",
36 cf_total_budget="1000",
37 cf_nlnet_milestone="milestone 1",
38 cf_payees_list="""
39 person1 = 123
40 alias1 = 456
41 person2 = {amount=421,paid=2020-01-01}
42 """,
43 summary="",
44 assigned_to="person2@example.com",
45 cf_is_in_nlnet_mou2="Yes"),
46 MockBug(bug_id=2,
47 cf_budget_parent=None,
48 cf_budget="0",
49 cf_total_budget="0",
50 cf_nlnet_milestone="milestone 2",
51 cf_payees_list="",
52 summary="",
53 assigned_to="person2@example.com",
54 cf_is_in_nlnet_mou2="Yes"),
55 ], config)
56 self.assertEqual([], budget_graph.get_errors())
57 # pretty_print(budget_graph)
58 with make_filesystem_and_report_if_error(self) as filesystem:
59 output_dir = MockPath("/output_dir/", filesystem=filesystem)
60 write_budget_csv(budget_graph, output_dir)
61 self.assertEqual(filesystem.files, {
62 '/': DIR,
63 '/output_dir': DIR,
64 '/output_dir/csvs.mdwn': b"""\
65 # milestone 1
66
67 [[!table format=csv file="/output_dir/milestone 1.csv"]]
68 # milestone 2
69
70 [[!table format=csv file="/output_dir/milestone 2.csv"]]""",
71 '/output_dir/milestone 1.csv': b"""\
72 bug_id,excl_subtasks,inc_subtasks,fixed_excl_subtasks,fixed_inc_subtasks,req_excl_subtasks,paid_excl_subtasks,person1 (planned amt),person1 (req amt),person1 (req date),person1 (paid amt),person1 (paid date),person2 (planned amt),person2 (req amt),person2 (req date),person2 (paid amt),person2 (paid date)
73 1,1000,1000,1000,1000,421,421,579,0,,0,,421,421,,421,2020-01-01
74 """,
75 '/output_dir/milestone 2.csv': b"""\
76 bug_id,excl_subtasks,inc_subtasks,fixed_excl_subtasks,fixed_inc_subtasks,req_excl_subtasks,paid_excl_subtasks
77 """
78 })
79 # TODO: add more test cases
80
81
82 if __name__ == "__main__":
83 unittest.main()