package uk.ac.ebi.fg.myequivalents.utils; import javax.persistence.EntityManager; import javax.persistence.EntityTransaction; import org.junit.Assert; import org.junit.Rule; import org.junit.Test; import uk.ac.ebi.fg.myequivalents.dao.ServiceDAO; import uk.ac.ebi.fg.myequivalents.managers.impl.db.DbManagerFactory; import uk.ac.ebi.fg.myequivalents.managers.interfaces.ManagerFactory; import uk.ac.ebi.fg.myequivalents.model.EntityId; import uk.ac.ebi.fg.myequivalents.model.Service; import uk.ac.ebi.fg.myequivalents.resources.Resources; import uk.ac.ebi.utils.test.junit.TestEntityMgrProvider; /** * Tests the DB-related functionality for the entity resolver {@link DbEntityIdResolver}. * * @author brandizi * <dl><dt>Date:</dt><dd>5 Jun 2015</dd> * */ public class DbEntityIdResolverTest { /** Normally you cast this to {@link ManagerFactory}, here we force the specific value cause we need it and we're sure of it*/ private DbManagerFactory managerFactory = (DbManagerFactory) Resources.getInstance ().getMyEqManagerFactory (); @Rule public TestEntityMgrProvider emProvider = new TestEntityMgrProvider ( managerFactory.getEntityManagerFactory () ); @Test public void testResolveUri () { String uriDom = "http://www.somewhere.net"; String uriPrefx = uriDom + "/path/to/"; String acc = "FOO_123"; String uri = uriPrefx + acc; Service s = new Service ( "test.eidresolver.service1" ); s.setUriPattern ( uriPrefx + "$id" ); String uriDom2 = "http://www.somewhere.else.net/"; String uriPat2 = uriDom2 + "$id?version=last&acc=$id"; Service s2 = new Service ( "test.eidresolver.service2" ); s2.setUriPattern ( uriPat2 ); EntityManager em = emProvider.getEntityManager (); ServiceDAO servDao = new ServiceDAO ( em ); EntityTransaction tx = em.getTransaction (); try { tx.begin (); servDao.store ( s ); servDao.store ( s2 ); tx.commit (); em = emProvider.newEntityManager (); DbEntityIdResolver resolver = new DbEntityIdResolver ( em ); EntityId eid = resolver.resolveUri ( null, null, uri ); Assert.assertNotNull ( "null result from ID resolver!", eid ); Assert.assertEquals ( "Wrong service returned!", s.getName (), eid.getServiceName () ); Assert.assertEquals ( "Wrong URI returned!", uri, eid.getUri () ); Assert.assertEquals ( "Wrong acc returned!", acc, eid.getAcc () ); eid = resolver.resolveUri ( null, acc, uri ); Assert.assertNotNull ( "null result from ID resolver!", eid ); Assert.assertEquals ( "Wrong service returned!", s.getName (), eid.getServiceName () ); Assert.assertEquals ( "Wrong URI returned!", uri, eid.getUri () ); Assert.assertEquals ( "Wrong acc returned!", acc, eid.getAcc () ); eid = resolver.resolveUri ( s.getName (), acc, uri ); Assert.assertNotNull ( "null result from ID resolver!", eid ); Assert.assertEquals ( "Wrong service returned!", s.getName (), eid.getServiceName () ); Assert.assertEquals ( "Wrong URI returned!", uri, eid.getUri () ); Assert.assertEquals ( "Wrong acc returned!", acc, eid.getAcc () ); // Now try with domain search instead String uri2 = EntityIdResolver.buildUriFromAcc ( acc, uriPat2 ); eid = resolver.resolveUri ( null, null, uri2 ); Assert.assertNotNull ( "null result from ID resolver!", eid ); Assert.assertEquals ( "Wrong service returned!", s2.getName (), eid.getServiceName () ); Assert.assertEquals ( "Wrong URI returned!", uri2, eid.getUri () ); Assert.assertEquals ( "Wrong acc returned!", acc, eid.getAcc () ); } finally { servDao.setEntityManager ( em ); tx = em.getTransaction (); tx.begin (); servDao.delete ( s ); servDao.delete ( s2 ); tx.commit (); } } }