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))
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)
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"}
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)
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
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
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)