Skip to content

Commit

Permalink
#54 refactor: move in a single method the send confirmation email action
Browse files Browse the repository at this point in the history
  • Loading branch information
syjer committed Aug 19, 2015
1 parent 9f4965a commit 1a29daf
Show file tree
Hide file tree
Showing 4 changed files with 34 additions and 13 deletions.
9 changes: 1 addition & 8 deletions src/main/java/alfio/controller/ReservationController.java
Original file line number Diff line number Diff line change
Expand Up @@ -392,15 +392,8 @@ public String assignTicketToPerson(@PathVariable("eventName") String eventName,
}

private void sendReservationCompleteEmail(HttpServletRequest request, Event event, TicketReservation reservation) {

Locale locale = RequestContextUtils.getLocale(request);

String shortReservationID = ticketReservationManager.getShortReservationID(reservation.getId());

notificationManager.sendSimpleEmail(event, reservation.getEmail(), messageSource.getMessage("reservation-email-subject",
new Object[] { shortReservationID, event.getDisplayName() }, locale), () -> {
return templateManager.renderClassPathResource("/alfio/templates/confirmation-email-txt.ms", ticketReservationManager.prepareModelForReservationEmail(event, reservation), locale, TemplateOutput.TEXT);
});
ticketReservationManager.sendConfirmationEmail(event, reservation, locale);
}

