def test_return_arrival_time(self):
     f1 = FlightSearchBuilder().return_arrival_time((time(0,0,1), time(0,0,2)))
     f2 = FlightSearch.return_arrival_time((time(0,0,1), time(0,0,2)))
     f3 = FlightSearchBuilder(return_arrival_time=(time(0,0,1), time(0,0,2)))
     
     self.assertEqual(f1._departure_date, f2._departure_date)
     self.assertEqual(f2._departure_date, f3._departure_date)
 def test_from_place(self):
     f1 = FlightSearchBuilder().from_place("SFO")
     f2 = FlightSearch.from_place("SFO")
     f3 = FlightSearchBuilder(from_location="SFO")
     
     self.assertEqual(f1._from_location, f2._from_location)
     self.assertEqual(f2._from_location, f3._from_location)
 def test_return_departure_date(self):
     f1 = FlightSearchBuilder().return_departure_date(datetime(2020,1,1))
     f2 = FlightSearch.return_departure_date(datetime(2020,1,1))
     f3 = FlightSearchBuilder(return_departure_date=datetime(2020,1,1))
     
     self.assertEqual(f1._departure_date, f2._departure_date)
     self.assertEqual(f2._departure_date, f3._departure_date)
 def test_price_threshold(self):
     f1 = FlightSearchBuilder().price_threshold(100)
     f2 = FlightSearch.price_threshold(100)
     f3 = FlightSearchBuilder(price_threshold=100)
     
     self.assertEqual(f1._price_threshold, f2._price_threshold)
     self.assertEqual(f2._price_threshold, f3._price_threshold)
 def test_allow_layovers(self):
     f1 = FlightSearchBuilder().allow_layovers(True)
     f2 = FlightSearch.allow_layovers(True)
     f3 = FlightSearchBuilder(allow_layovers=True)
     
     self.assertEqual(f1._allow_layovers, f2._allow_layovers)
     self.assertEqual(f2._allow_layovers, f3._allow_layovers)
 def test_start_from(self):
     f1 = FlightSearchBuilder().start_from(datetime(2020,1,1))
     f2 = FlightSearch.start_from(datetime(2020,1,1))
     f3 = FlightSearchBuilder(start_from=datetime(2020,1,1))
     
     self.assertEqual(f1._start_from, f2._start_from)
     self.assertEqual(f2._start_from, f3._start_from)
    def test_chain_elements(self):
        f1 = FlightSearchBuilder().from_place("SFO").to_place("MCO").allow_layovers(True).price_threshold(100)
        f2 = FlightSearchBuilder(from_location="SFO", to_location="MCO", allow_layovers=True, price_threshold=100)

        self.assertEqual(f1._from_location, f2._from_location)
        self.assertEqual(f1._to_location, f2._to_location)
        self.assertEqual(f1._allow_layovers, f2._allow_layovers)
        self.assertEqual(f1._price_threshold, f2._price_threshold)
    def test_weekend(self):
        f1 = FlightSearchBuilder().weekend()
        f2 = FlightSearch.weekend()
        f3 = FlightSearchBuilder(departure_time=(time(hour=18, minute=0), time(hour=23, minute=59)), return_arrival_time=(time(hour=0, minute=0), time(hour=23, minute=0)), departure_day=Day.FRIDAY, return_arrival_day=Day.SUNDAY)
        
        self.assertEqual(f1._departure_time, f2._departure_time)
        self.assertEqual(f2._departure_time, f3._departure_time)

        self.assertEqual(f1._return_arrival_time, f2._return_arrival_time)
        self.assertEqual(f2._return_arrival_time, f3._return_arrival_time)

        self.assertEqual(f1._departure_day, f2._departure_day)
        self.assertEqual(f2._departure_day, f3._departure_day)

        self.assertEqual(f1._return_arrival_day, f2._return_arrival_day)
        self.assertEqual(f2._return_arrival_day, f3._return_arrival_day)
예제 #9
0
 def return_arrival_time(time_range):
     if type(time_range) != tuple:
         return ConfigurationError(
             "Input to arrival_time must be a tuple of string objects that represent times."
         )
     if not isinstance(time_range[0], time) or not isinstance(
             time_range[1], time):
         return ConfigurationError(
             "Input to arrival_time must be a tuple of string objects that represent times."
         )
     return FlightSearchBuilder(return_arrival_time=time_range)
