/*
* Copyright 2006 University of Dundee. All rights reserved.
* Use is subject to license terms supplied in LICENSE.txt
*/
package ome.server.utests;
import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.List;
import org.hibernate.Criteria;
import org.hibernate.SessionFactory;
import org.hibernate.classic.Session;
import org.jmock.Mock;
import org.jmock.MockObjectTestCase;
import org.springframework.aop.framework.ProxyFactory;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
import ome.api.IQuery;
import ome.conditions.ApiUsageException;
import ome.logic.QueryImpl;
import ome.model.IObject;
import ome.model.containers.Project;
import ome.parameters.Filter;
import ome.security.basic.CurrentDetails;
import ome.server.itests.LoginInterceptor;
import ome.services.util.ServiceHandler;
import ome.system.Principal;
/**
* @author Josh Moore <a
* href="mailto:josh.moore@gmx.de">josh.moore@gmx.de</a>
* @since Omero 2.0
*/
public class IQueryMockSessionTest extends MockObjectTestCase {
protected IQuery iQuery;
protected QueryImpl impl;
protected Mock mockSession, mockFactory;
@Override
@BeforeMethod(alwaysRun=true)
protected void setUp() throws Exception {
super.setUp();
impl = new QueryImpl();
createMocks();
ProxyFactory pf = new ProxyFactory(impl);
CurrentDetails holder = new CurrentDetails(new TestSessionCache(this));
LoginInterceptor login = new LoginInterceptor(holder);
ServiceHandler serviceHandler = new ServiceHandler(holder);
pf.addAdvice(login);
pf.addAdvice(serviceHandler);
login.p = new Principal("user","user","Test");
iQuery = (IQuery) pf.getProxy();
}
@Override
@AfterMethod(alwaysRun=true)
protected void tearDown() throws Exception {
super.verify();
super.tearDown();
}
protected void createMocks() {
mockSession = mock(Session.class);
mockFactory = mock(SessionFactory.class);
impl.setSessionFactory((SessionFactory) mockFactory.proxy());
ome.model.meta.Session session = new ome.model.meta.Session();
session.setStarted(new Timestamp(System.currentTimeMillis()));
session.setTimeToLive(0L);
session.setTimeToIdle(60000L);
}
protected void loadsSession() {
mockFactory.expects(atLeastOnce()).method("getCurrentSession").will(
returnValue(mockSession.proxy()));
}
protected Mock criteriaUniqueResultCall(Object obj) {
Mock mockCriteria = mock(Criteria.class);
mockCriteria.expects(once()).method("uniqueResult").will(
returnValue(obj));
return mockCriteria;
}
protected Mock criteriaListCall(List blank) {
Mock mockCriteria = mock(Criteria.class);
mockCriteria.expects(once()).method("list").will(returnValue(blank));
return mockCriteria;
}
@Test
public void test_get() throws Exception {
loadsSession();
mockSession.expects(once()).method("load").id("test");
iQuery.get(IObject.class, 1L);
}
@Test(expectedExceptions = ApiUsageException.class)
public void test_get_nulls() throws Exception {
iQuery.get(null, 1L);
}
@Test
public void test_find() throws Exception {
loadsSession();
mockSession.expects(once()).method("get");
iQuery.find(IObject.class, 1L);
}
@Test(expectedExceptions = ApiUsageException.class)
public void test_find_nulls() throws Exception {
iQuery.find(null, 1L);
}
@Test
public void test_findAll_nullfilter() {
loadsSession();
List blank = new ArrayList();
Mock mockCriteria = criteriaListCall(blank);
mockCriteria.expects(once()).method("setResultTransformer");
mockSession.expects(once()).method("createCriteria").will(
returnValue(mockCriteria.proxy())).id("test");
List retVal = iQuery.findAll(Project.class, null);
assertTrue(retVal == blank);
}
@Test
public void test_findAll_realfilter() {
loadsSession();
Filter filter = new Filter();
filter.page(1, 10);
List blank = new ArrayList();
Mock mockCriteria = criteriaListCall(blank);
mockCriteria.expects(once()).method("setFirstResult");
mockCriteria.expects(once()).method("setMaxResults");
mockCriteria.expects(once()).method("setResultTransformer");
mockSession.expects(once()).method("createCriteria").will(
returnValue(mockCriteria.proxy())).id("test");
List retVal = iQuery.findAll(Project.class, filter);
assertTrue(retVal == blank);
}
@Test(expectedExceptions = ApiUsageException.class)
public void test_findByExample_null() throws Exception {
iQuery.findByExample(null);
}
@Test
public void test_findByExample() throws Exception {
loadsSession();
Project test = new Project();
Project dummy = new Project();
Mock mockCriteria = criteriaUniqueResultCall(dummy);
mockCriteria.expects(once()).method("add");
mockSession.expects(once()).method("createCriteria").will(
returnValue(mockCriteria.proxy())).id("test");
Object retVal = iQuery.findByExample(test);
assertTrue(retVal == dummy);
}
@Test(expectedExceptions = ApiUsageException.class)
public void test_findAllByExample_null() throws Exception {
iQuery.findAllByExample(null, null);
}
@Test(expectedExceptions = ApiUsageException.class)
public void test_findAllByExample_null2() throws Exception {
iQuery.findAllByExample(null, new Filter());
}
@Test
public void test_findAllByExample() throws Exception {
loadsSession();
Project test = new Project();
List blank = new ArrayList();
Mock mockCriteria = criteriaListCall(blank);
mockCriteria.expects(once()).method("add");
mockCriteria.expects(once()).method("setFirstResult");
mockCriteria.expects(once()).method("setMaxResults");
mockSession.expects(once()).method("createCriteria").will(
returnValue(mockCriteria.proxy())).id("test");
Object retVal = iQuery.findAllByExample(test, null);
assertTrue(retVal == blank);
}
@Test
public void test_findAllByExample_filter() throws Exception {
loadsSession();
Project test = new Project();
List blank = new ArrayList();
Mock mockCriteria = criteriaListCall(blank);
mockCriteria.expects(once()).method("add");
mockCriteria.expects(once()).method("setFirstResult");
mockCriteria.expects(once()).method("setMaxResults");
mockSession.expects(once()).method("createCriteria").will(
returnValue(mockCriteria.proxy())).id("test");
Object retVal = iQuery.findAllByExample(test, new Filter().page(1, 10));
assertTrue(retVal == blank);
}
}