Package in.partake.daemon.impl

Source Code of in.partake.daemon.impl.SendParticipationStatusChangeNotificationTaskTest

package in.partake.daemon.impl;

import static org.hamcrest.Matchers.is;
import static org.junit.Assert.assertThat;
import in.partake.app.PartakeTestApp;
import in.partake.base.DateTime;
import in.partake.base.PartakeException;
import in.partake.base.TimeUtil;
import in.partake.controller.AbstractPartakeControllerTest;
import in.partake.model.IPartakeDAOs;
import in.partake.model.access.Transaction;
import in.partake.model.dao.DAOException;
import in.partake.model.dao.PartakeConnection;
import in.partake.model.dto.UserTicket;
import in.partake.model.dto.Event;
import in.partake.model.dto.EventTicket;
import in.partake.model.dto.UserNotification;
import in.partake.model.dto.auxiliary.AttendanceStatus;
import in.partake.model.dto.auxiliary.MessageDelivery;
import in.partake.model.dto.auxiliary.ModificationStatus;
import in.partake.model.dto.auxiliary.NotificationType;
import in.partake.model.dto.auxiliary.ParticipationStatus;
import in.partake.model.dto.auxiliary.TicketAmountType;
import in.partake.model.fixture.TestDataProviderConstants;
import java.util.List;
import java.util.UUID;

import org.junit.Before;
import org.junit.Test;

public class SendParticipationStatusChangeNotificationTaskTest extends AbstractPartakeControllerTest implements TestDataProviderConstants {
    @Before
    public void setUp() throws Exception {
        super.setUp();

        PartakeTestApp.getTestService().setDefaultFixtures();
    }

    @Test
    public void testSendEmpty() throws Exception {
        truncate();
        new SendParticipationStatusChangeNotificationsTask().run();
    }

    @Test
    public void testChangedToEnrolled() throws Exception {
        truncate();

        DateTime now = TimeUtil.getCurrentDateTime();

        Event event = PartakeTestApp.getTestService().getTestDataProviderSet().getEventProvider().create();
        event.setOwnerId(EVENT_OWNER_ID);
        event.setBeginDate(now.nHourAfter(48));
        storeEvent(event);

        UUID ticketId = UUID.randomUUID();
        EventTicket ticket = EventTicket.createDefaultTicket(ticketId, event.getId());
        storeEventTicket(ticket);

        String[] enrollmentIds = new String[] { UUID.randomUUID().toString(), UUID.randomUUID().toString(), UUID.randomUUID().toString(), };

        UserTicket[] enrollments = new UserTicket[] {
                new UserTicket(enrollmentIds[0], DEFAULT_USER_IDS[0], ticketId, event.getId(), "comment", ParticipationStatus.ENROLLED,
                        ModificationStatus.NOT_ENROLLED, AttendanceStatus.PRESENT, null, now, now, null),
                new UserTicket(enrollmentIds[1], DEFAULT_USER_IDS[1], ticketId, event.getId(), "comment", ParticipationStatus.RESERVED,
                        ModificationStatus.NOT_ENROLLED, AttendanceStatus.PRESENT, null, now, now, null),
                new UserTicket(enrollmentIds[2], DEFAULT_USER_IDS[2], ticketId, event.getId(), "comment", ParticipationStatus.ENROLLED,
                        ModificationStatus.CHANGED, AttendanceStatus.PRESENT, null, now, now, null)
        };

        for (UserTicket enrollment : enrollments)
            storeEnrollment(enrollment);
        new SendParticipationStatusChangeNotificationsTask().run();

        // The status should be changed to ENROLLED
        UserTicket[] changed = new UserTicket[] {
                loadEnrollment(enrollmentIds[0]), loadEnrollment(enrollmentIds[1]), loadEnrollment(enrollmentIds[2]),
        };
        assertThat(changed[0].getModificationStatus(), is(ModificationStatus.ENROLLED));
        assertThat(changed[1].getModificationStatus(), is(ModificationStatus.ENROLLED));
        assertThat(changed[2].getModificationStatus(), is(ModificationStatus.ENROLLED));

        // The user should received notification.
        {
            List<UserNotification> notifications = loadUserNotificationsByUserId(DEFAULT_USER_IDS[0]);
            assertThat(notifications.size(), is(1));
            assertThat(notifications.get(0).getTicketId(), is(ticket.getId()));
            assertThat(notifications.get(0).getNotificationType(), is(NotificationType.BECAME_TO_BE_ENROLLED));
            assertThat(notifications.get(0).getDelivery(), is(MessageDelivery.INQUEUE));
        }
        {
            List<UserNotification> notifications = loadUserNotificationsByUserId(DEFAULT_USER_IDS[1]);
            assertThat(notifications.size(), is(1));
            assertThat(notifications.get(0).getTicketId(), is(ticket.getId()));
            assertThat(notifications.get(0).getNotificationType(), is(NotificationType.BECAME_TO_BE_ENROLLED));
            assertThat(notifications.get(0).getDelivery(), is(MessageDelivery.INQUEUE));
        }
        {
            List<UserNotification> notifications = loadUserNotificationsByUserId(DEFAULT_USER_IDS[2]);
            assertThat(notifications.size(), is(0));
        }
    }