예제 #10
0
 def weekend():
     departure_time_range = (time(hour=18,
                                  minute=0), time(hour=23, minute=59))
     return_time_range = (time(hour=0, minute=0), time(hour=23, minute=0))
     #arrival_time_range = (time(hour=0, minute=0), time(hour=6, minute=0))
     departure_day = Day.FRIDAY
     return_arrival_day = Day.SUNDAY
     return FlightSearchBuilder(departure_time=departure_time_range,
                                return_arrival_time=return_time_range,
                                departure_day=departure_day,
                                return_arrival_day=return_arrival_day)
예제 #11
0
    def test_build_flight_search_queries_min(self):
        f = FlightSearchBuilder(from_location="SFO",
                                to_location="MCO",
                                start_from=date(2020, 1, 1))

        query = build_flight_search_queries(f)
        self.assertEqual(len(query), 1)
        self.assertEqual(
            query[0],
            "https://api.skypicker.com/flights?partner=picky&curr=USD&max_stopovers=0&fly_from=SFO&fly_to=MCO&date_from=01/01/2020&date_to=01/03/2020"
        )
예제 #12
0
    def test_build_flight_search_queries_with_return_arrival_time(self):
        f = FlightSearchBuilder(from_location="SFO",
                                to_location="MCO",
                                start_from=date(2020, 1, 1),
                                return_arrival_time=(time(hour=10, minute=0),
                                                     time(hour=12, minute=0)))

        query = build_flight_search_queries(f)
        self.assertEqual(len(query), 1)
        self.assertEqual(
            query[0],
            "https://api.skypicker.com/flights?partner=picky&curr=USD&max_stopovers=0&fly_from=SFO&fly_to=MCO&ret_atime_from=10:00&ret_atime_to=12:00&date_from=01/01/2020&date_to=01/03/2020"
        )
예제 #13
0
    def test_build_flight_search_queries_with_departure_day_and_return_arrival_day(
            self):
        f = FlightSearchBuilder(from_location="SFO",
                                to_location="MCO",
                                start_from=date(2020, 1, 1),
                                departure_day=Day.SATURDAY,
                                return_arrival_day=Day.MONDAY)

        query = build_flight_search_queries(f)
        self.assertEqual(len(query), 9)
        self.assertEqual(
            query[0],
            "https://api.skypicker.com/flights?partner=picky&curr=USD&max_stopovers=0&fly_from=SFO&fly_to=MCO&date_from=04/01/2020&date_to=04/01/2020&return_from=06/01/2020&return_to=06/01/2020&nights_in_dst_from=1&nights_in_dst_to=1"
        )
        self.assertEqual(
            query[1],
            "https://api.skypicker.com/flights?partner=picky&curr=USD&max_stopovers=0&fly_from=SFO&fly_to=MCO&date_from=11/01/2020&date_to=11/01/2020&return_from=13/01/2020&return_to=13/01/2020&nights_in_dst_from=1&nights_in_dst_to=1"
        )
        self.assertEqual(
            query[2],
            "https://api.skypicker.com/flights?partner=picky&curr=USD&max_stopovers=0&fly_from=SFO&fly_to=MCO&date_from=18/01/2020&date_to=18/01/2020&return_from=20/01/2020&return_to=20/01/2020&nights_in_dst_from=1&nights_in_dst_to=1"
        )
        self.assertEqual(
            query[3],
            "https://api.skypicker.com/flights?partner=picky&curr=USD&max_stopovers=0&fly_from=SFO&fly_to=MCO&date_from=25/01/2020&date_to=25/01/2020&return_from=27/01/2020&return_to=27/01/2020&nights_in_dst_from=1&nights_in_dst_to=1"
        )
        self.assertEqual(
            query[4],
            "https://api.skypicker.com/flights?partner=picky&curr=USD&max_stopovers=0&fly_from=SFO&fly_to=MCO&date_from=01/02/2020&date_to=01/02/2020&return_from=03/02/2020&return_to=03/02/2020&nights_in_dst_from=1&nights_in_dst_to=1"
        )
        self.assertEqual(
            query[5],
            "https://api.skypicker.com/flights?partner=picky&curr=USD&max_stopovers=0&fly_from=SFO&fly_to=MCO&date_from=08/02/2020&date_to=08/02/2020&return_from=10/02/2020&return_to=10/02/2020&nights_in_dst_from=1&nights_in_dst_to=1"
        )
        self.assertEqual(
            query[6],
            "https://api.skypicker.com/flights?partner=picky&curr=USD&max_stopovers=0&fly_from=SFO&fly_to=MCO&date_from=15/02/2020&date_to=15/02/2020&return_from=17/02/2020&return_to=17/02/2020&nights_in_dst_from=1&nights_in_dst_to=1"
        )
        self.assertEqual(
            query[7],
            "https://api.skypicker.com/flights?partner=picky&curr=USD&max_stopovers=0&fly_from=SFO&fly_to=MCO&date_from=22/02/2020&date_to=22/02/2020&return_from=24/02/2020&return_to=24/02/2020&nights_in_dst_from=1&nights_in_dst_to=1"
        )
        self.assertEqual(
            query[8],
            "https://api.skypicker.com/flights?partner=picky&curr=USD&max_stopovers=0&fly_from=SFO&fly_to=MCO&date_from=29/02/2020&date_to=29/02/2020&return_from=02/03/2020&return_to=02/03/2020&nights_in_dst_from=1&nights_in_dst_to=1"
        )
