package org.dayatang.observer.domain; import org.dayatang.domain.AbstractEntity; import org.dayatang.domain.InstanceFactory; import org.dayatang.observer.HibernateUtils; import org.dayatang.persistence.hibernate.EntityRepositoryHibernate; import org.dayatang.persistence.hibernate.SessionProvider; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.Transaction; import org.junit.*; import java.util.Collections; import java.util.HashSet; import java.util.Set; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; public class ObserverTest { private static SessionFactory sessionFactory; private Session session; private Transaction tx; private static EntityRepositoryHibernate repository; private MotherObserver observer_1; private FatherObserver observer_2; @BeforeClass public static void setUpClass() throws Exception { sessionFactory = HibernateUtils.getSessionFactory(); InstanceFactory.bind(SessionFactory.class, sessionFactory); } @AfterClass public static void tearDownClass() { sessionFactory.close(); } @Before public void setUp() { SessionProvider sessionProvider = new SessionProvider(sessionFactory); session = sessionProvider.getSession(); tx = session.beginTransaction(); repository = new EntityRepositoryHibernate(sessionFactory); AbstractEntity.setRepository(repository); observer_1 = createMotherObserver(false); observer_1.setSubjectKeys(Collections.singleton("BABY-SUBJECT")); observer_2 = createFatherObserver(false); observer_2.setSubjectKeys(Collections.singleton("BABY-SUBJECT")); } @After public void tearDown() { tx.rollback(); if (session.isOpen()) { session.close(); } AbstractEntity.setRepository(null); } private FatherObserver createFatherObserver(boolean startCar) { FatherObserver result = new FatherObserver(); result.setStartCar(startCar); result.save(); return result; } private MotherObserver createMotherObserver(boolean buyFood) { MotherObserver result = new MotherObserver(); result.setBuyFood(buyFood); result.save(); return result; } @Test public void process() { Baby baby = new Baby(); baby.cry(); //MotherObserver observer_1 = (MotherObserver) Observer.get(1L); assertTrue(observer_1.getBuyFood()); //FatherObserver observer_2 = (FatherObserver) Observer.get(2L); assertTrue(observer_2.getStartCar()); } @Test public void getKeys() { //MotherObserver observer_1 = (MotherObserver) Observer.get(1L); Set<String> keys = observer_1.getSubjectKeys(); assertEquals("BABY-SUBJECT", keys.iterator().next()); keys = new HashSet<String>(); keys.add("1"); observer_1.setSubjectKeys(keys); observer_1.save(); keys = observer_1.getSubjectKeys(); assertEquals("1", keys.iterator().next()); } }