Ejemplo n.º 1
0
    def test_should_return_predicted_start_date_on_specific_date(self):
        START_DATE = date(2017, 10, 25)
        PLANNED_DURATION = 2
        PREDICTED_DURATION_1 = 3
        PREDICTED_DURATION_2 = 2
        project = create_project(start_date=START_DATE)
        phase1 = create_phase(project=project)
        task = create_task(phase=phase1, planned_duration=PLANNED_DURATION)
        phase2 = create_phase(project=project, predecessor=phase1)

        task.duration_predictions.create(date=date.today() + timedelta(days=1),
                                         duration=PREDICTED_DURATION_1)
        task.duration_predictions.create(date=date.today() + timedelta(days=3),
                                         duration=PREDICTED_DURATION_2)

        self.assertEqual(
            phase2.get_start_date(date.today() + timedelta(days=1)),
            START_DATE + timedelta(days=PREDICTED_DURATION_1))
        self.assertEqual(
            phase2.get_start_date(date.today() + timedelta(days=2)),
            START_DATE + timedelta(days=PREDICTED_DURATION_1))
        self.assertEqual(
            phase2.get_start_date(date.today() + timedelta(days=3)),
            START_DATE + timedelta(days=PREDICTED_DURATION_2))
        self.assertEqual(
            phase2.get_start_date(date.today() + timedelta(days=4)),
            START_DATE + timedelta(days=PREDICTED_DURATION_2))
Ejemplo n.º 2
0
    def test_should_return_correct_cost_on_specific_date_with_predictions(
            self):
        START_DATE = date(2017, 10, 25)

        def start_date_plus(days):
            return START_DATE + timedelta(days=days)

        PLANNED_DURATION = 4
        PREDICTED_DURATION_TASK_1 = 3
        PREDICTED_DURATION_TASK_2 = 2
        COST_TASK_1 = 50
        COST_TASK_2 = 200

        project = create_project(start_date=START_DATE)
        phase_1 = create_phase(project=project)
        task_1 = create_task(phase=phase_1, planned_duration=PLANNED_DURATION)

        task_1.duration_predictions.create(date=start_date_plus(1),
                                           duration=PREDICTED_DURATION_TASK_1)
        task_1.resources.create(name='resource 1', cost=COST_TASK_1)

        phase_2 = create_phase(project=project, predecessor=phase_1)
        task_2 = create_task(phase=phase_2, planned_duration=PLANNED_DURATION)
        task_2.duration_predictions.create(date=start_date_plus(3),
                                           duration=PREDICTED_DURATION_TASK_2)
        task_2.resources.create(name='resource 2', cost=COST_TASK_2)

        self.assertEqual(project.get_cost(START_DATE), 0)
        self.assertEqual(project.get_cost(start_date_plus(1)),
                         1 * COST_TASK_1 + 0 * COST_TASK_2)
        self.assertEqual(project.get_cost(start_date_plus(2)),
                         2 * COST_TASK_1 + 0 * COST_TASK_2)
        self.assertEqual(project.get_cost(start_date_plus(3)),
                         3 * COST_TASK_1 + 0 * COST_TASK_2)
        self.assertEqual(project.get_cost(start_date_plus(4)),
                         3 * COST_TASK_1 + 1 * COST_TASK_2)
        self.assertEqual(project.get_cost(start_date_plus(5)),
                         3 * COST_TASK_1 + 2 * COST_TASK_2)
        self.assertEqual(project.get_cost(start_date_plus(6)),
                         3 * COST_TASK_1 + 2 * COST_TASK_2)

        self.assertEqual(project.get_planned_cost(START_DATE), 0)
        self.assertEqual(project.get_planned_cost(start_date_plus(1)),
                         1 * COST_TASK_1 + 0 * COST_TASK_2)
        self.assertEqual(project.get_planned_cost(start_date_plus(2)),
                         2 * COST_TASK_1 + 0 * COST_TASK_2)
        self.assertEqual(project.get_planned_cost(start_date_plus(3)),
                         3 * COST_TASK_1 + 0 * COST_TASK_2)
        self.assertEqual(project.get_planned_cost(start_date_plus(4)),
                         4 * COST_TASK_1 + 0 * COST_TASK_2)
        self.assertEqual(project.get_planned_cost(start_date_plus(5)),
                         4 * COST_TASK_1 + 1 * COST_TASK_2)
        self.assertEqual(project.get_planned_cost(start_date_plus(6)),
                         4 * COST_TASK_1 + 2 * COST_TASK_2)
        self.assertEqual(project.get_planned_cost(start_date_plus(7)),
                         4 * COST_TASK_1 + 3 * COST_TASK_2)
        self.assertEqual(project.get_planned_cost(start_date_plus(8)),
                         4 * COST_TASK_1 + 4 * COST_TASK_2)
        self.assertEqual(project.get_planned_cost(start_date_plus(9)),
                         4 * COST_TASK_1 + 4 * COST_TASK_2)
