package io.lumify.sql.model.notification;
import io.lumify.core.model.notification.ExpirationAge;
import io.lumify.core.model.notification.ExpirationAgeUnit;
import io.lumify.core.model.notification.UserNotification;
import io.lumify.core.model.user.InMemoryUser;
import io.lumify.core.user.User;
import io.lumify.sql.model.HibernateSessionManager;
import io.lumify.web.clientapi.model.Privilege;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.JUnit4;
import java.util.List;
import static org.junit.Assert.assertEquals;
@RunWith(JUnit4.class)
public class SqlUserNotificationRepositoryTest {
private final String HIBERNATE_IN_MEM_CFG_XML = "hibernateInMem.cfg.xml";
private HibernateSessionManager sessionManager;
private SqlUserNotificationRepository sqlUserNotificationRepository;
@Before
public void setup() {
Configuration configuration = new Configuration();
configuration.configure(HIBERNATE_IN_MEM_CFG_XML);
ServiceRegistry serviceRegistryBuilder = new StandardServiceRegistryBuilder().applySettings(configuration.getProperties()).build();
sessionManager = new HibernateSessionManager(configuration.buildSessionFactory(serviceRegistryBuilder));
sqlUserNotificationRepository = new SqlUserNotificationRepository(sessionManager);
}
@After
public void teardown() {
sessionManager.clearSession();
}
@Test
public void testCreate() {
sqlUserNotificationRepository.createNotification("lumifyUser1", "title1", "message1", new ExpirationAge(1, ExpirationAgeUnit.HOUR));
sqlUserNotificationRepository.createNotification("lumifyUser2", "title2", "message2", new ExpirationAge(1, ExpirationAgeUnit.HOUR));
}
// TODO: @Test
public void testActive() throws InterruptedException {
User user = new InMemoryUser("lumifyUser3", "Lumify Three", "three@lumify.io", Privilege.stringToPrivileges("READ"), new String[]{}, "workspace3");
sqlUserNotificationRepository.createNotification(user.getUserId(), "title3a", "message3a", new ExpirationAge(1, ExpirationAgeUnit.SECOND));
sqlUserNotificationRepository.createNotification(user.getUserId(), "title3b", "message3b", new ExpirationAge(1, ExpirationAgeUnit.MINUTE));
sqlUserNotificationRepository.createNotification(user.getUserId(), "title3c", "message3c", new ExpirationAge(1, ExpirationAgeUnit.HOUR));
sqlUserNotificationRepository.createNotification("lumifyUser4", "title4", "message4", new ExpirationAge(1, ExpirationAgeUnit.DAY));
sqlUserNotificationRepository.createNotification("lumifyUser5", "title5", "message5", new ExpirationAge(1, ExpirationAgeUnit.DAY));
List<UserNotification> activeNotifications = sqlUserNotificationRepository.getActiveNotifications(user);
assertEquals(3, activeNotifications.size());
Thread.sleep(1000);
activeNotifications = sqlUserNotificationRepository.getActiveNotifications(user);
assertEquals(2, activeNotifications.size());
}
// TODO: @Test
public void testMarkRead() {
User user = new InMemoryUser("lumifyUser6", "Lumify Six", "six@lumify.io", Privilege.stringToPrivileges("READ"), new String[]{}, "workspace6");
UserNotification notification = sqlUserNotificationRepository.createNotification(user.getUserId(), "title6", "message6", new ExpirationAge(1, ExpirationAgeUnit.SECOND));
sqlUserNotificationRepository.markRead(notification.getId(), user);
}
}