def test_generate_payment_csv_raw_contains_human_readable_status_with_details_when_error( self, app): # given user = users_factories.UserFactory(email="*****@*****.**") offerer = create_offerer() venue = create_venue(offerer) stock = create_stock_with_thing_offer(offerer=offerer, venue=venue, price=10) booking = create_booking(user=user, stock=stock, is_used=True, token="ABCDEF", venue=venue) payment = create_payment( booking, offerer, transaction_label= "pass Culture Pro - remboursement 1ère quinzaine 07-2019", status=TransactionStatus.ERROR, amount=50, detail="Iban non fourni", ) repository.save(payment) payments_info = find_all_offerer_payments(offerer.id) # when raw_csv = ReimbursementDetails(payments_info[0]).as_csv_row() # then assert raw_csv[ 13] == "Erreur d'envoi du remboursement : Iban non fourni"
def when_booking_is_already_validated(self, app): # Given user = create_user(email="*****@*****.**") admin_user = create_user(email="*****@*****.**") offerer = create_offerer() venue = create_venue(offerer) stock = create_stock_with_thing_offer(offerer, venue, offer=None, price=0) booking = create_booking(user=user, stock=stock, is_used=True, venue=venue) repository.save(admin_user, booking) url = f"/bookings/token/{booking.token}[email protected]&offer_id={humanize(stock.offerId)}" # When response = TestClient(app.test_client()).get(url) # Then assert response.status_code == 410 assert response.json["booking"] == [ "Cette réservation a déjà été validée" ]
def when_user_has_booked_some_offers(self, app): # Given user = UserFactory( email="*****@*****.**", postalCode="93020", ) offerer = create_offerer( siren="999199987", address="2 Test adress", city="Test city", postal_code="93000", name="Test offerer" ) venue = create_venue(offerer) thing_offer = create_offer_with_thing_product(venue=None) stock = create_stock_with_thing_offer(offerer, venue, thing_offer, price=5) booking = create_booking(user=user, stock=stock, venue=venue, quantity=1) repository.save(venue, booking) # When response = TestClient(app.test_client()).with_auth("*****@*****.**").get("/beneficiaries/current") # Then assert response.json["wallet_balance"] == 495.0 assert response.json["expenses"] == [ {"domain": "all", "current": 5.0, "limit": 500.0}, {"domain": "digital", "current": 0.0, "limit": 200.0}, {"domain": "physical", "current": 5.0, "limit": 200.0}, ]
def when_booking_is_already_validated(self, app): # Given user = create_user(email="*****@*****.**") admin_user = create_user(email="*****@*****.**") offerer = create_offerer() user_offerer = create_user_offerer(admin_user, offerer) venue = create_venue(offerer) stock = create_stock_with_thing_offer(offerer, venue, offer=None, price=0) booking = create_booking(user=user, stock=stock, is_used=True, venue=venue) repository.save(admin_user, booking, user_offerer) offererApiKey = create_api_key(offerer_id=offerer.id) repository.save(offererApiKey) user2ApiKey = f"Bearer {offererApiKey.value}" url = f"/v2/bookings/token/{booking.token}" # When response = TestClient(app.test_client()).get(url, headers={ "Authorization": user2ApiKey, "Origin": "http://localhost" }) # Then assert response.status_code == 410 assert response.json["booking"] == [ "Cette réservation a déjà été validée" ]
def when_user_has_an_offerer_attached(self, app): # Given user = create_user(email="*****@*****.**") deposit = create_deposit(user, amount=500, source="public") offerer1 = create_offerer() offerer2 = create_offerer(siren="123456788") user_offerer1 = create_user_offerer(user, offerer1, validation_token=None) user_offerer2 = create_user_offerer(user, offerer2, validation_token=None) venue1 = create_venue(offerer1) venue2 = create_venue(offerer1, siret="12345678912346") venue3 = create_venue(offerer2, siret="12345678912347") bank_information1 = create_bank_information(application_id=1, venue=venue1) bank_information2 = create_bank_information(application_id=7, venue=venue2) stock1 = create_stock_with_thing_offer(offerer=offerer1, venue=venue1, price=10) stock2 = create_stock_with_thing_offer(offerer=offerer1, venue=venue2, price=11) stock3 = create_stock_with_thing_offer(offerer=offerer2, venue=venue3, price=12) stock4 = create_stock_with_thing_offer(offerer=offerer2, venue=venue3, price=13) booking1 = create_booking(user=user, stock=stock1, is_used=True, token="ABCDEF", venue=venue1) booking2 = create_booking(user=user, stock=stock1, token="ABCDEG", venue=venue1) booking3 = create_booking(user=user, stock=stock2, is_used=True, token="ABCDEH", venue=venue2) booking4 = create_booking(user=user, stock=stock3, is_used=True, token="ABCDEI", venue=venue3) booking5 = create_booking(user=user, stock=stock4, is_used=True, token="ABCDEJ", venue=venue3) booking6 = create_booking(user=user, stock=stock4, is_used=True, token="ABCDEK", venue=venue3) repository.save( deposit, booking1, booking2, booking3, booking4, booking5, booking6, user_offerer1, user_offerer2, bank_information1, bank_information2, ) generate_new_payments() # When response = TestClient(app.test_client()).with_auth(user.email).get("/reimbursements/csv") response_lines = response.data.decode("utf-8").split("\n") # Then assert response.status_code == 200 assert response.headers["Content-type"] == "text/csv; charset=utf-8;" assert response.headers["Content-Disposition"] == "attachment; filename=remboursements_pass_culture.csv" assert len(response_lines) == 7
def test_find_all_offerer_reimbursement_details(self, app): # Given user = users_factories.UserFactory(email="*****@*****.**") offerer1 = create_offerer(siren="123456789") user_offerer1 = create_user_offerer(user, offerer1, validation_token=None) venue1 = create_venue(offerer1) venue2 = create_venue(offerer1, siret="12345678912346") bank_information1 = create_bank_information(application_id=1, venue=venue1) bank_information2 = create_bank_information(application_id=2, venue=venue2) create_offer_with_thing_product( venue1, url="https://host/path/{token}?offerId={offerId}&email={email}") create_offer_with_thing_product(venue2) stock1 = create_stock_with_thing_offer(offerer=offerer1, venue=venue1, price=10) stock2 = create_stock_with_thing_offer(offerer=offerer1, venue=venue2, price=11) booking1 = create_booking(user=user, stock=stock1, is_used=True, token="ABCDEF", venue=venue1) booking2 = create_booking(user=user, stock=stock1, token="ABCDEG", venue=venue1) booking3 = create_booking(user=user, stock=stock2, is_used=True, token="ABCDEH", venue=venue2) repository.save(booking1, booking2, booking3, user_offerer1, bank_information1, bank_information2) generate_new_payments() # When reimbursement_details = find_all_offerer_reimbursement_details( offerer1.id) # Then assert len(reimbursement_details) == 2
def test_should_return_one_payment_info_with_sent_status(self, app): # Given user = users_factories.UserFactory(lastName="User", firstName="Plus") offerer = create_offerer(address="7 rue du livre") venue = create_venue(offerer) stock = create_stock_with_thing_offer(offerer=offerer, venue=venue, price=10) now = datetime.utcnow() booking = create_booking(user=user, stock=stock, is_used=True, date_used=now, token="ABCDEF", venue=venue) payment = create_payment( booking, offerer, transaction_label= "pass Culture Pro - remboursement 1ère quinzaine 07-2019", status=TransactionStatus.ERROR, amount=50, detail="Iban non fourni", status_date=now - timedelta(days=2), ) payment_status1 = create_payment_status(payment, detail="All good", status=TransactionStatus.RETRY, date=now - timedelta(days=1)) payment_status2 = create_payment_status(payment, detail="All good", status=TransactionStatus.SENT) repository.save(payment, payment_status1, payment_status2) # When payments = find_all_offerer_payments(offerer.id) # Then assert len(payments) == 1 assert payments[0] == ( "User", "Plus", "ABCDEF", now, "Test Book", "7 rue du livre", "La petite librairie", "12345678912345", "123 rue de Paris", Decimal("50.00"), None, "pass Culture Pro - remboursement 1ère quinzaine 07-2019", TransactionStatus.SENT, "All good", )
def create_booking( user: User, amount: Optional[Union[Decimal, float]] = None, date_created: datetime = datetime.utcnow(), date_used: datetime = None, idx: int = None, is_cancelled: bool = False, is_used: bool = False, quantity: int = 1, stock: Stock = None, token: str = None, venue: VenueSQLEntity = None, ) -> Booking: booking = Booking() offerer = create_offerer(siren="987654321", address="Test address", city="Test city", postal_code="93000", name="Test name") if venue is None: venue = create_venue( offerer=offerer, name="Test offerer", booking_email="*****@*****.**", address="123 rue test", postal_code="93000", city="Test city", departement_code="93", ) if stock is None: price = amount if amount is not None else 10 product_with_thing_type = create_offer_with_thing_product(venue) stock = create_stock_with_thing_offer(offerer=offerer, venue=venue, offer=product_with_thing_type, price=price) if not stock.offer: stock.offer = create_offer_with_thing_product(venue) booking.user = user booking.amount = amount if amount is not None else stock.price booking.dateCreated = date_created booking.dateUsed = date_used booking.id = idx booking.isCancelled = is_cancelled booking.isUsed = is_used booking.quantity = quantity booking.stock = stock booking.token = token if token is not None else random_token() booking.userId = user.id booking.confirmationDate = bookings_api.compute_confirmation_date( stock.beginningDatetime, date_created) return booking
def test_is_deletable_when_stock_is_not_an_event(self): # Given offerer = create_offerer() venue = create_venue(offerer) stock = create_stock_with_thing_offer(offerer=offerer, venue=venue) # When is_event_deletable = stock.isEventDeletable # Then assert is_event_deletable is True
def test_is_not_expired_when_stock_is_not_an_event(self): # Given offerer = create_offerer() venue = create_venue(offerer) stock = create_stock_with_thing_offer(offerer=offerer, venue=venue) # When is_event_expired = stock.isEventExpired # Then assert is_event_expired is False
def save_sandbox(): offerer = create_offerer() venue = create_venue(offerer, is_virtual=True, siret=None) offer = create_offer_with_thing_product( venue, thing_subcategory_id=subcategories.ACTIVATION_THING.id) stock = create_stock_with_thing_offer(offerer, venue, offer=offer, price=0, quantity=10000) repository.save(stock)
def save_sandbox(): offerer = create_offerer() venue = create_venue(offerer, is_virtual=True, siret=None) offer = create_offer_with_thing_product(venue, thing_type=ThingType.ACTIVATION) stock = create_stock_with_thing_offer(offerer, venue, offer=offer, price=0, quantity=10000) repository.save(stock)
def create_industrial_activation_offers(): logger.info("create_industrial_activation_offers") activated_user = User.query.filter_by(has_beneficiary_role=True).first() offerer = create_offerer() venue = create_venue(offerer, is_virtual=True, siret=None) offer = create_offer_with_thing_product(venue, thing_subcategory_id=subcategories.ACTIVATION_THING.id) stock = create_stock_with_thing_offer(offerer, venue, offer=offer, price=0, quantity=10000) booking = create_booking(user=activated_user, stock=stock, offerer=offerer, venue=venue, token="ACTIVA") repository.save(booking) logger.info("created 1 activation offer")
def when_user_has_bookings_and_qr_code_feature_is_active(self, qr_code_is_active, app): # Given user1 = create_user(email="*****@*****.**") user2 = create_user(email="*****@*****.**") offerer = create_offerer() venue = create_venue(offerer=offerer) offer = create_offer_with_thing_product(venue) stock = create_stock_with_thing_offer(offerer=offerer, venue=venue, offer=offer, price=0) offer2 = create_offer_with_thing_product(venue) stock2 = create_stock_with_thing_offer(offerer=offerer, venue=venue, offer=offer2, price=0) booking1 = create_booking(user=user1, stock=stock, venue=venue, token="ABCDEF") booking2 = create_booking(user=user2, stock=stock, venue=venue, token="GHIJK") booking3 = create_booking(user=user1, stock=stock2, venue=venue, token="BBBBB") repository.save(booking1, booking2, booking3) # When response = TestClient(app.test_client()).with_auth(user1.email).get("/bookings") # Then all_bookings = response.json assert len(all_bookings) == 2 first_booking = all_bookings[0] assert response.status_code == 200 assert "qrCode" in first_booking assert "completedUrl" in first_booking assert "isEventExpired" in first_booking assert "offer" in first_booking["stock"] assert "isEventExpired" in first_booking["stock"] assert "isDigital" in first_booking["stock"]["offer"] assert "isEvent" in first_booking["stock"]["offer"] assert "offerType" in first_booking["stock"]["offer"] assert "thumbUrl" in first_booking["stock"]["offer"] assert "stocks" in first_booking["stock"]["offer"] assert "venue" in first_booking["stock"]["offer"] assert "validationToken" not in first_booking["stock"]["offer"]["venue"]
def when_user_not_logged_in_and_give_right_email_and_offer_id_thing( self, app): # Given user = create_user(email="*****@*****.**") admin_user = create_user(email="*****@*****.**") offerer = create_offerer() venue = create_venue(offerer) stock = create_stock_with_thing_offer(offerer, venue, offer=None, price=0) booking = create_booking(user=user, stock=stock, venue=venue) repository.save(admin_user, booking) url = f"/bookings/token/{booking.token}[email protected]&offer_id={humanize(stock.offerId)}" # When response = TestClient(app.test_client()).get(url) # Then assert response.status_code == 204
def create_industrial_activation_offers(): logger.info("create_industrial_activation_offers") activated_user = User.query.filter_by(isBeneficiary=True).first() offerer = create_offerer() venue = create_venue(offerer, is_virtual=True, siret=None) offer = create_offer_with_thing_product(venue, thing_type=ThingType.ACTIVATION) stock = create_stock_with_thing_offer(offerer, venue, offer=offer, price=0, quantity=10000) booking = create_booking(user=activated_user, stock=stock, token="ACTIVA", venue=venue) repository.save(booking) logger.info("created 1 activation offer")
def test_generate_payment_details_csv_with_right_values(self, app): # given user = users_factories.UserFactory(firstName="John", lastName="Doe") offerer1 = create_offerer(siren="123456789", address="123 rue de Paris") user_offerer1 = create_user_offerer(user, offerer1, validation_token=None) venue1 = create_venue(offerer1) bank_information1 = create_bank_information(venue=venue1) stock1 = create_stock_with_thing_offer(offerer=offerer1, venue=venue1, price=10) booking1 = create_booking(user=user, stock=stock1, is_used=True, token="ABCDEF", venue=venue1) booking2 = create_booking(user=user, stock=stock1, token="ABCDEG", venue=venue1) repository.save(booking1, booking2, user_offerer1, bank_information1) generate_new_payments() reimbursement_details = find_all_offerer_reimbursement_details( offerer1.id) # when csv = generate_reimbursement_details_csv(reimbursement_details) # then assert _count_non_empty_lines(csv) == 2 assert ( _get_header(csv, 1) == "2019;Juillet : remboursement 1ère quinzaine;La petite librairie;12345678912345;123 rue de Paris;FR7630006000011234567890189;La petite librairie;Test Book;Doe;John;ABCDEF;;10.00;Remboursement initié" )
def when_user_not_logged_in_right_email_and_wrong_offer(self, app): # Given user = create_user(email="*****@*****.**") admin_user = create_user(email="*****@*****.**") offerer = create_offerer() venue = create_venue(offerer) stock = create_stock_with_thing_offer(offerer, venue, offer=None, price=0) booking = create_booking(user=user, stock=stock, venue=venue) repository.save(admin_user, booking) url = f"/bookings/token/{booking.token}[email protected]&offer_id={humanize(123)}" # When response = TestClient(app.test_client()).get(url) # Then assert response.status_code == 404 assert response.json["global"] == [ "Cette contremarque n'a pas été trouvée" ]
def test_should_return_last_matching_status_based_on_date_for_each_payment( self, app): # Given user = users_factories.UserFactory(lastName="User", firstName="Plus") offerer = create_offerer(address="7 rue du livre") venue = create_venue(offerer) stock = create_stock_with_thing_offer(offerer=offerer, venue=venue, price=10) now = datetime.utcnow() booking1 = create_booking(user=user, stock=stock, is_used=True, date_used=now, token="ABCDEF", venue=venue) booking2 = create_booking(user=user, stock=stock, is_used=True, date_used=now, token="ABCDFE", venue=venue) payment1 = create_payment( booking1, offerer, transaction_label= "pass Culture Pro - remboursement 1ère quinzaine 07-2019", status=TransactionStatus.PENDING, amount=50, status_date=now - timedelta(days=2), ) payment2 = create_payment( booking2, offerer, transaction_label= "pass Culture Pro - remboursement 2ème quinzaine 07-2019", status=TransactionStatus.PENDING, amount=75, status_date=now - timedelta(days=4), ) repository.save(payment1, payment2) last_status_for_payment1 = create_payment_status( payment1, detail="All good", status=TransactionStatus.SENT, date=now) last_status_for_payment2 = create_payment_status( payment2, detail=None, status=TransactionStatus.SENT, date=now) repository.save(last_status_for_payment1, last_status_for_payment2) first_status_for_payment1 = create_payment_status( payment1, detail="Retry", status=TransactionStatus.RETRY, date=now - timedelta(days=1)) first_status_for_payment2 = create_payment_status( payment2, detail="Iban non fournis", status=TransactionStatus.ERROR, date=now - timedelta(days=3)) repository.save(first_status_for_payment1, first_status_for_payment2) # When payments = find_all_offerer_payments(offerer.id) # Then assert len(payments) == 2 assert payments[0] == ( "User", "Plus", "ABCDFE", now, "Test Book", "7 rue du livre", "La petite librairie", "12345678912345", "123 rue de Paris", Decimal("75.00"), None, "pass Culture Pro - remboursement 2ème quinzaine 07-2019", TransactionStatus.SENT, None, ) assert payments[1] == ( "User", "Plus", "ABCDEF", now, "Test Book", "7 rue du livre", "La petite librairie", "12345678912345", "123 rue de Paris", Decimal("50.00"), None, "pass Culture Pro - remboursement 1ère quinzaine 07-2019", TransactionStatus.SENT, "All good", )