use of alfio.model.poll.Poll in project alf.io by alfio-event.
the class PollAdminApiControllerTest method allowPeopleToVote.
@Test
void allowPeopleToVote() {
var options = List.of(new PollOptionModification(null, Map.of("en", "Homer J. Simpson"), null), new PollOptionModification(null, Map.of("en", "Bender B. Rodriguez"), Map.of()));
// this must not have an impact
var form = new PollModification(null, Map.of("en", "Best Employee of the Year"), null, null, options, true, Poll.PollStatus.OPEN);
var eventName = event.getShortName();
var createResponse = controller.createNewPoll(eventName, form);
assertTrue(createResponse.getStatusCode().is2xxSuccessful());
assertNotNull(createResponse.getBody());
var pollId = createResponse.getBody();
var reservationId = UUID.randomUUID().toString();
ticketReservationRepository.createNewReservation(reservationId, ZonedDateTime.now(event.getZoneId()), DateUtils.addMinutes(new Date(), 1), null, "en", event.getId(), null, null, null, event.getOrganizationId(), null);
var firstCategory = CollectionUtils.get(ticketCategoryRepository.findByEventIdAsMap(event.getId()), 0);
int categoryId = firstCategory.getKey();
var tickets = ticketRepository.findFreeByEventId(event.getId());
var firstTicket = tickets.get(0);
int ticketId = firstTicket.getId();
ticketRepository.reserveTickets(reservationId, List.of(ticketId), firstCategory.getValue(), "en", event.getVatStatus(), i -> null);
ticketReservationRepository.updateReservationStatus(reservationId, TicketReservation.TicketReservationStatus.COMPLETE.name());
ticketRepository.updateTicketOwner(firstTicket.getUuid(), "test@test.ch", "First Last", "First", "Last");
ticketRepository.updateTicketsStatusWithReservationId(reservationId, Ticket.TicketStatus.ACQUIRED.name());
// find compatible tickets
var res = controller.findAdditionalAttendees(event.getShortName(), pollId, "First");
assertTrue(res.getStatusCode().is2xxSuccessful());
assertTrue(CollectionUtils.isNotEmpty(res.getBody()));
assertEquals(1, res.getBody().size());
assertEquals(firstTicket.getId(), res.getBody().get(0).getId());
// allow tickets to vote
var poll = pollRepository.findSingleForEvent(event.getId(), pollId).orElseThrow();
assertNotNull(poll);
var participantForm = new PollAdminApiController.UpdateParticipantsForm(List.of(ticketId));
var allowRes = controller.allowAttendees(event.getShortName(), pollId, participantForm);
assertTrue(allowRes.getStatusCode().is2xxSuccessful());
assertEquals(1, auditingRepository.countAuditsOfTypeForReservation(reservationId, Audit.EventType.TAG_TICKET));
assertEquals(0, auditingRepository.countAuditsOfTypeForReservation(reservationId, Audit.EventType.UNTAG_TICKET));
var participantRes = controller.getAllowedAttendees(eventName, pollId);
assertTrue(participantRes.getStatusCode().is2xxSuccessful());
assertTrue(CollectionUtils.isNotEmpty(participantRes.getBody()));
assertEquals(1, participantRes.getBody().size());
assertEquals(firstTicket.getId(), participantRes.getBody().get(0).getId());
// now ticket should not be returned anymore
res = controller.findAdditionalAttendees(event.getShortName(), pollId, "First");
assertTrue(res.getStatusCode().is2xxSuccessful());
assertTrue(CollectionUtils.isEmpty(res.getBody()));
// get statistics
var statsRes = controller.getStatisticsForEvent(event.getShortName(), pollId);
assertTrue(statsRes.getStatusCode().is2xxSuccessful());
assertNotNull(statsRes.getBody());
assertTrue(CollectionUtils.isEmpty(statsRes.getBody().getOptionStatistics()));
assertEquals("0", statsRes.getBody().getParticipationPercentage());
// forbid access to attendee
var forbidRes = controller.forbidAttendees(event.getShortName(), pollId, participantForm);
assertTrue(forbidRes.getStatusCode().is2xxSuccessful());
assertTrue(CollectionUtils.isEmpty(forbidRes.getBody()));
assertEquals(1, auditingRepository.countAuditsOfTypeForReservation(reservationId, Audit.EventType.TAG_TICKET));
assertEquals(1, auditingRepository.countAuditsOfTypeForReservation(reservationId, Audit.EventType.UNTAG_TICKET));
// remove option
var pollWithOptions = controller.getPollDetail(event.getShortName(), pollId).getBody();
assertNotNull(pollWithOptions);
var firstOptionId = pollWithOptions.getOptions().get(0).getId();
var removeOptionResponse = controller.removeOption(event.getShortName(), pollId, firstOptionId);
assertTrue(removeOptionResponse.getStatusCode().is2xxSuccessful());
assertTrue(Objects.requireNonNull(removeOptionResponse.getBody()).getOptions().stream().noneMatch(po -> firstOptionId.equals(po.getId())));
// delete poll
var deletePollResponse = controller.deletePoll(eventName, pollId);
assertTrue(deletePollResponse.getStatusCode().is2xxSuccessful());
assertNotNull(deletePollResponse.getBody());
assertTrue(deletePollResponse.getBody());
}
Aggregations