Beispiel #1
0
    def setUp(self):
        """
        Must call setUp() on BaseTestClass to setup the test application

        :return: N/A
        """
        super(BookingTest, self).setUp()
        self.booking_url = "http://localhost:5000/booking"
        self.patient_id = "16"
        self.availability_id = "20"
        cache.reset_cache()
        """ Log in user """
        self.login_url = "http://localhost:5000/login"
        self.valid_health_card_nb = "DRSJ 9971 0157"
        self.password = "******"
        valid_health_card_and_pw = {
            "health_card_nb": self.valid_health_card_nb,
            "password": self.password
        }

        response = self.send_post(self.login_url, valid_health_card_and_pw)
        self.assert_status_code(response, 200)
        """ Create and store patient in cache"""
        PatientService().test_and_set_patient_into_cache(self.patient_id)
        patient = cache.get_from_cache(self.patient_id)
        availability = Availability(self.availability_id, "20", "32400", "881",
                                    "1", "2019", "4", "8",
                                    AppointmentRequestType.WALKIN)
        appointment = Appointment(self.patient_id, availability)
        patient.add_walkin_to_cart(appointment)
    def test_notify(self):

        patient = Patient(1, "Samuel", "Gosselin", "bla", "2000", 'male', "21",
                          "21", "222")
        set_to_cache(1, patient)

        patient2 = Patient(2, "Samuel", "Gosselin", "bla", "2000", 'male',
                           "21", "21", "222")
        set_to_cache(2, patient2)
        observable = AvailabilityCanceledObservable()

        availability1 = Availability(2, 2, 32400, 53, 0, 2019, 3, 31,
                                     AppointmentRequestType.ANNUAL.value)

        patient_availability_pair = {1: availability1}

        patient_availability_pair2 = {2: availability1}

        observable.attach(patient_availability_pair)
        observable.attach(patient_availability_pair2)

        observable.notify()

        patient = get_from_cache(1)
        patient2 = get_from_cache(2)

        assert (len(patient.get_login_messages()) == 1)
        assert (len(patient2.get_login_messages()) == 1)
        assert (False, observable.patient_id_availabilities.__contains__(1))
        assert (False, observable.patient_id_availabilities.__contains__(2))
Beispiel #3
0
    def validate_availability_and_reserve(self, availability_id):

        select_stmt = '''SELECT * FROM Availability
                        WHERE id = ?
                        AND free = 1'''

        update_stmt = '''UPDATE Availability
                        SET free = 0
                        WHERE id = ?'''
        params = (availability_id,)

        result = self.db.read_one(select_stmt, params)

        if result is None:
            print("Cannot validate availability.")
            return None

        else:
            self.db.write_one(update_stmt, params)

            return Availability(
                result['id'],
                result['doctor_id'],
                result['start'],
                result['room'],
                result['free'],
                result['year'],
                result['month'],
                result['day'],
                uber_sante.models.scheduler.AppointmentRequestType(result['booking_type']),
                result['clinic_id'])
Beispiel #4
0
    def get_availability_by_clinic_id(self, clinic_id):
        """ Queries the Availability db by availability_id and returns an Availability object """

        select_stmt = '''SELECT * FROM Availability
                        WHERE clinic_id = ?'''
        params = (clinic_id,)

        results = self.db.read_all(select_stmt, params)

        if len(results) == 0:
            return AvailabilityStatus.NO_AVAILABILITIES

        list_of_availabilities = []

        for result in results:
            list_of_availabilities.append(
                Availability(
                    result['id'],
                    result['doctor_id'],
                    convert_time.get_start_time_string(result['start']),
                    result['room'],
                    result['free'],
                    result['year'],
                    result['month'],
                    result['day'],
                    uber_sante.models.scheduler.AppointmentRequestType(result['booking_type']),
                    result['clinic_id']))

        return list_of_availabilities
