use of alfio.repository.system.ConfigurationRepository in project alf.io by alfio-event.
the class CheckInManagerIntegrationTest method testReturnOnlyOnce.
@Test
void testReturnOnlyOnce() {
IntegrationTestUtil.ensureMinimalConfiguration(configurationRepository);
List<TicketCategoryModification> categories = List.of(new TicketCategoryModification(null, "default", TicketCategory.TicketAccessType.INHERIT, AVAILABLE_SEATS, new DateTimeModification(LocalDate.now(ClockProvider.clock()).minusDays(1), LocalTime.now(ClockProvider.clock())), new DateTimeModification(LocalDate.now(ClockProvider.clock()).plusDays(1), LocalTime.now(ClockProvider.clock())), DESCRIPTION, BigDecimal.TEN, false, "", false, null, null, null, null, null, 0, null, null, AlfioMetadata.empty()));
Pair<Event, String> eventAndUser = initEvent(categories, organizationRepository, userManager, eventManager, eventRepository);
var event = eventAndUser.getLeft();
var additionalServiceRequest = new EventModification.AdditionalService(null, BigDecimal.ONE, true, 1, 100, 2, DateTimeModification.fromZonedDateTime(ZonedDateTime.now(ClockProvider.clock()).minusDays(1)), DateTimeModification.fromZonedDateTime(ZonedDateTime.now(ClockProvider.clock()).plusDays(1)), BigDecimal.ZERO, AdditionalService.VatType.INHERITED, List.of(), List.of(new EventModification.AdditionalServiceText(null, "en", "bla", AdditionalServiceText.TextType.TITLE)), List.of(new EventModification.AdditionalServiceText(null, "en", "blabla", AdditionalServiceText.TextType.DESCRIPTION)), AdditionalService.AdditionalServiceType.SUPPLEMENT, AdditionalService.SupplementPolicy.OPTIONAL_UNLIMITED_AMOUNT);
var additionalService = eventManager.insertAdditionalService(event, additionalServiceRequest);
var category = ticketCategoryRepository.findAllTicketCategories(event.getId()).get(0);
TicketReservationModification tr = new TicketReservationModification();
tr.setQuantity(AVAILABLE_SEATS);
tr.setTicketCategoryId(category.getId());
var tickets = new TicketReservationWithOptionalCodeModification(tr, Optional.empty());
var additionalServices = new AdditionalServiceReservationModification();
additionalServices.setAdditionalServiceId(additionalService.getId());
additionalServices.setQuantity(1);
var additionalServicesModification = new ASReservationWithOptionalCodeModification(additionalServices, Optional.empty());
String reservationId = ticketReservationManager.createTicketReservation(event, List.of(tickets), List.of(additionalServicesModification), DateUtils.addDays(new Date(), 1), Optional.empty(), Locale.ENGLISH, false, null);
Pair<TotalPrice, Optional<PromoCodeDiscount>> priceAndDiscount = ticketReservationManager.totalReservationCostWithVAT(reservationId);
TotalPrice reservationCost = priceAndDiscount.getLeft();
assertTrue(priceAndDiscount.getRight().isEmpty());
PaymentSpecification specification = new PaymentSpecification(reservationId, null, reservationCost.getPriceWithVAT(), event, "email@example.com", new CustomerName("full name", "full", "name", event.mustUseFirstAndLastName()), "billing address", null, Locale.ENGLISH, true, false, null, "IT", "123456", PriceContainer.VatStatus.INCLUDED, true, false);
PaymentResult result = ticketReservationManager.performPayment(specification, reservationCost, PaymentProxy.OFFLINE, PaymentMethod.BANK_TRANSFER, null);
assertTrue(result.isSuccessful());
ticketReservationManager.confirmOfflinePayment(event, reservationId, eventAndUser.getRight());
var returnedAdditionalServices = ticketReservationManager.findTicketsInReservation(reservationId).stream().filter(ticket -> !checkInManager.getAdditionalServicesForTicket(ticket).isEmpty()).collect(Collectors.toList());
//
assertEquals(1, returnedAdditionalServices.size());
assertEquals((int) ticketRepository.findFirstTicketIdInReservation(reservationId).orElseThrow(), returnedAdditionalServices.get(0).getId());
}
use of alfio.repository.system.ConfigurationRepository in project alf.io by alfio-event.
the class WaitingQueueProcessorMultiThreadedIntegrationTest method testPreRegistration.
@Test
public void testPreRegistration() throws InterruptedException {
IntegrationTestUtil.ensureMinimalConfiguration(configurationRepository);
configurationManager.saveSystemConfiguration(ConfigurationKeys.ENABLE_PRE_REGISTRATION, "true");
configurationManager.saveSystemConfiguration(ConfigurationKeys.ENABLE_WAITING_QUEUE, "true");
initAdminUser(userRepository, authorityRepository);
Event event = null;
try {
List<TicketCategoryModification> categories = Collections.singletonList(new TicketCategoryModification(null, "default", TicketCategory.TicketAccessType.INHERIT, 10, new DateTimeModification(LocalDate.now(ClockProvider.clock()).plusDays(1), LocalTime.now(ClockProvider.clock())), new DateTimeModification(LocalDate.now(ClockProvider.clock()).plusDays(2), LocalTime.now(ClockProvider.clock())), DESCRIPTION, BigDecimal.TEN, false, "", false, null, null, null, null, null, 0, null, null, AlfioMetadata.empty()));
Pair<Event, String> pair = initEvent(categories, organizationRepository, userManager, eventManager, eventRepository);
event = pair.getKey();
waitingQueueManager.subscribe(event, new CustomerName("Giuseppe Garibaldi", "Giuseppe", "Garibaldi", event.mustUseFirstAndLastName()), "peppino@garibaldi.com", null, Locale.ENGLISH);
waitingQueueManager.subscribe(event, new CustomerName("Nino Bixio", "Nino", "Bixio", event.mustUseFirstAndLastName()), "bixio@mille.org", null, Locale.ITALIAN);
assertEquals(2, (int) waitingQueueRepository.countWaitingPeople(event.getId()));
final int parallelism = 10;
List<Callable<Void>> calls = new ArrayList<>(parallelism);
ExecutorService executor = Executors.newFixedThreadPool(parallelism);
final Event eventF = event;
for (int i = 0; i < parallelism; i++) {
calls.add(() -> {
waitingQueueSubscriptionProcessor.distributeAvailableSeats(eventF);
return null;
});
}
executor.invokeAll(calls);
executor.shutdown();
while (!executor.awaitTermination(10, TimeUnit.MILLISECONDS)) {
}
assertEquals(18, ticketRepository.findFreeByEventId(event.getId()).size());
TicketCategoryModification tcm = new TicketCategoryModification(null, "default", TicketCategory.TicketAccessType.INHERIT, 10, new DateTimeModification(LocalDate.now(ClockProvider.clock()).minusDays(1), LocalTime.now(ClockProvider.clock())), new DateTimeModification(LocalDate.now(ClockProvider.clock()).plusDays(5), LocalTime.now(ClockProvider.clock())), DESCRIPTION, BigDecimal.TEN, false, "", true, null, null, null, null, null, 0, null, null, AlfioMetadata.empty());
eventManager.insertCategory(event.getId(), tcm, pair.getValue());
// System.err.println("------------------------------------------------");
executor = Executors.newFixedThreadPool(parallelism);
calls.clear();
for (int i = 0; i < parallelism; i++) {
calls.add(() -> {
waitingQueueSubscriptionProcessor.distributeAvailableSeats(eventF);
return null;
});
}
executor.invokeAll(calls);
executor.shutdown();
while (!executor.awaitTermination(10, TimeUnit.MILLISECONDS)) {
}
List<WaitingQueueSubscription> subscriptions = waitingQueueRepository.loadAll(event.getId());
assertEquals(2, subscriptions.stream().filter(w -> StringUtils.isNotBlank(w.getReservationId())).count());
assertTrue(subscriptions.stream().allMatch(w -> w.getStatus().equals(WaitingQueueSubscription.Status.PENDING)));
assertTrue(subscriptions.stream().allMatch(w -> w.getSubscriptionType().equals(WaitingQueueSubscription.Type.PRE_SALES)));
} finally {
if (event != null) {
eventManager.deleteEvent(event.getId(), UserManager.ADMIN_USERNAME);
}
configurationManager.deleteKey(ConfigurationKeys.ENABLE_PRE_REGISTRATION.name());
configurationManager.deleteKey(ConfigurationKeys.ENABLE_WAITING_QUEUE.name());
removeAdminUser(userRepository, authorityRepository);
}
}
Aggregations