Ejemplo n.º 3
0
 def test_should_return_planned_start_date(self):
     START_DATE = date(2017, 10, 25)
     TASK_DURATION = 2
     project = create_project(start_date=START_DATE)
     phase1 = create_phase(project=project)
     create_task(phase=phase1, planned_duration=TASK_DURATION)
     phase2 = create_phase(project=project, predecessor=phase1)
     self.assertEqual(phase2.get_start_date(),
                      START_DATE + timedelta(days=TASK_DURATION))
Ejemplo n.º 4
0
 def test_should_return_predicted_start_date(self):
     START_DATE = date(2017, 10, 25)
     PLANNED_DURATION = 2
     PREDICTED_DURATION = 4
     project = create_project(start_date=START_DATE)
     phase1 = create_phase(project=project)
     task = create_task(phase=phase1, planned_duration=PLANNED_DURATION)
     phase2 = create_phase(project=project, predecessor=phase1)
     task.duration_predictions.create(date=START_DATE,
                                      duration=PREDICTED_DURATION)
     self.assertEqual(phase2.get_start_date(),
                      START_DATE + timedelta(days=PREDICTED_DURATION))
Ejemplo n.º 5
0
    def test_should_return_correct_cost_on_specific_date(self):
        START_DATE = date(2017, 10, 25)
        START_DATE_PLUS_1 = START_DATE + timedelta(days=1)
        START_DATE_PLUS_2 = START_DATE + timedelta(days=2)
        START_DATE_PLUS_3 = START_DATE + timedelta(days=3)
        START_DATE_PLUS_4 = START_DATE + timedelta(days=4)
        PLANNED_DURATION = 3
        RESOURCE_COST_1 = 50
        RESOURCE_COST_2 = 200

        project = create_project(start_date=START_DATE)
        phase = create_phase(project=project)
        task = create_task(planned_duration=PLANNED_DURATION, phase=phase)
        task.resources.create(name='resource 1', cost=RESOURCE_COST_1)
        task.resources.create(name='resource 2', cost=RESOURCE_COST_2)

        PLANNED_COST = PLANNED_DURATION * (RESOURCE_COST_1 + RESOURCE_COST_2)

        self.assertEqual(project.get_cost(START_DATE), 0)
        self.assertEqual(project.get_cost(START_DATE_PLUS_1),
                         PLANNED_COST * (1 / 3))
        self.assertEqual(project.get_cost(START_DATE_PLUS_2),
                         PLANNED_COST * (2 / 3))
        self.assertEqual(project.get_cost(START_DATE_PLUS_3), PLANNED_COST)
        self.assertEqual(project.get_cost(START_DATE_PLUS_4), PLANNED_COST)

        self.assertEqual(project.get_planned_cost(START_DATE), 0)
        self.assertEqual(project.get_planned_cost(START_DATE_PLUS_1),
                         PLANNED_COST * (1 / 3))
        self.assertEqual(project.get_planned_cost(START_DATE_PLUS_2),
                         PLANNED_COST * (2 / 3))
        self.assertEqual(project.get_planned_cost(START_DATE_PLUS_3),
                         PLANNED_COST)
        self.assertEqual(project.get_planned_cost(START_DATE_PLUS_4),
                         PLANNED_COST)
Ejemplo n.º 6
0
    def test_should_return_planned_cost(self):
        START_DATE = date(2017, 10, 25)
        project = create_project(start_date=START_DATE)
        phase = create_phase(project=project)

        PLANNED_DURATION_1 = 5
        RESOURCE_COST_1_1 = 50
        RESOURCE_COST_1_2 = 200
        task_1 = create_task(planned_duration=PLANNED_DURATION_1, phase=phase)
        task_1.resources.create(name='resource 1', cost=RESOURCE_COST_1_1)
        task_1.resources.create(name='resource 2', cost=RESOURCE_COST_1_2)
        task_1_cost = PLANNED_DURATION_1 * (RESOURCE_COST_1_1 +
                                            RESOURCE_COST_1_2)

        PLANNED_DURATION_2 = 5
        RESOURCE_COST_2_1 = 50
        RESOURCE_COST_2_2 = 200
        task_2 = create_task(planned_duration=PLANNED_DURATION_2,
                             phase=phase,
                             predecessor=task_1)
        task_2.resources.create(name='resource 1', cost=RESOURCE_COST_2_1)
        task_2.resources.create(name='resource 2', cost=RESOURCE_COST_2_2)
        task_2_cost = PLANNED_DURATION_2 * (RESOURCE_COST_2_1 +
                                            RESOURCE_COST_2_2)

        self.assertEqual(project.get_planned_cost(), task_1_cost + task_2_cost)
        self.assertEqual(project.get_cost(), task_1_cost + task_2_cost)