Beispiel #5
0
    def get_availabilities(self, schedule_request, clinic_id):
        """
        Queries the Availability table according to the schedule_request object
        which specifies to query for the month or for a specific day only,
        and for annual, walkin, or all booking types.
        """

        date = schedule_request.get_request_date()
        year = date.get_year()
        month = date.get_month()
        appointment_request_type = schedule_request.get_appointment_request_type_value()

        if schedule_request.is_daily_request():

            day = date.get_day()

            # If the booking_type is BookingType.ALL (which has value ""), it will select all rows
            select_stmt = '''SELECT * FROM Availability
                            WHERE year = ?
                            AND month = ?
                            AND day = ?
                            AND free = 1
                            AND (? = "ALL" OR booking_type = ?) 
                            AND clinic_id = ?'''
            params = (year, month, day, appointment_request_type, appointment_request_type, clinic_id)

        elif schedule_request.is_monthly_request():

            # If the booking_type is BookingType.ALL (which has value ""), it will select all rows
            select_stmt = '''SELECT * FROM Availability
                          WHERE year = ?
                          AND month = ?
                          AND free = 1
                          AND (? = "ALL" OR booking_type = ?) 
                          AND clinic_id = ?'''
            params = (year, month, appointment_request_type, appointment_request_type, clinic_id)

        results = self.db.read_all(select_stmt, params)

        list_of_availabilities = []

        for result in results:
            list_of_availabilities.append(
                Availability(
                    result['id'],
                    result['doctor_id'],
                    convert_time.get_start_time_string(result['start']),
                    result['room'],
                    result['free'],
                    result['year'],
                    result['month'],
                    result['day'],
                    result['booking_type'],
                    result['clinic_id']))

        return list_of_availabilities
    def test_detach(self):
        observable = AvailabilityCanceledObservable()

        availability1 = Availability(2, 2, 32400, 53, 0, 2019, 3, 31,
                                     AppointmentRequestType.ANNUAL.value)

        patient_availability_pair = {1: availability1}

        observable.attach(patient_availability_pair)

        observable.detach(1)

        assert (False, observable.patient_id_availabilities.__contains__(1))
    def test_attach(self):
        """ testing all the cases of the attach method"""

        # case where the observable does not hold the patient_id

        observable = AvailabilityCanceledObservable()

        availability1 = Availability(2, 2, 32400, 53, 0, 2019, 3, 31,
                                     AppointmentRequestType.ANNUAL.value)

        patient_availability_pair = {1: availability1}

        observable.attach(patient_availability_pair)

        assert (observable.patient_id_availabilities.__contains__(1))
        assert (False, isinstance(observable.patient_id_availabilities[1],
                                  list))

        # now testing the case where the observable already holds the patient_id

        availability2 = Availability(3, 3, 32400, 103, 0, 2019, 3, 2,
                                     AppointmentRequestType.WALKIN.value)

        patient_availability_pair2 = {1: availability2}

        observable.attach(patient_availability_pair2)

        assert (isinstance(observable.patient_id_availabilities[1], list))

        # now testing that we append a availability to the list for the patient_id

        availability3 = Availability(4, 3, 3200, 100, 0, 1990, 1, 10,
                                     AppointmentRequestType.ANNUAL.value)

        patient_availability_pair3 = {1: availability3}

        observable.attach(patient_availability_pair3)

        assert (len(observable.patient_id_availabilities[1]) == 3)
Beispiel #8
0
    def get_availability(self, availability_id):
        """ Queries the Availability db by availability_id and returns an Availability object """

        select_stmt = '''SELECT * FROM Availability
                        WHERE id = ?'''
        params = (availability_id,)

        result = self.db.read_one(select_stmt, params)

        if result is None:
            return False

        return Availability(
            result['id'],
            result['doctor_id'],
            convert_time.get_start_time_string(result['start']),
            result['room'],
            result['free'],
            result['year'],
            result['month'],
            result['day'],
            uber_sante.models.scheduler.AppointmentRequestType(result['booking_type']),
            result['clinic_id'])
Beispiel #9
0
                                   Date(2018, DateEnum.APRIL, 16))
        sr_monthly = ScheduleRequest(RequestEnum.MONTHLY_REQUEST,
                                     AppointmentRequestType.ALL,
                                     Date(2019, DateEnum.APRIL, 16))

        monthly_avails = []

        # Get availabilities for a single month
        for repetitions in range(1, 12 + 1):

            for day in range(1, 27 + 1):

                for num_avails in range(1, 15 + 1):
                    monthly_avails.append(
                        Availability(
                            -1, -1, num_avails * 3600 +
                            (num_avails + repetitions) * 20, "RM", True, 2018,
                            7, day, AppointmentRequestType.ALL))

        # Get availabilities for a single day
        daily_avails = []
        for num_avails in range(1, 15 + 1):
            daily_avails.append(
                Availability(
                    -1, -1,
                    num_avails * 3600 + (num_avails + repetitions) * 20, "RM",
                    True, 2019, DateEnum.APRIL.value, 16,
                    AppointmentRequestType.ALL))

        # create a monthly schedule
        monthly_schedule = Scheduler.get_instance().get_schedule(
            sr_monthly, monthly_avails)
Beispiel #10
0
    def as_dict(self):
        dict = {}

        for day in range(self.min_date_key, self.max_date_key + 1):
            dict[day] = self.daily_schedules[day].as_dict()

        return dict


if __name__ == "__main__":

    avails = []

    for repetitions in range(1, 12 + 1):

        for day in range(1, 27 + 1):

            for num_avails in range(1, 15 + 1):
                avails.append(
                    Availability(
                        -1, -1,
                        num_avails * 3600 + (num_avails + repetitions) * 20,
                        "RM", True, 2018, 7, day, uber_sante.models.scheduler.
                        AppointmentRequestType.ALL))

    m = MonthlySchedule(avails, Date(2018, 7))

    for sched in m.get_list_of_daily_schedules():
        print("{}, avail?{}".format(sched.get_schedule_date_string(),
                                    sched.availability_exists_today()))