diff --git a/camply/providers/usedirect/usedirect.py b/camply/providers/usedirect/usedirect.py index f2b6ff2d..65fec63d 100644 --- a/camply/providers/usedirect/usedirect.py +++ b/camply/providers/usedirect/usedirect.py @@ -67,6 +67,15 @@ class UseDirectProvider(BaseProvider, ABC): booking_path_params: bool = True booking_path: str = "Web/Default.aspx" + def get_booking_url(self, recreation_area_id: int, facility_id: int) -> str: + """ + Generate the Booking URL for the Campsite + """ + booking_url = f"{self.campground_url}/{self.booking_path}" + if self.booking_path_params is True: + booking_url = f"{booking_url}#!park/{recreation_area_id}/{facility_id}" + return booking_url + @property @abstractmethod def base_url(self) -> str: @@ -447,9 +456,10 @@ def _get_available_campsite( facility_id = availability_response.Facility.FacilityId facility = self.usedirect_campgrounds[facility_id] recreation_area = self.usedirect_rec_areas[facility.recreation_area_id] - booking_url = f"{self.campground_url}/{self.booking_path}" - if self.booking_path_params is True: - booking_url = f"{booking_url}#!park/{recreation_area.recreation_area_id}/{facility_id}" + booking_url = self.get_booking_url( + recreation_area_id=recreation_area.recreation_area_id, + facility_id=facility_id, + ) if unit.UnitCategoryId is None: unit.UnitCategoryId = -1 if unit.UnitTypeGroupId is None: diff --git a/camply/providers/usedirect/variations.py b/camply/providers/usedirect/variations.py index e03f3563..630897a7 100644 --- a/camply/providers/usedirect/variations.py +++ b/camply/providers/usedirect/variations.py @@ -32,6 +32,12 @@ class ReserveCalifornia(UseDirectProvider): state_code = "CA" rdr_path = "" + def get_booking_url(self, recreation_area_id: int, facility_id: int) -> str: + """ + Override the Booking URL for ReserveCalifornia's modern routing + """ + return f"{self.campground_url}/park/{recreation_area_id}/{facility_id}" + class FloridaStateParks(UseDirectProvider): """ diff --git a/tests/cli/cassettes/test_search_once_pushover.yaml b/tests/cli/cassettes/test_search_once_pushover.yaml index 57e10884..529da435 100644 --- a/tests/cli/cassettes/test_search_once_pushover.yaml +++ b/tests/cli/cassettes/test_search_once_pushover.yaml @@ -3025,7 +3025,7 @@ interactions: User-Agent: - python-requests/2.28.2 method: POST - uri: https://api.pushover.net/1/messages.json?html=1&message=%3Cb%3ECampsite+Id%3A%3C%2Fb%3E+4501%0A%3Cb%3EBooking+Date%3A%3C%2Fb%3E+2023-07-13%0A%3Cb%3EBooking+End+Date%3A%3C%2Fb%3E+2023-07-14%0A%3Cb%3EBooking+Nights%3A%3C%2Fb%3E+1%0A%3Cb%3ECampsite+Site+Name%3A%3C%2Fb%3E+Tent+Hike+In+Primitive+Campsite+%23SUGA%0A%3Cb%3ECampsite+Loop+Name%3A%3C%2Fb%3E+None%0A%3Cb%3ECampsite+Type%3A%3C%2Fb%3E+Remote+Camping%0A%3Cb%3ECampsite+Occupancy%3A%3C%2Fb%3E+%280%2C+1%29%0A%3Cb%3ECampsite+Use+Type%3A%3C%2Fb%3E+Hike+In%0A%3Cb%3EAvailability+Status%3A%3C%2Fb%3E+Available%0A%3Cb%3ERecreation+Area%3A%3C%2Fb%3E+Calaveras+Big+Trees+SP%0A%3Cb%3ERecreation+Area+Id%3A%3C%2Fb%3E+5%0A%3Cb%3EFacility+Name%3A%3C%2Fb%3E+North+Grove+Environmental%0A%3Cb%3EFacility+Id%3A%3C%2Fb%3E+343%0A%3Cb%3EBooking+Link%3A%3C%2Fb%3E+%3Ca+href%3D%27https%3A%2F%2Fwww.reservecalifornia.com%2FWeb%2FDefault.aspx%23%21park%2F5%2F343%27%3Ehttps%3A%2F%2Fwww.reservecalifornia.com%2FWeb%2FDefault.aspx%23%21park%2F5%2F343%3C%2Fa%3E%0A%3Cb%3EPermitted+Equipment%3A%3C%2Fb%3E+%0A++-+&title=Calaveras+Big+Trees+SP+%7C+North+Grove+Environmental+%7C+2023-07-13&token=REDACTED&user=REDACTED + uri: https://api.pushover.net/1/messages.json?html=1&message=%3Cb%3ECampsite+Id%3A%3C%2Fb%3E+4501%0A%3Cb%3EBooking+Date%3A%3C%2Fb%3E+2023-07-13%0A%3Cb%3EBooking+End+Date%3A%3C%2Fb%3E+2023-07-14%0A%3Cb%3EBooking+Nights%3A%3C%2Fb%3E+1%0A%3Cb%3ECampsite+Site+Name%3A%3C%2Fb%3E+Tent+Hike+In+Primitive+Campsite+%23SUGA%0A%3Cb%3ECampsite+Loop+Name%3A%3C%2Fb%3E+None%0A%3Cb%3ECampsite+Type%3A%3C%2Fb%3E+Remote+Camping%0A%3Cb%3ECampsite+Occupancy%3A%3C%2Fb%3E+%280%2C+1%29%0A%3Cb%3ECampsite+Use+Type%3A%3C%2Fb%3E+Hike+In%0A%3Cb%3EAvailability+Status%3A%3C%2Fb%3E+Available%0A%3Cb%3ERecreation+Area%3A%3C%2Fb%3E+Calaveras+Big+Trees+SP%0A%3Cb%3ERecreation+Area+Id%3A%3C%2Fb%3E+5%0A%3Cb%3EFacility+Name%3A%3C%2Fb%3E+North+Grove+Environmental%0A%3Cb%3EFacility+Id%3A%3C%2Fb%3E+343%0A%3Cb%3EBooking+Link%3A%3C%2Fb%3E+%3Ca+href%3D%27https%3A%2F%2Fwww.reservecalifornia.com%2Fpark%2F5%2F343%27%3Ehttps%3A%2F%2Fwww.reservecalifornia.com%2Fpark%2F5%2F343%3C%2Fa%3E%0A%3Cb%3EPermitted+Equipment%3A%3C%2Fb%3E+%0A++-+&title=Calaveras+Big+Trees+SP+%7C+North+Grove+Environmental+%7C+2023-07-13&token=REDACTED&user=REDACTED response: body: string: '{"status":1,"request":"9481ec88-e597-4b8a-939a-ee0fe7860e7c"}' diff --git a/tests/debug_camply.py b/tests/debug_camply.py index 625a18a3..2cb1d162 100644 --- a/tests/debug_camply.py +++ b/tests/debug_camply.py @@ -9,7 +9,7 @@ def test_debug_usedirect(cli_runner: CamplyRunner) -> None: """ Debug the Camply CLI - ReserveCalifornia - UseDirect - https://reservecalifornia.com/Web/#!park/726/737 + https://www.reservecalifornia.com/park/726/737 """ test_command = """ camply \ diff --git a/tests/search_providers/test_reserve_california.py b/tests/search_providers/test_reserve_california.py index 41260b5e..34b8e153 100644 --- a/tests/search_providers/test_reserve_california.py +++ b/tests/search_providers/test_reserve_california.py @@ -153,7 +153,7 @@ def test_rc_cli_campsites_nights( cli_status_checker(result=result, exit_code_zero=True) assert "Valley Oak Loop (sites 85-90)" in result.output assert "total sites found in month of June" in result.output - assert "https://www.reservecalifornia.com" in result.output + assert "https://www.reservecalifornia.com/park/678/1121" in result.output @vcr_cassette