def test_a_digital_booking_expires_after_30_days(self): # Given booking = make_booking( quantity=10, stock__price=0, stock__offer__product__subcategoryId=subcategories.VOD.id, stock__offer__product__url="http://example.com", stock__offer__name="Super offre numérique", ) # When email_data = retrieve_data_for_offerer_booking_recap_email( booking.individualBooking) # Then expected = get_expected_base_email_data( booking, date="", heure="", is_event=0, prix="Gratuit", nom_offre="Super offre numérique", offer_type="VOD", quantity=10, can_expire=0, must_use_token_for_payment=0, ) assert email_data == expected
def test_with_book(): booking = make_booking( stock__offer__name="Le récit de voyage", stock__offer__product__extraData={"isbn": "123456789"}, stock__offer__product__name="Le récit de voyage", stock__offer__product__type=str(models.ThingType.LIVRE_EDITION), stock__offer__venue__address=None, stock__offer__venue__city=None, stock__offer__venue__departementCode=None, stock__offer__venue__isVirtual=True, stock__offer__venue__postalCode=None, stock__offer__venue__siret=None, ) email_data = retrieve_data_for_offerer_booking_recap_email(booking) expected = get_expected_base_email_data( booking, date="", departement="numérique", heure="", is_event=0, nom_offre="Le récit de voyage", offer_type="book", can_expire=1, ) assert email_data == expected
def test_non_digital_bookings_can_expire_after_30_days(self): booking = make_booking( stock__offer__name="Le récit de voyage", stock__offer__product__extraData={"isbn": "123456789"}, stock__offer__product__name="Le récit de voyage", stock__offer__product__subcategoryId=subcategories. SUPPORT_PHYSIQUE_FILM.id, stock__offer__venue__address=None, stock__offer__venue__city=None, stock__offer__venue__departementCode=None, stock__offer__venue__isVirtual=True, stock__offer__venue__postalCode=None, stock__offer__venue__siret=None, ) email_data = retrieve_data_for_offerer_booking_recap_email( booking.individualBooking) expected = get_expected_base_email_data( booking, date="", departement="numérique", heure="", is_event=0, nom_offre="Le récit de voyage", offer_type="SUPPORT_PHYSIQUE_FILM", can_expire=1, ) assert email_data == expected
def test_with_two_users_who_booked_the_same_offer(): booking1 = make_booking() make_booking( token="XYZ123", user__firstName="Jane", user__lastName="Roe", user__email="*****@*****.**", stock=booking1.stock, ) email_data = retrieve_data_for_offerer_booking_recap_email(booking1, []) user_data = email_data["Vars"]["users"] assert len(user_data) == 2 jane = { "firstName": "Jane", "lastName": "Roe", "email": "*****@*****.**", "contremarque": "XYZ123", } john = { "firstName": "John", "lastName": "Doe", "email": "*****@*****.**", "contremarque": "ABC123", } assert sorted(user_data, key=lambda d: d["firstName"]) == [jane, john]
def test_should_not_truncate_price(): booking = make_booking(stock__price=5.86) email_data = retrieve_data_for_offerer_booking_recap_email(booking) expected = get_expected_base_email_data(booking, prix="5.86") assert email_data == expected
def test_no_need_when_booking_is_autovalidated(self): # Given offer = offers_factories.OfferFactory( venue__name="Lieu de l'offreur", venue__managingOfferer__name="Théâtre du coin", product=offers_factories.DigitalProductFactory( name="Super événement", url="http://example.com"), ) digital_stock = offers_factories.StockWithActivationCodesFactory() first_activation_code = digital_stock.activationCodes[0] booking = bookings_factories.UsedIndividualBookingFactory( individualBooking__user__email="*****@*****.**", individualBooking__user__firstName="John", individualBooking__user__lastName="Doe", stock__offer=offer, activationCode=first_activation_code, dateCreated=datetime(2018, 1, 1), ) # When email_data = retrieve_data_for_offerer_booking_recap_email( booking.individualBooking) # Then expected = get_expected_base_email_data( booking, date="", heure="", is_event=0, is_booking_autovalidated=1, must_use_token_for_payment=0, offer_type="VOD", contremarque=booking.token, ) assert email_data == expected
def test_with_event(): booking = make_booking() email_data = retrieve_data_for_offerer_booking_recap_email(booking) expected = get_expected_base_email_data(booking) assert email_data == expected
def test_with_book_with_missing_isbn(self): booking = make_booking( stock__offer__name="Le récit de voyage", stock__offer__product__extraData={}, # no ISBN stock__offer__product__name="Le récit de voyage", stock__offer__product__subcategoryId=subcategories.LIVRE_PAPIER.id, stock__offer__venue__address=None, stock__offer__venue__city=None, stock__offer__venue__departementCode=None, stock__offer__venue__isVirtual=True, stock__offer__venue__postalCode=None, stock__offer__venue__siret=None, ) email_data = retrieve_data_for_offerer_booking_recap_email( booking.individualBooking) expected = get_expected_base_email_data( booking, date="", departement="numérique", heure="", is_event=0, nom_offre="Le récit de voyage", offer_type="book", ISBN="", can_expire=1, expiration_delay=10, ) assert email_data == expected
def test_recipients_on_production(): booking = make_booking() recipients = ["*****@*****.**", "*****@*****.**"] email_data = retrieve_data_for_offerer_booking_recap_email( booking, recipients) assert email_data["To"] == ", ".join(recipients)
def send_booking_recap_emails(booking: Booking) -> None: recipients = [settings.ADMINISTRATION_EMAIL_ADDRESS] booking_email = booking.stock.offer.bookingEmail if booking_email: recipients.append(booking_email) data = retrieve_data_for_offerer_booking_recap_email(booking) mails.send(recipients=recipients, data=data)
def test_recipients_when_feature_send_mail_to_users_is_disabled(): booking = make_booking() recipients = ["*****@*****.**", "*****@*****.**"] email_data = retrieve_data_for_offerer_booking_recap_email( booking, recipients) assert email_data["To"] == "*****@*****.**"
def send_booking_recap_emails(booking: Booking, send_email: Callable[..., bool]) -> None: recipients = [settings.ADMINISTRATION_EMAIL_ADDRESS] booking_email = booking.stock.offer.bookingEmail if booking_email: recipients.append(booking_email) data = retrieve_data_for_offerer_booking_recap_email(booking, recipients) send_email(data=data)
def test_should_add_reply_to_header_with_beneficiary_email(): # given booking = make_booking(user__email="*****@*****.**") # when email_data = retrieve_data_for_offerer_booking_recap_email(booking) # then template_headers = email_data["Headers"] assert template_headers["Reply-To"] == "*****@*****.**"
def test_should_add_user_phone_number_to_vars(): # given booking = make_booking(user__phoneNumber="0123456789") # when email_data = retrieve_data_for_offerer_booking_recap_email(booking) # then template_vars = email_data["Vars"] assert template_vars["user_phoneNumber"] == "0123456789"
def test_when_use_token_for_payment(self): # Given booking = make_booking(stock__price=10, ) # When email_data = retrieve_data_for_offerer_booking_recap_email( booking.individualBooking) # Then expected = get_expected_base_email_data(booking, must_use_token_for_payment=1) assert email_data == expected
def test_should_use_venue_public_name_when_available(self): booking = make_booking( stock__offer__venue__name="Legal name", stock__offer__venue__publicName="Public name", ) email_data = retrieve_data_for_offerer_booking_recap_email( booking.individualBooking) expected = get_expected_base_email_data(booking, nom_lieu="Public name") assert email_data == expected
def test_no_need_when_price_is_free(self): # Given booking = make_booking(stock__price=0, ) # When email_data = retrieve_data_for_offerer_booking_recap_email( booking.individualBooking) # Then expected = get_expected_base_email_data(booking, prix="Gratuit", must_use_token_for_payment=0) assert email_data == expected
def test_no_need_when_using_activation_code(self): # Given booking = make_booking() ActivationCodeFactory(stock=booking.stock, booking=booking, code="code_toto") # When email_data = retrieve_data_for_offerer_booking_recap_email( booking.individualBooking) # Then expected = get_expected_base_email_data(booking, must_use_token_for_payment=0) assert email_data == expected
def test_with_book(self): booking = make_booking( stock__offer__name="Le récit de voyage", stock__offer__product__extraData={"isbn": "123456789"}, stock__offer__product__name="Le récit de voyage", stock__offer__product__subcategoryId=subcategories.LIVRE_PAPIER.id, ) email_data = retrieve_data_for_offerer_booking_recap_email( booking.individualBooking) expected = get_expected_base_email_data( booking, date="", departement="75", heure="", is_event=0, nom_offre="Le récit de voyage", offer_type="book", can_expire=1, expiration_delay=10, ) assert email_data == expected
def send_individual_booking_confirmation_email_to_offerer(individual_booking: IndividualBooking) -> None: offerer_booking_email = individual_booking.booking.stock.offer.bookingEmail if offerer_booking_email: data = retrieve_data_for_offerer_booking_recap_email(individual_booking) mails.send(recipients=[offerer_booking_email], data=data)