def test_return_available_window_no_blocks(self):
        '''
          start         end
           12pm  1230   1pm
            |------------|
     block none
     result |------------|
   '''
        start = datetime(2018, 7, 20, 12, 0, 0)
        end = datetime(2018, 7, 20, 13, 0, 0)
        previous_block = None
        next_block = None

        self.assertEqual(
            _return_available_window(previous_block, next_block, start, end),
            (start, end))
    def test_return_available_window_single_overlapping_block(self):
        '''
          start         end
           12pm         1pm
            |------------|
      block |------------|
      result No window
    '''
        start = datetime(2018, 7, 20, 12, 0, 0)
        end = datetime(2018, 7, 20, 13, 0, 0)
        previous_block = Block(datetime(2018, 7, 20, 12, 0),
                               datetime(2018, 7, 20, 13, 0), 'X')
        next_block = None

        self.assertEqual(
            _return_available_window(previous_block, next_block, start, end),
            None)
    def test_return_available_window_valid_window(self):
        '''
          start                             end
           12pm      1pm          2pm       3pm
            |--------------------------------|
     block  |----------|          |----------|
     result            |----------|
   '''
        start = datetime(2018, 7, 20, 12, 0, 0)
        end = datetime(2018, 7, 20, 15, 0, 0)
        previous_block = Block(datetime(2018, 7, 20, 12, 0),
                               datetime(2018, 7, 20, 13, 0), 'X')
        next_block = Block(datetime(2018, 7, 20, 14, 0),
                           datetime(2018, 7, 20, 15, 0), 'X')

        self.assertEqual(
            _return_available_window(previous_block, next_block, start, end),
            (datetime(2018, 7, 20, 13, 0), datetime(2018, 7, 20, 14, 0)))