private void sendReservationCompleteEmailToOrganizer(HttpServletRequest request, Event event, TicketReservation reservation) {
Expand Down
11 changes: 9 additions & 2 deletions src/main/java/alfio/manager/NotificationManager.java
Original file line number Diff line number Diff line change
Expand Up @@ -111,9 +111,16 @@ public void sendTicketByEmail(Ticket ticket, Event event, Locale locale, Partial
}

public void sendSimpleEmail(Event event, String recipient, String subject, TextTemplateGenerator textBuilder) {
sendSimpleEmail(event, recipient, subject, textBuilder, Collections.emptyList());
}

public void sendSimpleEmail(Event event, String recipient, String subject, TextTemplateGenerator textBuilder, List<Mailer.Attachment> attachments) {

String encodedAttachments = attachments.isEmpty() ? null : encodeAttachments(attachments.toArray(new Mailer.Attachment[attachments.size()]));

String text = textBuilder.generate();
String checksum = calculateChecksum(recipient, null, subject, text);
emailMessageRepository.insert(event.getId(), recipient, subject, text, null, checksum, ZonedDateTime.now(UTC));
String checksum = calculateChecksum(recipient, encodedAttachments, subject, text);
emailMessageRepository.insert(event.getId(), recipient, subject, text, encodedAttachments, checksum, ZonedDateTime.now(UTC));
messages.offer(new EmailMessage(-1, event.getId(), WAITING.name(), recipient, subject, text, null, checksum));
}

Expand Down
15 changes: 13 additions & 2 deletions src/main/java/alfio/manager/TicketReservationManager.java
Original file line number Diff line number Diff line change
Expand Up @@ -322,12 +322,23 @@ public void confirmOfflinePayment(Event event, String reservationId) {
Validate.isTrue(ticketReservation.getStatus() == TicketReservationStatus.OFFLINE_PAYMENT, "invalid status");
ticketReservationRepository.updateTicketReservationStatus(reservationId, TicketReservationStatus.COMPLETE.name());
acquireTickets(TicketStatus.ACQUIRED, PaymentProxy.OFFLINE, reservationId, ticketReservation.getEmail(), ticketReservation.getFullName(), ticketReservation.getUserLanguage(), ticketReservation.getBillingAddress());

Locale language = findReservationLanguage(reservationId);
notificationManager.sendSimpleEmail(event, ticketReservation.getEmail(), messageSource.getMessage("reservation-email-subject",
new Object[]{ getShortReservationID(reservationId), event.getDisplayName()}, language), () -> templateManager.renderClassPathResource("/alfio/templates/confirmation-email-txt.ms", prepareModelForReservationEmail(event, ticketReservation), language, TemplateOutput.TEXT));

sendConfirmationEmail(event, ticketReservation, language);

pluginManager.handleReservationConfirmation(ticketReservationRepository.findReservationById(reservationId), event.getId());
}

public void sendConfirmationEmail(Event event, TicketReservation ticketReservation, Locale language) {
String reservationId = ticketReservation.getId();

Map<String, Object> reservationEmailModel = prepareModelForReservationEmail(event, ticketReservation);
notificationManager.sendSimpleEmail(event, ticketReservation.getEmail(), messageSource.getMessage("reservation-email-subject",
new Object[]{ getShortReservationID(reservationId), event.getDisplayName()}, language),
() -> templateManager.renderClassPathResource("/alfio/templates/confirmation-email-txt.ms", reservationEmailModel, language, TemplateOutput.TEXT));
}

private Locale findReservationLanguage(String reservationId) {
return Optional.ofNullable(ticketReservationRepository.findReservationById(reservationId).getUserLanguage()).map(Locale::forLanguageTag).orElse(Locale.ENGLISH);
}
Expand Down
12 changes: 11 additions & 1 deletion src/test/java/alfio/manager/TicketReservationManagerTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -517,10 +517,15 @@ public class TicketReservationManagerTest {{
NotificationManager notificationManager = it.usesMock(NotificationManager.class);
MessageSource messageSource = it.usesMock(MessageSource.class);
PluginManager pluginManager = mock(PluginManager.class);
TicketReservationManager ticketReservationManager = new TicketReservationManager(null, null, ticketRepository, ticketReservationRepository, null, null, configurationManager, paymentManager, null, specialPriceRepository, null, notificationManager, messageSource, null, platformTransactionManager, waitingQueueManager, pluginManager);
OrganizationRepository organizationRepository = mock(OrganizationRepository.class);
PromoCodeDiscountRepository promoCodeDiscountRepository = mock(PromoCodeDiscountRepository.class);
EventRepository eventRepository = it.usesMock(EventRepository.class);
TicketReservationManager ticketReservationManager = new TicketReservationManager(eventRepository, organizationRepository, ticketRepository, ticketReservationRepository, null, null, configurationManager, paymentManager, promoCodeDiscountRepository, specialPriceRepository, null, notificationManager, messageSource, null, platformTransactionManager, waitingQueueManager, pluginManager);
Event event = mock(Event.class);
when(event.getZoneId()).thenReturn(ZoneId.systemDefault());
when(event.getBegin()).thenReturn(ZonedDateTime.now().plusDays(5));


it.should("confirm a paid reservation", expect -> {
when(ticketReservationRepository.updateTicketReservation(eq(reservationId), eq(TicketReservationStatus.COMPLETE.toString()), anyString(), anyString(), anyString(), anyString(), any(), eq(PaymentProxy.STRIPE.toString()))).thenReturn(1);
when(ticketRepository.updateTicketsStatusWithReservationId(eq(reservationId), eq(TicketStatus.ACQUIRED.toString()))).thenReturn(1);
Expand Down Expand Up @@ -574,11 +579,16 @@ public class TicketReservationManagerTest {{

it.should("confirm OFFLINE payments", expect -> {
TicketReservation reservation = it.usesMock(TicketReservation.class);
when(reservation.getId()).thenReturn(reservationId);
when(reservation.getPaymentMethod()).thenReturn(PaymentProxy.OFFLINE);
when(reservation.getStatus()).thenReturn(OFFLINE_PAYMENT);
when(ticketReservationRepository.findReservationById(eq(reservationId))).thenReturn(reservation);
when(ticketRepository.updateTicketsStatusWithReservationId(eq(reservationId), eq(TicketStatus.ACQUIRED.toString()))).thenReturn(1);
when(ticketReservationRepository.updateTicketReservation(eq(reservationId), eq(COMPLETE.toString()), anyString(), anyString(), anyString(), anyString(), any(ZonedDateTime.class), eq(PaymentProxy.OFFLINE.toString()))).thenReturn(1);
when(configurationManager.getStringConfigValue(any())).thenReturn(Optional.of("vatnr"));
when(ticketRepository.findTicketsInReservation(eq(reservationId))).thenReturn(Collections.emptyList());
when(eventRepository.findByReservationId(eq(reservationId))).thenReturn(event);

ticketReservationManager.confirmOfflinePayment(event, reservationId);
verify(ticketReservationRepository).lockReservationForUpdate(eq(reservationId));
verify(ticketReservationRepository).updateTicketReservationStatus(eq(reservationId), eq(COMPLETE.toString()));
Expand Down

0 comments on commit 1a29daf

Please sign in to comment.