From a1ada821b899e1b08f58b16931eea7364d5eac93 Mon Sep 17 00:00:00 2001 From: Sofia Calcagno <10255447+sofcalca@users.noreply.github.com> Date: Mon, 11 Mar 2019 17:07:35 +0100 Subject: [PATCH] (PC-1524) changed offerer recap email after user action --- scripts/send_final_booking_recaps.py | 2 - .../mails/offerer_final_recap_email.html | 3 - ...offerer_recap_email_after_user_action.html | 78 +++++++++---------- tests/utils_mailing_test.py | 61 +++++++++------ 4 files changed, 73 insertions(+), 71 deletions(-) diff --git a/scripts/send_final_booking_recaps.py b/scripts/send_final_booking_recaps.py index 5744e1cc4d..4d903ad8e7 100644 --- a/scripts/send_final_booking_recaps.py +++ b/scripts/send_final_booking_recaps.py @@ -1,8 +1,6 @@ import traceback from pprint import pprint -from flask import current_app as app - from domain.user_emails import send_final_booking_recap_email from repository.stock_queries import find_stocks_of_finished_events_when_no_recap_sent from utils.mailing import send_raw_email diff --git a/templates/mails/offerer_final_recap_email.html b/templates/mails/offerer_final_recap_email.html index 63c98d4e25..73f5783567 100644 --- a/templates/mails/offerer_final_recap_email.html +++ b/templates/mails/offerer_final_recap_email.html @@ -1,9 +1,6 @@

Cher partenaire pass Culture,

- {% block new_reservation %} - {% endblock %} - {% if booking_is_on_event %}

Voici le récapitulatif final des réservations : diff --git a/templates/mails/offerer_recap_email_after_user_action.html b/templates/mails/offerer_recap_email_after_user_action.html index 8225738eac..42dd580bb3 100644 --- a/templates/mails/offerer_recap_email_after_user_action.html +++ b/templates/mails/offerer_recap_email_after_user_action.html @@ -4,55 +4,47 @@

{{ user.firstName }} {{ user.lastName }} ({{ user.email }}) vient {% if is_cancellation -%} - d'annuler sa réservation + d'annuler sa réservation. {%- else -%} - de faire une nouvelle réservation - {%- endif -%} - {%- if booking_is_on_event -%} - . - {% else %} -
pour {{ event_or_thing.name }} ({{ event_or_thing.offerType['label'] }}) {{ pro_url }}/offres/{{ human_offer_id }}, - {% if venue.isVirtual %} -
offre numérique proposée par {{ venue.name }}. - {% else %} -
proposé par {{ venue.name }} (Adresse : {{ venue.address }}, {{ venue.postalCode }} {{ venue.city }}). - {% endif %} + de faire une nouvelle réservation. {%- endif -%}

- {% if booking_is_on_event %} -

- Voici le récapitulatif des réservations à ce jour : -
(total {{ number_of_bookings }}) pour {{ event_or_thing.name }} ({{ event_or_thing.offerType['label'] }}) {{ pro_url }}/offres/{{ human_offer_id }} - {% if stock_date_time %} -
le {{ stock_date_time }}, - {% endif %} - {% if venue.isVirtual %} -
Offre numérique proposée par {{ venue.name }}. - {% else %} -
proposé par {{ venue.name }} (Adresse : {{ venue.address }}, {{ venue.postalCode }} {{ venue.city }}). - {% endif %} -

- {% if stock_bookings %} - - - - - - - - {% for booking in stock_bookings %} - - - - - - - {% endfor %} -
PrénomNomEmailCode réservation
{{ booking.user.firstName }}{{ booking.user.lastName }}{{ booking.user.email }}{{ booking.token }}
+

+ Voici le récapitulatif des réservations à ce jour : +
(total {{ number_of_bookings }}) pour {{ event_or_thing.name }} ({{ event_or_thing.offerType['label'] }}) {{ pro_url }}/offres/{{ human_offer_id }} + {% if stock_date_time %} +
le {{ stock_date_time }}, + {% endif %} + {% if venue.isVirtual %} +
Offre numérique proposée par {{ venue.name }}. {% else %} -

Aucune réservation

+
proposé par {{ venue.name }} (Adresse : {{ venue.address }}, {{ venue.postalCode }} {{ venue.city }}). {% endif %} +

+ {% if stock_bookings %} + + + + + + {% if booking_is_on_event %} + + {% endif %} + + {% for booking in stock_bookings %} + + + + + {% if booking_is_on_event %} + + {% endif %} + + {% endfor %} +
PrénomNomEmailCode réservation
{{ booking.user.firstName }}{{ booking.user.lastName }}{{ booking.user.email }}{{ booking.token }}
+ {% else %} +

Aucune réservation

{% endif %}

