|
import unittest |
|
import os |
|
from ..wbs_populate import WBSPopulate |
|
|
|
class TestWBSPopulate(unittest.TestCase): |
|
def test_project_from_level1_json(self): |
|
""" |
|
Create a WBSProject from a level 1 JSON file. |
|
""" |
|
|
|
path_level1_json = os.path.join(os.path.dirname(__file__), '..', 'test_data', 'solorfarm_wbs_level1.json') |
|
|
|
|
|
wbs_project = WBSPopulate.project_from_level1_json(path_level1_json) |
|
|
|
|
|
self.assertEqual(wbs_project.root_task.id, "2900c638-8e2a-4b7b-96ea-e096a7bc8b5e") |
|
self.assertEqual(wbs_project.root_task.description, "Denmark Solar Farm") |
|
self.assertEqual(wbs_project.root_task.extra_fields['final_deliverable'], "Operational Solar Farm") |
|
|
|
def test_extend_project_with_level2_json(self): |
|
""" |
|
Create a WBSProject with a hierarchy of tasks. |
|
""" |
|
|
|
path_level1_json = os.path.join(os.path.dirname(__file__), '..', 'test_data', 'solorfarm_wbs_level1.json') |
|
path_level2_json = os.path.join(os.path.dirname(__file__), '..', 'test_data', 'solorfarm_wbs_level2.json') |
|
wbs_project = WBSPopulate.project_from_level1_json(path_level1_json) |
|
|
|
|
|
WBSPopulate.extend_project_with_level2_json(wbs_project, path_level2_json) |
|
|
|
|
|
task1 = wbs_project.find_task_by_id("9180ee65-d7cf-47fe-ad75-b4bf073b4a16") |
|
self.assertIsNotNone(task1) |
|
self.assertEqual(task1.description, "Design Solar Farm Layout") |
|
self.assertEqual(len(task1.task_ids()), 1) |
|
|
|
task2 = wbs_project.find_task_by_id("99b2720a-d390-43b4-af18-da889d974a1a") |
|
self.assertIsNotNone(task2) |
|
self.assertEqual(task2.description, "Project Close-Out") |
|
self.assertEqual(len(task2.task_ids()), 3) |
|
|
|
def test_extend_project_with_dependencies_json(self): |
|
""" |
|
Establish dependencies between tasks. |
|
""" |
|
|
|
path_level1_json = os.path.join(os.path.dirname(__file__), '..', 'test_data', 'solorfarm_wbs_level1.json') |
|
path_level2_json = os.path.join(os.path.dirname(__file__), '..', 'test_data', 'solorfarm_wbs_level2.json') |
|
path_dependencies_json = os.path.join(os.path.dirname(__file__), '..', 'test_data', 'solarfarm_task_dependencies.json') |
|
wbs_project = WBSPopulate.project_from_level1_json(path_level1_json) |
|
WBSPopulate.extend_project_with_level2_json(wbs_project, path_level2_json) |
|
|
|
|
|
WBSPopulate.extend_project_with_dependencies_json(wbs_project, path_dependencies_json) |
|
|
|
|
|
task1 = wbs_project.find_task_by_id("6e6e7e83-8db9-4ac9-88d3-0aeda252a19e") |
|
self.assertIsNotNone(task1) |
|
self.assertEqual(task1.description, "Procure Land for Solar Farm") |
|
self.assertEqual(task1.extra_fields['depends_on_task_ids'], ["303c1a0b-9609-4297-8862-5b42a6230b2b"]) |
|
self.assertEqual(task1.extra_fields['depends_on_task_explanations'], ["Land Acquisition and Preparation must be completed before Procuring Land for Solar Farm starts."]) |
|
|
|
def test_extend_project_with_durations_json(self): |
|
""" |
|
Assign time estimates to tasks. |
|
""" |
|
|
|
path_level1_json = os.path.join(os.path.dirname(__file__), '..', 'test_data', 'solorfarm_wbs_level1.json') |
|
path_level2_json = os.path.join(os.path.dirname(__file__), '..', 'test_data', 'solorfarm_wbs_level2.json') |
|
path_durations_json = os.path.join(os.path.dirname(__file__), '..', 'test_data', 'solarfarm_task_durations.json') |
|
wbs_project = WBSPopulate.project_from_level1_json(path_level1_json) |
|
WBSPopulate.extend_project_with_level2_json(wbs_project, path_level2_json) |
|
|
|
|
|
WBSPopulate.extend_project_with_durations_json(wbs_project, path_durations_json) |
|
|
|
|
|
task1 = wbs_project.find_task_by_id("73f16e9d-58f0-4447-b8e2-beb13eedc1e5") |
|
self.assertIsNotNone(task1) |
|
self.assertEqual(task1.description, "Develop Detailed Project Plans") |
|
self.assertEqual(task1.extra_fields["delay_risks"], "Delays in creating detailed project plans due to complexity of the solar farm project, potential for changes to be made after completion.") |
|
self.assertEqual(task1.extra_fields["mitigation_strategy"], "Establish clear communication channels with stakeholders, utilize project management tools to track progress, and schedule regular meetings to ensure timely completion of the task.") |
|
self.assertEqual(task1.extra_fields["days_min"], 15) |
|
self.assertEqual(task1.extra_fields["days_max"], 30) |
|
self.assertEqual(task1.extra_fields["days_realistic"], 22) |
|
|
|
def test_extend_project_with_subtasks_json(self): |
|
""" |
|
Bigger tasks that have been decomposed into smaller subtasks. |
|
""" |
|
|
|
path_level1_json = os.path.join(os.path.dirname(__file__), '..', 'test_data', 'solorfarm_wbs_level1.json') |
|
path_level2_json = os.path.join(os.path.dirname(__file__), '..', 'test_data', 'solorfarm_wbs_level2.json') |
|
path_level3_json = os.path.join(os.path.dirname(__file__), '..', 'test_data', 'solarfarm_wbs_level3.json') |
|
wbs_project = WBSPopulate.project_from_level1_json(path_level1_json) |
|
WBSPopulate.extend_project_with_level2_json(wbs_project, path_level2_json) |
|
|
|
|
|
WBSPopulate.extend_project_with_decomposed_tasks_json(wbs_project, path_level3_json) |
|
|
|
|
|
|
|
task1 = wbs_project.find_task_by_id("6e6e7e83-8db9-4ac9-88d3-0aeda252a19e") |
|
self.assertIsNotNone(task1) |
|
self.assertEqual(task1.description, "Procure Land for Solar Farm") |
|
self.assertEqual(len(task1.task_children), 3) |
|
|
|
task2 = wbs_project.find_task_by_id("7570b5c4-50bc-4ba8-bb80-db193521759a") |
|
self.assertIsNotNone(task2) |
|
self.assertEqual(task2.description, "Conduct Environmental Impact Assessments") |
|
self.assertEqual(len(task2.task_children), 3) |
|
|
|
task3 = wbs_project.find_task_by_id("2d6452f9-274f-4160-aca4-642e9b0c6446") |
|
self.assertIsNotNone(task3) |
|
self.assertEqual(task3.description, "Obtain Land Permit") |
|
self.assertEqual(len(task3.task_children), 0) |
|
self.assertEqual(task3.extra_fields["detailed_description"], "Secure necessary permits for land use and environmental impact assessments.") |
|
self.assertEqual(task3.extra_fields["resources_needed"], ["Land permit"]) |
|
|