package org.springmodules.jcr.mapping; import java.util.ArrayList; import java.util.List; import javax.jcr.RepositoryException; import javax.jcr.Session; import javax.jcr.ValueFactory; import junit.framework.TestCase; import org.apache.portals.graffito.jcr.exception.JcrMappingException; import org.apache.portals.graffito.jcr.mapper.Mapper; import org.apache.portals.graffito.jcr.persistence.PersistenceManager; import org.apache.portals.graffito.jcr.query.Query; import org.easymock.MockControl; import org.springmodules.jcr.JcrSystemException; import org.springmodules.jcr.SessionFactory; public class JcrMappingTemplateTests extends TestCase { private JcrMappingTemplate template; MockControl factoryCtrl; SessionFactory factory; MockControl sessionCtrl; Session session; MockControl valueFactoryCtrl; ValueFactory valueFactory; MockControl managerCtrl; PersistenceManager manager; MockControl mapperCtrl; Mapper mapper; protected void setUp() throws Exception { super.setUp(); factoryCtrl = MockControl.createControl(SessionFactory.class); factory = (SessionFactory) factoryCtrl.getMock(); sessionCtrl = MockControl.createControl(Session.class); session = (Session) sessionCtrl.getMock(); valueFactoryCtrl = MockControl.createControl(ValueFactory.class); valueFactory = (ValueFactory) valueFactoryCtrl.getMock(); managerCtrl = MockControl.createControl(PersistenceManager.class); manager = (PersistenceManager) managerCtrl.getMock(); mapperCtrl = MockControl.createControl(Mapper.class); mapper = (Mapper) mapperCtrl.getMock(); // add the mock for testing template = new JcrMappingTemplate(factory, mapper) { /** * @see org.springmodules.jcr.mapping.JcrMappingTemplate#createPersistenceManager(javax.jcr.Session) */ protected PersistenceManager createPersistenceManager(Session session) throws RepositoryException, JcrMappingException { return manager; } }; } protected void tearDown() throws Exception { super.tearDown(); try { factoryCtrl.verify(); sessionCtrl.verify(); valueFactoryCtrl.verify(); managerCtrl.verify(); mapperCtrl.verify(); } catch (IllegalStateException e) { } } public void testAfterPropertiesSet() throws Exception { template.setMapper((Mapper) null); try { template.afterPropertiesSet(); } catch (IllegalArgumentException e) { // it's okay } } /* * Test method for 'org.springmodules.jcr.mapping.JcrMappingTemplate.execute(JcrMappingCallback, boolean)' */ public void testExecuteJcrMappingCallbackBoolean() throws Exception { template.setAllowCreate(true); factoryCtrl.expectAndReturn(factory.getSession(), session); session.logout(); factoryCtrl.replay(); sessionCtrl.replay(); valueFactoryCtrl.replay(); template.execute(new JcrMappingCallback() { public Object doInJcrMapping(PersistenceManager manager) throws JcrMappingException { assertNotNull("persistenceManager is null", manager); return null; } }); } /* * Test method for 'org.springmodules.jcr.mapping.JcrMappingTemplate.insert(String, Object)' */ public void testInsert() throws Exception { template.setAllowCreate(true); factoryCtrl.expectAndReturn(factory.getSession(), session); session.logout(); final String path = new String("some string"); final Object obj = new Object(); manager.insert(path, obj); managerCtrl.replay(); factoryCtrl.replay(); sessionCtrl.replay(); valueFactoryCtrl.replay(); template.insert(path, obj); } /* * Test method for 'org.springmodules.jcr.mapping.JcrMappingTemplate.update(String, Object)' */ public void testUpdate() throws Exception { template.setAllowCreate(true); factoryCtrl.expectAndReturn(factory.getSession(), session); session.logout(); final String path = new String("some string"); final Object obj = new Object(); manager.update(path, obj); managerCtrl.replay(); factoryCtrl.replay(); sessionCtrl.replay(); valueFactoryCtrl.replay(); template.update(path, obj); } /* * Test method for 'org.springmodules.jcr.mapping.JcrMappingTemplate.remove(String)' */ public void testRemove() throws Exception { template.setAllowCreate(true); factoryCtrl.expectAndReturn(factory.getSession(), session); session.logout(); final String path = new String("some string"); final Object obj = new Object(); manager.remove(path); managerCtrl.replay(); factoryCtrl.replay(); sessionCtrl.replay(); valueFactoryCtrl.replay(); template.remove(path); } /* * Test method for 'org.springmodules.jcr.mapping.JcrMappingTemplate.getObject(Class, String)' */ public void testGetObject() throws Exception { template.setAllowCreate(true); factoryCtrl.expectAndReturn(factory.getSession(), session); session.logout(); final Object obj = new Object(); final String path = new String("some string"); final Class clazz = obj.getClass(); managerCtrl.expectAndReturn(manager.getObject(clazz, path), obj); managerCtrl.replay(); factoryCtrl.replay(); sessionCtrl.replay(); valueFactoryCtrl.replay(); assertSame("not the same object", obj, template.getObject(clazz, path)); } /* * Test method for 'org.springmodules.jcr.mapping.JcrMappingTemplate.getObjects(Query)' */ public void testGetObjects() throws Exception { template.setAllowCreate(true); factoryCtrl.expectAndReturn(factory.getSession(), session); session.logout(); final List list = new ArrayList(); MockControl queryCtrl = MockControl.createControl(Query.class); Query query = (Query) queryCtrl.getMock(); managerCtrl.expectAndReturn(manager.getObjects(query), list); managerCtrl.replay(); factoryCtrl.replay(); sessionCtrl.replay(); valueFactoryCtrl.replay(); assertSame("not the same collection", list, template.getObjects(query)); } /* * Test method for 'org.springmodules.jcr.mapping.JcrMappingTemplate.convertMappingAccessException(Exception)' */ public void testConvertMappingAccessException() throws Exception { template.setAllowCreate(true); try { createTemplate().execute(new JcrMappingCallback() { public Object doInJcrMapping(PersistenceManager manager) throws JcrMappingException { throw new JcrMappingException("some jcr mapping exception"); } }); fail("Should have thrown JcrSystemException"); } catch (JcrSystemException e) { // expected } } private JcrMappingOperations createTemplate() throws Exception { factoryCtrl.reset(); factoryCtrl.expectAndReturn(factory.getSession(), session); sessionCtrl.expectAndReturn(session.getValueFactory(), valueFactory, 14); session.logout(); JcrMappingTemplate mappingTemplate = new JcrMappingTemplate(factory, mapper); mappingTemplate.setAllowCreate(true); sessionCtrl.replay(); mapperCtrl.replay(); factoryCtrl.replay(); return mappingTemplate; } }