Vous recevez ce message parce que votre adresse e-mail est renseignée comme adresse de contact sur votre offre. diff --git a/tests/utils_mailing_test.py b/tests/utils_mailing_test.py index cb07175c8f..dad10741c0 100644 --- a/tests/utils_mailing_test.py +++ b/tests/utils_mailing_test.py @@ -415,34 +415,42 @@ def test_offerer_recap_email_future_offer_when_new_booking_with_old_booking(app) @mocked_mail @clean_database @pytest.mark.standalone -def test_offerer_booking_recap_email_thing_offer(app): +def test_offerer_booking_recap_email_thing_offer_has_recap_table_but_no_tokens(app): # Given venue = create_venue(None, 'Test offerer', 'reservations@test.fr', '123 rue test', '93000', 'Test city', '93') thing_offer = create_thing_offer(venue=None, thing_type=ThingType.AUDIOVISUEL) stock = create_stock_with_thing_offer(offerer=None, venue=venue, thing_offer=thing_offer) stock.offer.id = 1 - user = create_user('Test', departement_code='93', email='test@email.com', can_book_free_offers=True) - booking = create_booking(user, stock, venue, None) - booking.token = '56789' + user1 = create_user('Test', first_name='Joe', last_name='Dalton', departement_code='93', email='test1@email.com', + can_book_free_offers=True) + user2 = create_user('Test', first_name='Averell', last_name='Dalton', departement_code='93', + email='test2@email.com', can_book_free_offers=True) + booking1 = create_booking(user1, stock, venue, token='56789') + booking2 = create_booking(user2, stock, venue, token='12345') # When - with patch('utils.mailing.find_all_ongoing_bookings_by_stock', return_value=[booking]): - recap_email = make_offerer_booking_recap_email_after_user_action(booking) + with patch('utils.mailing.find_all_ongoing_bookings_by_stock', return_value=[booking1, booking2]): + recap_email = make_offerer_booking_recap_email_after_user_action(booking1) # Then email_html = remove_whitespaces(recap_email['Html-part']) recap_email_soup = BeautifulSoup(email_html, 'html.parser') - recap_html = recap_email_soup.find("p", {"id": 'recap'}) + recap_html = recap_email_soup.find("p", {"id": 'recap'}).text action_html = recap_email_soup.find("p", {"id": 'action'}).text - assert 'John Doe (test@email.com) vient de faire une nouvelle réservation' in action_html - assert 'pour Test Book' in action_html - assert '(Audiovisuel (Films sur supports physiques et VOD))' in action_html - assert 'http://localhost:3001/offres/AE' in action_html - assert 'proposé par Test offerer (Adresse : 123 rue test, 93000 Test city).' in action_html - assert recap_html is None - action_table_html = recap_email_soup.find("table", {"id": 'recap-table'}) - assert action_table_html is None + assert 'Joe Dalton (test1@email.com) vient de faire une nouvelle réservation' in action_html + assert 'Voici le récapitulatif des réservations à ce jour :' in recap_html + assert '(total 2) pour Test Book' in recap_html + assert '(Audiovisuel (Films sur supports physiques et VOD))' in recap_html + assert 'http://localhost:3001/offres/AE' in recap_html + assert 'proposé par Test offerer (Adresse : 123 rue test, 93000 Test city).' in recap_html + recap_table_html = recap_email_soup.find("table", {"id": 'recap-table'}).text + assert 'Joe' in recap_table_html + assert 'Averell' in recap_table_html + assert 'test1@email.com' in recap_table_html + assert 'test2@email.com' in recap_table_html + assert '12345' not in recap_table_html + assert '56789' not in recap_table_html @mocked_mail @@ -944,8 +952,9 @@ def test_make_offerer_booking_user_cancellation_for_thing_email_when_virtual_ven # Then email_html = BeautifulSoup(recap_email['Html-part'], 'html.parser') - assert 'offre numérique proposée par Test offerer' in str(email_html.find('p', {'id': 'action'})) - assert '(Adresse:' not in str(email_html.find('p', {'id': 'action'})) + email_racap_html = email_html.find('p', {'id': 'recap'}).text + assert 'Offre numérique proposée par Test offerer' in email_racap_html + assert '(Adresse:' not in email_racap_html @clean_database @@ -1026,16 +1035,16 @@ def test_make_offerer_booking_user_cancellation_email_for_event_has_cancellation @clean_database @pytest.mark.standalone -def test_make_offerer_booking_user_cancellation_does_not_have_recap_information(app): +def test_make_offerer_booking_user_cancellation_has_recap_information_but_no_token(app): # Given offerer = create_offerer() venue = create_venue(offerer, 'Test offerer', 'reservations@test.fr', is_virtual=True, siret=None) thing_offer = create_thing_offer(venue) stock = create_stock_from_offer(thing_offer, price=0) - user_1 = create_user('Test1', departement_code='93', email='test1@email.com') - user_2 = create_user('Test2', departement_code='93', email='test2@email.com') - booking_1 = create_booking(user_1, stock, venue) - booking_2 = create_booking(user_2, stock, venue) + user_1 = create_user('Test1', first_name='Jane', last_name='Doe', departement_code='93', email='test1@email.com') + user_2 = create_user('Test2', first_name='Lucy', last_name='Smith', departement_code='93', email='test2@email.com') + booking_1 = create_booking(user_1, stock, venue, token='12345') + booking_2 = create_booking(user_2, stock, venue, token='56789') booking_2.isCancelled = True PcObject.check_and_save(booking_1, booking_2) @@ -1045,7 +1054,13 @@ def test_make_offerer_booking_user_cancellation_does_not_have_recap_information( # Then email_html = BeautifulSoup(recap_email['Html-part'], 'html.parser') - assert email_html.find('table', {'id': 'recap-table'}) is None + recap_table_html = email_html.find('table', {'id': 'recap-table'}).text + assert 'Jane' in recap_table_html + assert 'Lucy' not in recap_table_html + assert 'test1@email.com' in recap_table_html + assert 'test2@email.com' not in recap_table_html + assert '12345' not in recap_table_html + assert '56789' not in recap_table_html @pytest.mark.standalone