Ejemplo n.º 7
0
 def test_should_return_phase_start_date_if_root_task(self):
     START_DATE = date(2017, 10, 25)
     project = create_project(start_date=START_DATE)
     phase = create_phase(project=project)
     task = create_task(phase=phase)
     self.assertEqual(task.get_start_date(), START_DATE)
     self.assertEqual(task.get_planned_start_date(), START_DATE)
Ejemplo n.º 8
0
    def test_should_return_predicted_start_date_on_specific_date(self):
        START_DATE = date(2017, 10, 25)
        START_DATE_PLUS_1 = START_DATE + timedelta(days=1)
        START_DATE_PLUS_2 = START_DATE + timedelta(days=2)
        START_DATE_PLUS_3 = START_DATE + timedelta(days=3)
        START_DATE_PLUS_4 = START_DATE + timedelta(days=4)
        PLANNED_DURATION = 2
        PREDICTED_DURATION_1 = 3
        PREDICTED_DURATION_2 = 2
        project = create_project(start_date=START_DATE)
        phase = create_phase(project=project)
        task_1 = create_task(phase=phase, planned_duration=PLANNED_DURATION)
        task_2 = create_task(phase=phase,
                             planned_duration=PLANNED_DURATION,
                             predecessor=task_1)

        task_1.duration_predictions.create(date=START_DATE_PLUS_1,
                                           duration=PREDICTED_DURATION_1)
        task_1.duration_predictions.create(date=START_DATE_PLUS_3,
                                           duration=PREDICTED_DURATION_2)

        PREDICTED_END_DATE_1 = START_DATE + timedelta(
            days=PREDICTED_DURATION_1)
        PREDICTED_END_DATE_2 = START_DATE + timedelta(
            days=PREDICTED_DURATION_2)

        self.assertEqual(task_2.get_start_date(START_DATE_PLUS_1),
                         PREDICTED_END_DATE_1)
        self.assertEqual(task_2.get_start_date(START_DATE_PLUS_2),
                         PREDICTED_END_DATE_1)
        self.assertEqual(task_2.get_start_date(START_DATE_PLUS_3),
                         PREDICTED_END_DATE_2)
        self.assertEqual(task_2.get_start_date(START_DATE_PLUS_4),
                         PREDICTED_END_DATE_2)
Ejemplo n.º 9
0
 def test_should_return_planned_end_date(self):
     START_DATE = date(2017, 10, 25)
     TASK_DURATION = 2
     project = create_project(start_date=START_DATE)
     phase = create_phase(project=project)
     task = create_task(phase=phase, planned_duration=TASK_DURATION)
     self.assertEqual(task.get_planned_end_date(),
                      START_DATE + timedelta(days=TASK_DURATION))
     self.assertEqual(task.get_end_date(),
                      START_DATE + timedelta(days=TASK_DURATION))
Ejemplo n.º 10
0
 def test_should_return_planned_start_date_if_no_duration_predictions_available(
         self):
     START_DATE = date(2017, 10, 25)
     PLANNED_DURATION = 2
     project = create_project(start_date=START_DATE)
     phase = create_phase(project=project)
     task_1 = create_task(phase=phase, planned_duration=PLANNED_DURATION)
     task_2 = create_task(phase=phase,
                          planned_duration=PLANNED_DURATION,
                          predecessor=task_1)
     self.assertEqual(task_2.get_start_date(),
                      START_DATE + timedelta(days=PLANNED_DURATION))
Ejemplo n.º 11
0
 def test_should_return_planned_start_date(self):
     START_DATE = date(2017, 10, 25)
     TASK_DURATION = 2
     project = create_project(start_date=START_DATE)
     phase = create_phase(project=project)
     task_1 = phase.tasks.create(planned_duration=TASK_DURATION)
     task_2 = phase.tasks.create(planned_duration=TASK_DURATION,
                                 predecessor=task_1)
     self.assertEqual(task_2.get_start_date(),
                      START_DATE + timedelta(days=TASK_DURATION))
     self.assertEqual(task_2.get_planned_start_date(),
                      START_DATE + timedelta(days=TASK_DURATION))