|
from datetime import datetime, timedelta |
|
from unittest import TestCase |
|
|
|
from period import Period, PeriodException |
|
|
|
|
|
class TestPeriod(TestCase): |
|
|
|
def setUp(self) -> None: |
|
# this 4 periods are the base for all tests |
|
# ¦----p1-----¦ |
|
# ¦----p2-----¦ |
|
# ¦-----p3-----¦ |
|
# ¦-----------p4------------¦ |
|
self.start_date = datetime(2019, 1, 1) |
|
self.period_1 = Period(self.start_date, self.start_date + timedelta(hours=6)) |
|
self.period_2 = Period(self.start_date + timedelta(hours=3), self.start_date + timedelta(hours=9)) |
|
self.period_3 = Period(self.start_date + timedelta(hours=7), self.start_date + timedelta(hours=12)) |
|
self.period_4 = Period(self.start_date + timedelta(hours=2), self.start_date + timedelta(hours=12)) |
|
|
|
def test_get_overlap_normal_case(self): |
|
delta = self.period_1.get_overlap(self.period_2) |
|
self.assertEqual(delta, timedelta(hours=3)) |
|
|
|
def test_get_overlap_normal_reverse(self): |
|
delta = self.period_2.get_overlap(self.period_1) |
|
self.assertEqual(delta, timedelta(hours=3)) |
|
|
|
def test_get_overlap_surrounded(self): |
|
delta = self.period_2.get_overlap(self.period_4) |
|
self.assertEqual(delta, timedelta(hours=6)) |
|
|
|
def test_get_overlap_surrounded_reverse(self): |
|
delta = self.period_4.get_overlap(self.period_2) |
|
self.assertEqual(delta, timedelta(hours=6)) |
|
|
|
def test_get_overlap_same_end(self): |
|
delta = self.period_3.get_overlap(self.period_4) |
|
self.assertEqual(delta, timedelta(hours=5)) |
|
|
|
def test_has_overlap(self): |
|
has_overlap = self.period_1.has_overlap(self.period_2) |
|
self.assertTrue(has_overlap) |
|
|
|
def test_has_overlap_surrounded(self): |
|
has_overlap = self.period_2.has_overlap(self.period_4) |
|
self.assertTrue(has_overlap) |
|
|
|
def test_has_overlap_negative(self): |
|
has_overlap = self.period_1.has_overlap(self.period_3) |
|
self.assertFalse(has_overlap) |
|
|
|
def test_get_overlap_period(self): |
|
overlap_period = self.period_1.get_overlap_period(self.period_2) |
|
self.assertEqual(overlap_period, Period(self.start_date + timedelta(hours=3), |
|
self.start_date + timedelta(hours=6))) |
|
|
|
def test_get_overlap_period_no_overlap(self): |
|
self.assertRaises(PeriodException, self.period_1.get_overlap_period, self.period_3) |
|
|