Example #1
0
    def test_parking_permit_change_price_list_when_prices_go_down(self):
        zone_a_product_list = [
            [(date(2021, 1, 1), date(2021, 6, 30)),
             Decimal("20")],
            [(date(2021, 7, 1), date(2021, 12, 31)),
             Decimal("30")],
        ]
        self._create_zone_products(self.zone_a, zone_a_product_list)
        zone_b_product_list = [
            [(date(2021, 1, 1), date(2021, 6, 30)),
             Decimal("30")],
            [(date(2021, 7, 1), date(2021, 12, 31)),
             Decimal("40")],
        ]
        self._create_zone_products(self.zone_b, zone_b_product_list)
        high_emission_vehicle = VehicleFactory()

        start_time = timezone.make_aware(datetime(2021, 1, 1))
        end_time = get_end_time(start_time, 12)
        permit = ParkingPermitFactory(
            customer=self.customer,
            parking_zone=self.zone_a,
            vehicle=high_emission_vehicle,
            contract_type=ContractType.FIXED_PERIOD,
            status=ParkingPermitStatus.VALID,
            start_time=start_time,
            end_time=end_time,
            month_count=12,
        )
        with freeze_time(datetime(2021, 4, 15)):
            price_change_list = permit.get_price_change_list(self.zone_b, True)
            self.assertEqual(len(price_change_list), 2)
            self.assertEqual(price_change_list[0]["product"],
                             "Pysäköintialue B")
            self.assertEqual(price_change_list[0]["previous_price"],
                             Decimal("20"))
            self.assertEqual(price_change_list[0]["new_price"], Decimal("15"))
            self.assertEqual(price_change_list[0]["price_change"],
                             Decimal("-5"))
            self.assertEqual(price_change_list[0]["price_change_vat"],
                             Decimal("-1.2"))
            self.assertEqual(price_change_list[0]["month_count"], 2)
            self.assertEqual(price_change_list[0]["start_date"],
                             date(2021, 5, 1))
            self.assertEqual(price_change_list[0]["end_date"],
                             date(2021, 6, 30))
            self.assertEqual(price_change_list[1]["product"],
                             "Pysäköintialue B")
            self.assertEqual(price_change_list[1]["previous_price"],
                             Decimal("30"))
            self.assertEqual(price_change_list[1]["new_price"], Decimal("20"))
            self.assertEqual(price_change_list[1]["price_change"],
                             Decimal("-10"))
            self.assertEqual(price_change_list[1]["price_change_vat"],
                             Decimal("-2.4"))
            self.assertEqual(price_change_list[1]["month_count"], 6)
            self.assertEqual(price_change_list[1]["start_date"],
                             date(2021, 7, 1))
            self.assertEqual(price_change_list[1]["end_date"],
                             date(2021, 12, 31))
Example #2
0
    def test_parking_permit_change_price_list_when_prices_go_up(self):
        zone_a_product_list = [
            [(date(CURRENT_YEAR, 1, 1), date(CURRENT_YEAR, 6, 30)),
             Decimal("20")],
            [(date(CURRENT_YEAR, 7, 1), date(CURRENT_YEAR, 12, 31)),
             Decimal("30")],
        ]
        self._create_zone_products(self.zone_a, zone_a_product_list)
        zone_b_product_list = [
            [(date(CURRENT_YEAR, 1, 1), date(CURRENT_YEAR, 6, 30)),
             Decimal("30")],
            [(date(CURRENT_YEAR, 7, 1), date(CURRENT_YEAR, 12, 31)),
             Decimal("40")],
        ]
        self._create_zone_products(self.zone_b, zone_b_product_list)

        start_time = timezone.make_aware(datetime(CURRENT_YEAR, 1, 1))
        end_time = get_end_time(start_time, 12)

        low_emission_vehicle = VehicleFactory(
            power_type=VehiclePowerType.BENSIN,
            emission=70,
            euro_class=6,
            emission_type=EmissionType.WLTP,
        )
        LowEmissionCriteriaFactory(
            start_date=start_time,
            end_date=end_time,
            nedc_max_emission_limit=None,
            wltp_max_emission_limit=80,
            euro_min_class_limit=6,
            power_type=low_emission_vehicle.power_type,
        )

        permit = ParkingPermitFactory(
            customer=self.customer,
            parking_zone=self.zone_a,
            vehicle=low_emission_vehicle,
            contract_type=ContractType.FIXED_PERIOD,
            status=ParkingPermitStatus.VALID,
            start_time=start_time,
            end_time=end_time,
            month_count=12,
        )
        with freeze_time(datetime(CURRENT_YEAR, 4, 15)):
            price_change_list = permit.get_price_change_list(
                self.zone_b, False)
            self.assertEqual(len(price_change_list), 2)
            self.assertEqual(price_change_list[0]["product"],
                             "Pysäköintialue B")
            self.assertEqual(price_change_list[0]["previous_price"],
                             Decimal("10"))
            self.assertEqual(price_change_list[0]["new_price"], Decimal("30"))
            self.assertEqual(price_change_list[0]["price_change"],
                             Decimal("20"))
            self.assertEqual(price_change_list[0]["price_change_vat"],
                             Decimal("4.8"))
            self.assertEqual(price_change_list[0]["month_count"], 2)
            self.assertEqual(price_change_list[0]["start_date"],
                             date(CURRENT_YEAR, 5, 1))
            self.assertEqual(price_change_list[0]["end_date"],
                             date(CURRENT_YEAR, 6, 30))
            self.assertEqual(price_change_list[1]["product"],
                             "Pysäköintialue B")
            self.assertEqual(price_change_list[1]["previous_price"],
                             Decimal("15"))
            self.assertEqual(price_change_list[1]["new_price"], Decimal("40"))
            self.assertEqual(price_change_list[1]["price_change"],
                             Decimal("25"))
            self.assertEqual(price_change_list[1]["price_change_vat"],
                             Decimal("6"))
            self.assertEqual(price_change_list[1]["month_count"], 6)
            self.assertEqual(price_change_list[1]["start_date"],
                             date(CURRENT_YEAR, 7, 1))
            self.assertEqual(price_change_list[1]["end_date"],
                             date(CURRENT_YEAR, 12, 31))