Example #1
0
class TaskStatusesTestCase(unittest.TestCase):

    def setUp(self):
        self.task = Task('summary')

    def test_summary(self):
        self.assertEqual('summary', self.task.summary, 'Task should store sumammary')

    def test_initial_status_is_new(self):
        self.assertEqual(Status.NEW, self.task.status, 'Initial status should be "New"')

    def test_after_start_status_is_pending(self):
        self.task.start()
        self.assertEqual(Status.PENDING, self.task.status)

    def test_defer_change_status_to_deferred(self):
        self.task.start()
        self.task.defer()
        self.assertEqual(Status.DEFERRED, self.task.status)

    def test_done_change_status_to_done(self):
        self.task.done()
        self.assertEqual(Status.DONE, self.task.status)

    def test_cancel_change_status_to_cancelled(self):
        self.task.cancel()
        self.assertEqual(Status.CANCELLED, self.task.status)
Example #2
0
class DurationCoputationTestCase(unittest.TestCase):

    def setUp(self):
        self.task = Task('summary')

    def test_initial_duration_is_0(self):
        self.assertEqual(datetime.timedelta(0), self.task.duration)

    @patch_datetime
    def test_duration_get_whole_time_spent_on_task(self, shift_time):
        self.task.start()
        shift_time(minutes=10)
        self.task.defer()
        self.assertEqual(datetime.timedelta(minutes=10), self.task.duration)

        self.task.start()
        shift_time(minutes=10)
        self.task.defer()
        self.assertEqual(datetime.timedelta(minutes=20), self.task.duration,
                         'Duration should be computed properly if task is resumed couple of times.')

    def test_default_estimate_is_None(self):
        self.assertIsNone(self.task.estimate)

    @patch_datetime
    def test_remain_is_estimate_minus_duration(self, shift_time):
        self.task.estimate = datetime.timedelta(minutes=60)
        self.task.start()
        shift_time(minutes=30)
        self.assertEqual(datetime.timedelta(minutes=30), self.task.remain)

    @patch_datetime
    def test_remain_can_not_be_negative(self, shift_time):
        self.task.estimate = datetime.timedelta(minutes=60)
        self.task.start()
        shift_time(minutes=70)
        self.assertEqual(datetime.timedelta(0), self.task.remain)

    @patch_datetime
    def test_deviation_is_always_0_if_estimate_is_None(self, shift_time):
        self.assertEqual(datetime.timedelta(0), self.task.deviation)
        self.task.start()
        shift_time(days=2)
        self.assertEqual(datetime.timedelta(0), self.task.deviation)

    @patch_datetime
    def test_deviation_is_negative_if_task_is_late(self, shift_time):
        self.task.estimate = datetime.timedelta(minutes=60)
        self.task.start()
        shift_time(minutes=70)
        self.assertEqual(datetime.timedelta(minutes=-10), self.task.deviation)

    @patch_datetime
    def test_deviation_is_zero_if_task_is_on_time(self, shift_time):
        """deviation = estimate - (actual + remain)"""
        self.task.estimate = datetime.timedelta(minutes=60)
        self.task.start()
        shift_time(minutes=50)
        self.assertEqual(datetime.timedelta(0), self.task.deviation)
        shift_time(minutes=10)
        self.assertEqual(datetime.timedelta(0), self.task.deviation)

    @patch_datetime
    def test_deviation_is_positive_if_task_is_done_earlier_than_expected(self, shift_time):
        self.task.estimate = datetime.timedelta(minutes=60)
        self.task.start()
        shift_time(minutes=50)
        self.task.done()
        self.assertEqual(datetime.timedelta(minutes=10), self.task.deviation)

    @patch_datetime
    def test_pending_task_takes_into_account_time_from_last_start(self, shift_time):
        self.task.start()
        shift_time(minutes=10)
        self.assertEqual(datetime.timedelta(minutes=10), self.task.duration)

    @patch_datetime
    def test_marking_task_as_done_properly_updates_duration_time(self, shift_time):
        self.task.start()
        shift_time(minutes=10)
        self.task.done()
        self.assertEqual(datetime.timedelta(minutes=10), self.task.duration)

    @patch_datetime
    def test_marking_task_as_cancelled_properly_updates_duration_time(self, shift_time):
        self.task.start()
        shift_time(minutes=10)
        self.task.cancel()
        self.assertEqual(datetime.timedelta(minutes=10), self.task.duration)