コード例 #1
0
    def test_should_raise_insufficient_temporary_fund(self) -> None:
        # When
        educational_deposit = EducationalDeposit(amount=Decimal(1000.00), isFinal=False)

        # Then
        with pytest.raises(exceptions.InsufficientTemporaryFund):
            educational_deposit.check_has_enough_fund(Decimal(900.00))
コード例 #2
0
def check_institution_fund(
    educational_institution_id: int,
    educational_year_id: str,
    booking_amount: Decimal,
    deposit: EducationalDeposit,
) -> None:
    spent_amount = get_confirmed_educational_bookings_amount(
        educational_institution_id, educational_year_id)
    total_amount = booking_amount + spent_amount

    deposit.check_has_enough_fund(total_amount)
コード例 #3
0
    def test_insufficient_temporary_fund(self, app, db_session) -> None:
        educational_institution = EducationalInstitutionFactory()
        educational_year = EducationalYearFactory(adageId="1")
        EducationalDeposit(
            educationalInstitution=educational_institution,
            educationalYear=educational_year,
            amount=Decimal(400.00),
            isFinal=False,
        )
        booking = EducationalBookingFactory(
            amount=Decimal(400.00),
            quantity=1,
            educationalBooking__educationalInstitution=educational_institution,
            educationalBooking__educationalYear=educational_year,
            status=BookingStatus.PENDING,
            educationalBooking__confirmationLimitDate=datetime(
                2021, 10, 15, 10),
        )

        client = TestClient(app.test_client()).with_eac_token()
        response = client.post(
            f"/adage/v1/prebookings/{booking.educationalBookingId}/confirm")

        assert response.status_code == 422
        assert response.json == {"code": "INSUFFICIENT_FUND_DEPOSIT_NOT_FINAL"}
コード例 #4
0
    def test_institution_fund_is_insufficient(self, db_session):
        educational_institution = EducationalInstitutionFactory()
        educational_year = EducationalYearFactory(adageId="1")
        educational_deposit = EducationalDeposit(
            educationalInstitution=educational_institution,
            educationalYear=educational_year,
            amount=Decimal(400.00),
        )
        EducationalBookingFactory(
            amount=Decimal(20.00),
            quantity=20,
            educationalBooking__educationalInstitution=educational_institution,
            educationalBooking__educationalYear=educational_year,
            status=BookingStatus.CONFIRMED,
        )
        EducationalBookingFactory(
            amount=Decimal(400.00),
            quantity=1,
            educationalBooking__educationalInstitution=educational_institution,
            educationalBooking__educationalYear=educational_year,
            status=BookingStatus.CONFIRMED,
        )
        EducationalBookingFactory(
            amount=Decimal(400.00),
            quantity=1,
            educationalBooking__educationalInstitution=educational_institution,
            educationalBooking__educationalYear=educational_year,
            status=BookingStatus.USED,
        )

        with pytest.raises(exceptions.InsufficientFund):
            check_institution_fund(educational_institution.id,
                                   educational_year.adageId, Decimal(200.00),
                                   educational_deposit)
コード例 #5
0
def create_educational_deposit(
    educational_year_id: str,
    educational_institution_id: int,
    deposit_amount: int,
) -> EducationalDeposit:
    educational_deposit = EducationalDeposit(
        educationalYearId=educational_year_id,
        educationalInstitutionId=educational_institution_id,
        amount=decimal.Decimal(deposit_amount),
        isFinal=False,
        dateCreated=datetime.utcnow(),
    )
    repository.save(educational_deposit)

    return educational_deposit
コード例 #6
0
    def test_confirm_prebooking(self, app, db_session) -> None:
        redactor = EducationalRedactorFactory(
            civility="Mme",
            firstName="Jeanne",
            lastName="Dodu",
            email="*****@*****.**",
        )
        educational_institution = EducationalInstitutionFactory()
        educational_year = EducationalYearFactory(adageId="1")
        EducationalDeposit(
            educationalInstitution=educational_institution,
            educationalYear=educational_year,
            amount=Decimal(1400.00),
            isFinal=True,
        )
        EducationalBookingFactory(
            amount=Decimal(20.00),
            quantity=20,
            educationalBooking__educationalInstitution=educational_institution,
            educationalBooking__educationalYear=educational_year,
            status=BookingStatus.CONFIRMED,
        )

        booking = EducationalBookingFactory(
            amount=Decimal(20.00),
            quantity=20,
            educationalBooking__educationalInstitution=educational_institution,
            educationalBooking__educationalYear=educational_year,
            educationalBooking__educationalRedactor=redactor,
            status=BookingStatus.PENDING,
            educationalBooking__confirmationLimitDate=datetime(
                2021, 10, 15, 10),
        )

        client = TestClient(app.test_client()).with_eac_token()
        response = client.post(
            f"/adage/v1/prebookings/{booking.educationalBookingId}/confirm")

        assert response.status_code == 200
        stock = booking.stock
        offer = stock.offer
        venue = offer.venue
        educational_booking = booking.educationalBooking

        assert response.json == {
            "address":
            venue.address,
            "beginningDatetime":
            format_into_utc_date(stock.beginningDatetime),
            "cancellationDate":
            None,
            "cancellationLimitDate":
            format_into_utc_date(booking.cancellationLimitDate),
            "city":
            venue.city,
            "confirmationDate":
            "2021-10-15T09:00:00Z",
            "confirmationLimitDate":
            format_into_utc_date(educational_booking.confirmationLimitDate),
            "coordinates": {
                "latitude": float(venue.latitude),
                "longitude": float(venue.longitude),
            },
            "creationDate":
            format_into_utc_date(booking.dateCreated),
            "description":
            offer.description,
            "durationMinutes":
            offer.durationMinutes,
            "expirationDate":
            booking.expirationDate,
            "id":
            educational_booking.id,
            "image":
            None,
            "isDigital":
            offer.isDigital,
            "venueName":
            venue.name,
            "name":
            offer.name,
            "postalCode":
            venue.postalCode,
            "price":
            booking.amount,
            "quantity":
            booking.quantity,
            "redactor": {
                "email": "*****@*****.**",
                "redactorFirstName": "Jeanne",
                "redactorLastName": "Dodu",
                "redactorCivility": "Mme",
            },
            "UAICode":
            educational_booking.educationalInstitution.institutionId,
            "yearId":
            int(educational_booking.educationalYearId),
            "status":
            "CONFIRMED",
            "venueTimezone":
            venue.timezone,
            "totalAmount":
            booking.total_amount,
            "url":
            offer_webapp_link(offer),
            "withdrawalDetails":
            offer.withdrawalDetails,
        }
        assert Booking.query.filter(
            Booking.id == booking.id).one().status == BookingStatus.CONFIRMED
コード例 #7
0
    def test_final_educational_deposit_amounts(self) -> None:
        # When
        educational_deposit = EducationalDeposit(amount=Decimal(1000.00), isFinal=True)

        # Then
        assert educational_deposit.get_amount() == Decimal(1000.00)