    @Test
    public void testChangedToCancelled() throws Exception {
        truncate();

        DateTime now = TimeUtil.getCurrentDateTime();

        Event event = PartakeTestApp.getTestService().getTestDataProviderSet().getEventProvider().create();
        event.setOwnerId(EVENT_OWNER_ID);
        event.setBeginDate(now.nHourAfter(48));
        storeEvent(event);

        UUID ticketId = UUID.randomUUID();
        EventTicket ticket = EventTicket.createDefaultTicket(ticketId, event.getId());
        ticket.setAmount(1);
        ticket.setAmountType(TicketAmountType.LIMITED);
        storeEventTicket(ticket);

        String[] enrollmentIds = new String[] {
                UUID.randomUUID().toString(), UUID.randomUUID().toString(), UUID.randomUUID().toString(), UUID.randomUUID().toString(),
        };

        UserTicket[] enrollments = new UserTicket[] {
                new UserTicket(enrollmentIds[0], DEFAULT_USER_IDS[0], ticketId, event.getId(), "comment", ParticipationStatus.ENROLLED,
                        ModificationStatus.ENROLLED, AttendanceStatus.PRESENT, null, now, now, null),
                new UserTicket(enrollmentIds[1], DEFAULT_USER_IDS[1], ticketId, event.getId(), "comment", ParticipationStatus.RESERVED,
                        ModificationStatus.ENROLLED, AttendanceStatus.PRESENT, null, new DateTime(now.getTime() + 1), now, null),
                new UserTicket(enrollmentIds[2], DEFAULT_USER_IDS[2], ticketId, event.getId(), "comment", ParticipationStatus.ENROLLED,
                        ModificationStatus.ENROLLED, AttendanceStatus.PRESENT, null, new DateTime(now.getTime() + 2), now, null),
                new UserTicket(enrollmentIds[3], DEFAULT_USER_IDS[3], ticketId, event.getId(), "comment", ParticipationStatus.ENROLLED,
                        ModificationStatus.CHANGED, AttendanceStatus.PRESENT, null, new DateTime(now.getTime() + 3), now, null)
        };

        for (UserTicket enrollment : enrollments)
            storeEnrollment(enrollment);
        new SendParticipationStatusChangeNotificationsTask().run();

        // The status should be changed to NOT_ENROLLED.
        // Only the first person can enroll.
        UserTicket[] changed = new UserTicket[] {
                loadEnrollment(enrollmentIds[0]), loadEnrollment(enrollmentIds[1]), loadEnrollment(enrollmentIds[2]), loadEnrollment(enrollmentIds[3]),
        };
        assertThat(changed[0].getModificationStatus(), is(ModificationStatus.ENROLLED));
        assertThat(changed[1].getModificationStatus(), is(ModificationStatus.NOT_ENROLLED));
        assertThat(changed[2].getModificationStatus(), is(ModificationStatus.NOT_ENROLLED));
        assertThat(changed[3].getModificationStatus(), is(ModificationStatus.NOT_ENROLLED));

        // The user should received notification.
        {
            List<UserNotification> notifications = loadUserNotificationsByUserId(DEFAULT_USER_IDS[0]);
            assertThat(notifications.size(), is(0));
        }
        {
            List<UserNotification> notifications = loadUserNotificationsByUserId(DEFAULT_USER_IDS[1]);
            assertThat(notifications.size(), is(1));
            assertThat(notifications.get(0).getTicketId(), is(ticket.getId()));
            assertThat(notifications.get(0).getNotificationType(), is(NotificationType.BECAME_TO_BE_CANCELLED));
            assertThat(notifications.get(0).getDelivery(), is(MessageDelivery.INQUEUE));
        }
        {
            List<UserNotification> notifications = loadUserNotificationsByUserId(DEFAULT_USER_IDS[2]);
            assertThat(notifications.size(), is(1));
            assertThat(notifications.get(0).getTicketId(), is(ticket.getId()));
            assertThat(notifications.get(0).getNotificationType(), is(NotificationType.BECAME_TO_BE_CANCELLED));
            assertThat(notifications.get(0).getDelivery(), is(MessageDelivery.INQUEUE));
        }
        {
            List<UserNotification> notifications = loadUserNotificationsByUserId(DEFAULT_USER_IDS[3]);
            assertThat(notifications.size(), is(0));
        }
    }

    private void truncate() throws Exception {
        new Transaction<Void>() {
            @Override
            protected Void doExecute(PartakeConnection con, IPartakeDAOs daos) throws DAOException, PartakeException {
                daos.getEventAccess().truncate(con);
                daos.getEnrollmentAccess().truncate(con);
                daos.getUserNotificationAccess().truncate(con);
                daos.getUserNotificationAccess().truncate(con);
                return null;
            }
        }.execute();
    }
}
TOP

Related Classes of in.partake.daemon.impl.SendParticipationStatusChangeNotificationTaskTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.