예제 #14
0
    def test_make_api_request_bad_response_body(self):
        f = FlightSearchBuilder(from_location="SFO",
                                to_location="MCO",
                                start_from=date(2020, 1, 1))

        query = build_flight_search_queries(f)
        self.assertEqual(len(query), 1)
        self.assertEqual(
            query[0],
            "https://api.skypicker.com/flights?partner=picky&curr=USD&max_stopovers=0&fly_from=SFO&fly_to=MCO&date_from=01/01/2020&date_to=01/03/2020"
        )

        responses.add(
            responses.GET,
            'https://api.skypicker.com/flights?partner=picky&curr=USD&max_stopovers=0&fly_from=SFO&fly_to=MCO&date_from=01/01/2020&date_to=01/03/2020',
            json={'error': 'bad_response'},
            status=200)

        r = make_api_request(query[0])

        self.assertIsNone(r)
예제 #15
0
 def allow_layovers(allow_layovers):
     if type(allow_layovers) != bool:
         return ConfigurationError(
             "Input to allow_layovers must be of type bool")
     return FlightSearchBuilder(allow_layovers=allow_layovers)
예제 #16
0
 def from_place(location):
     return FlightSearchBuilder(from_location=location)
예제 #17
0
 def start_from(start_date):
     if not isinstance(start_date, date):
         return ConfigurationError(
             "Input to start_from must be of type date")
     return FlightSearchBuilder(start_from=start_date)
예제 #18
0
 def price_threshold(price):
     if type(price) != float and type(price) != int:
         return ConfigurationError(
             "Input to price_threshold must be of type int or float")
     return FlightSearchBuilder(price_threshold=price)
    def test_request_is_valid_valid_request(self):
        f1 = FlightSearchBuilder().from_place("SFO").to_place("MCO")

        self.assertTrue(f1.request_is_valid())
예제 #20
0
 def to_place(location):
     return FlightSearchBuilder(to_location=location)
예제 #21
0
 def return_departure_date(return_departure_date):
     if not isinstance(return_departure_date, date):
         return ConfigurationError(
             "Input to departure_date must be of type datetime")
     return FlightSearchBuilder(return_departure_date=return_departure_date)
    def test_request_is_valid_invalid_request(self):
        f1 = FlightSearchBuilder().from_place("SFO")

        self.assertFalse(f1.request_is_valid())
    def test_get_date_range(self):
        f1 = FlightSearchBuilder().start_from(datetime(2020,1,1))

        date_range = f1.get_date_range()
        self.assertEqual(date_range[0], datetime(2020,1,1))
        self.assertEqual(date_range[1], datetime(2020,3,1))
    def test_overwrite_fields(self):
        f1 = FlightSearchBuilder().from_place("SFO").from_place("MCO")

        self.assertEqual(f1._from_location, "MCO")