def test_minimum_length(self):
        agenda = AgendaController()
        agenda.minimum_length = 2
        _ = agenda.add_shift(10, 14)

        with self.assertRaises(NotAvailableSlotError):
            agenda.add_appointment(11, 14)
    def test_filter_appos(self):
        agenda = AgendaController()

        shifts_intervals = ((9, 14), (16, 19), (12, 17))

        for start, end in shifts_intervals:
            agenda.add_shift(start, end)

        appos_intervals = [
            (interval_start, interval_start + 1)
            for start, end in shifts_intervals
            for interval_start in range(start, end, 1)
        ]

        appos = []
        for start, end in appos_intervals:
            appo = agenda.add_appointment(start, end)
            appos.append((appo.key, appo))

        test_array = ((0, 9, []), (9, 19, appos), (19, 99, []))
        for start, end, result in test_array:
            appos_in_interval = list(agenda.get_appointments_iteritems(start, end))

            self.assertEquals([k for k, _ in appos_in_interval].sort(), [k for k, _ in result].sort())

        agenda.destroy()
    def test_all_appointments_in_agenda(self):
        agenda = AgendaController()

        shifts_intervals = ((9, 14), (16, 19), (22, 24))

        for start, end in shifts_intervals:
            agenda.add_shift(start, end)

        appos_intervals = [
            (interval_start, interval_start + 1)
            for start, end in shifts_intervals
            for interval_start in range(start, end, 1)
        ]

        for start, end in appos_intervals:
            agenda.add_appointment(start, end)

        for _, appo in agenda.get_appointments_iteritems():
            interval = (appo.interval.start, appo.interval.end)
            self.assertIn(interval, appos_intervals, "Obtained appointments no it inserted")

        agenda.destroy()
    def test_appointment(self):
        agenda = AgendaController()
        shift = agenda.add_shift(9, 14)

        with self.assertRaises(NotAvailableSlotError):
            agenda.add_appointment(8, 9)

        app1 = agenda.add_appointment(9, 10)
        app1 = agenda.get_appointment(app1.key)
        self.assertEqual(app1.interval, Interval(9, 10))

        agenda.del_appointment(app1.key)
        with self.assertRaises(KeyError):
            app1 = agenda.get_appointment(app1.key)

        app2 = agenda.add_appointment(9, 10)
        app2 = agenda.get_appointment(app2.key)
        self.assertEqual(app2.interval, Interval(9, 10))

        appos = list(agenda.get_appointments_in_shift_iteritems(shift.key))
        print appos

        with self.assertRaises(NotAvailableSlotError):
            agenda.add_appointment(9, 11)

        with self.assertRaises(NotAvailableSlotError):
            agenda.add_appointment(9, 11)

        with self.assertRaises(ShiftNotEmptyError):
            agenda.del_shift(shift.key)

        agenda.del_appointment(app2.key)
        with self.assertRaises(KeyError):
            app1 = agenda.get_appointment(app1)

        agenda.del_shift(shift.key)
        agenda.destroy()