def test_bookends_only_case(self): open_block = { 'start_time': datetime(2018, 11, 2, 10, 0), 'end_time': datetime(2018, 11, 2, 14, 0) } bookends_conflicts = [ { 'start_time': datetime(2018, 11, 2, 9, 30), 'end_time': datetime(2018, 11, 2, 10, 10) }, { 'start_time': datetime(2018, 11, 2, 13, 55), 'end_time': datetime(2018, 11, 2, 14, 30) } ] expected = [ { 'start_time': datetime(2018, 11, 2, 10, 10), 'end_time': datetime(2018, 11, 2, 13, 55) } ] actual = AppointmentCalendarPage._get_open_block_segments(open_block, bookends_conflicts) self.assertEqual(expected, actual)
def test_degernerate_cases(self): open_block = { 'start_time': datetime(2018, 11, 2, 10, 0), 'end_time': datetime(2018, 11, 2, 14, 0) } consuming_conflicts = [ { 'start_time': datetime(2018, 11, 2, 9, 30), 'end_time': datetime(2018, 11, 2, 16, 10) } ] consuming_actual = AppointmentCalendarPage._get_open_block_segments(open_block, consuming_conflicts) no_conflict_actual = AppointmentCalendarPage._get_open_block_segments(open_block, []) self.assertEqual([], consuming_actual) self.assertEqual([open_block], no_conflict_actual)
def test_get_one_day_of_unfilled(self): with TestSession() as browser: calendar = AppointmentCalendarPage(browser) expected = [ { 'start_time': datetime(2017, 11, 8, 15, 0), 'end_time': datetime(2017, 11, 8, 16, 0), 'length': 60, 'status': 'unfilled', 'staff_name': 'Justin Lorts', 'mediums': [LOCATION_VARIES] }, { 'start_time': datetime(2017, 11, 8, 14, 0), 'end_time': datetime(2017, 11, 8, 14, 30), 'length': 30, 'status': 'unfilled', 'staff_name': 'Nadine Goldberg', 'mediums': [IN_PERSON, VIRTUAL] }, { 'start_time': datetime(2017, 11, 8, 11, 0), 'end_time': datetime(2017, 11, 8, 12, 0), 'length': 60, 'status': 'unfilled', 'staff_name': 'Sonjala Williams', 'mediums': [LOCATION_VARIES] }, { 'start_time': datetime(2017, 11, 8, 13, 0), 'end_time': datetime(2017, 11, 8, 15, 0), 'length': 120, 'status': 'unfilled', 'staff_name': 'Sonjala Williams', 'mediums': [LOCATION_VARIES] } ] actual = calendar.get_unfilled_blocks(datetime(2017, 11, 8).date(), include_mediums=True) self.assertEqual(expected, actual)
def test_bookends_with_mutiple_middle_conflicts(self): open_block = { 'start_time': datetime(2018, 11, 2, 10, 0), 'end_time': datetime(2018, 11, 2, 14, 0) } one_middle_conflicts = [ { 'start_time': datetime(2018, 11, 2, 8, 30), 'end_time': datetime(2018, 11, 2, 9, 10) }, { 'start_time': datetime(2018, 11, 2, 9, 30), 'end_time': datetime(2018, 11, 2, 10, 10) }, { 'start_time': datetime(2018, 11, 2, 11, 15), 'end_time': datetime(2018, 11, 2, 12, 30) }, { 'start_time': datetime(2018, 11, 2, 12, 45), 'end_time': datetime(2018, 11, 2, 13, 0) }, { 'start_time': datetime(2018, 11, 2, 13, 30), 'end_time': datetime(2018, 11, 2, 13, 50) } ] expected = [ { 'start_time': datetime(2018, 11, 2, 10, 10), 'end_time': datetime(2018, 11, 2, 11, 15) }, { 'start_time': datetime(2018, 11, 2, 12, 30), 'end_time': datetime(2018, 11, 2, 12, 45) }, { 'start_time': datetime(2018, 11, 2, 13, 00), 'end_time': datetime(2018, 11, 2, 13, 30) }, { 'start_time': datetime(2018, 11, 2, 13, 50), 'end_time': datetime(2018, 11, 2, 14, 00) } ] actual = AppointmentCalendarPage._get_open_block_segments(open_block, one_middle_conflicts) self.assertEqual(expected, actual)
def test_go_to_date(self): test_date_1 = datetime(2018, 9, 13).date() test_date_2 = datetime(2019, 10, 30).date() with TestSession() as browser: calendar = AppointmentCalendarPage(browser) calendar.go_to_date(test_date_1) self.assertTrue(browser.element_exists_by_xpath("//span[text()='Thursday, September 13th']")) calendar.go_to_date(test_date_2) self.assertTrue(browser.element_exists_by_xpath("//span[text()='Wednesday, October 30th']"))
def test_multi_day(self): with TestSession(30) as browser: calendar = AppointmentCalendarPage(browser) expected = [ { 'start_time': datetime(2017, 11, 10, 9, 30), 'end_time': datetime(2017, 11, 10, 10, 0), 'length': 30, 'status': 'unfilled', 'staff_name': 'Caroline Kelly', 'mediums': [VIRTUAL] }, { 'start_time': datetime(2017, 11, 10, 11, 0), 'end_time': datetime(2017, 11, 10, 11, 30), 'length': 30, 'status': 'unfilled', 'staff_name': 'Caroline Kelly', 'mediums': [VIRTUAL] }, { 'start_time': datetime(2017, 11, 10, 13, 0), 'end_time': datetime(2017, 11, 10, 14, 0), 'length': 60, 'status': 'unfilled', 'staff_name': 'Lauren Barrett', 'mediums': [VIRTUAL] }, { 'start_time': datetime(2017, 11, 10, 10, 0), 'end_time': datetime(2017, 11, 10, 12, 0), 'length': 120, 'status': 'unfilled', 'staff_name': 'Sonjala Williams', 'mediums': [LOCATION_VARIES] }, { 'start_time': datetime(2017, 11, 10, 14, 0), 'end_time': datetime(2017, 11, 10, 15, 30), 'length': 90, 'status': 'unfilled', 'staff_name': 'Sonjala Williams', 'mediums': [LOCATION_VARIES] }, { 'start_time': datetime(2017, 11, 13, 9, 0), 'end_time': datetime(2017, 11, 13, 10, 0), 'length': 60, 'status': 'unfilled', 'staff_name': 'Andrea Wiseman', 'mediums': [IN_PERSON, VIRTUAL] }, { 'start_time': datetime(2017, 11, 13, 10, 30), 'end_time': datetime(2017, 11, 13, 11, 30), 'length': 60, 'status': 'unfilled', 'staff_name': 'Caroline Kelly', 'mediums': [IN_PERSON, VIRTUAL] }, { 'start_time': datetime(2017, 11, 13, 10, 30), 'end_time': datetime(2017, 11, 13, 12, 0), 'length': 90, 'status': 'unfilled', 'staff_name': 'Justin Lorts', 'mediums': [LOCATION_VARIES] }, { 'start_time': datetime(2017, 11, 13, 14, 30), 'end_time': datetime(2017, 11, 13, 15, 0), 'length': 30, 'status': 'unfilled', 'staff_name': 'Lauren Barrett', 'mediums': [IN_PERSON, VIRTUAL] }, { 'start_time': datetime(2017, 11, 13, 13, 0), 'end_time': datetime(2017, 11, 13, 16, 0), 'length': 180, 'status': 'unfilled', 'staff_name': 'Sonjala Williams', 'mediums': [LOCATION_VARIES] }, { 'start_time': datetime(2017, 11, 13, 10, 0), 'end_time': datetime(2017, 11, 13, 11, 0), 'length': 60, 'status': 'unfilled', 'staff_name': 'Sonjala Williams', 'mediums': [LOCATION_VARIES] }, { 'start_time': datetime(2017, 11, 13, 11, 30), 'end_time': datetime(2017, 11, 13, 12, 0), 'length': 30, 'status': 'unfilled', 'staff_name': 'Sonjala Williams', 'mediums': [LOCATION_VARIES] } ] actual = calendar.get_unfilled_blocks(datetime(2017, 11, 10).date(), datetime(2017, 11, 14).date(), include_mediums=True) self.assertEqual(expected, actual)