Package com.tll.listhandler

Source Code of com.tll.listhandler.PagingSearchListHandlerTest$TestEntityService

/**
* The Logic Lab
* @author jpk Sep 6, 2007
*/
package com.tll.listhandler;

import java.util.List;
import java.util.Set;

import javax.validation.ValidatorFactory;

import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.transaction.annotation.Transactional;
import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;

import com.google.inject.Binder;
import com.google.inject.Inject;
import com.google.inject.Injector;
import com.google.inject.Key;
import com.google.inject.Module;
import com.google.inject.Scopes;
import com.google.inject.TypeLiteral;
import com.tll.config.Config;
import com.tll.criteria.Criteria;
import com.tll.dao.AbstractDbAwareTest;
import com.tll.dao.IDbShell;
import com.tll.dao.IDbTrans;
import com.tll.dao.IEntityDao;
import com.tll.dao.SearchResult;
import com.tll.dao.SortColumn;
import com.tll.dao.Sorting;
import com.tll.dao.db4o.test.Db4oTrans;
import com.tll.di.Db4oDaoModule;
import com.tll.di.test.Db4oDbShellModule;
import com.tll.di.test.TestDb4oDaoModule;
import com.tll.di.test.TestPersistenceUnitModelModule;
import com.tll.model.IEntityAssembler;
import com.tll.model.test.Address;
import com.tll.model.test.EntityBeanFactory;
import com.tll.service.entity.EntityService;
import com.tll.service.entity.IEntityService;

/**
* PagingSearchListHandlerTest
* @author jpk
*/
@Test(groups = "listhandler")
public class PagingSearchListHandlerTest extends AbstractDbAwareTest {

  /**
   * TestEntityService
   * @author jpk
   */
  @Transactional
  static final class TestEntityService extends EntityService<Address> {

    /**
     * Constructor
     * @param dao
     * @param entityAssembler
     * @param vfactory
     */
    @Inject
    public TestEntityService(IEntityDao dao, IEntityAssembler entityAssembler, ValidatorFactory vfactory) {
      super(dao, entityAssembler, vfactory);
    }

    @Override
    public Class<Address> getEntityClass() {
      return Address.class;
    }
  }

  /**
   * The number of listing elements for which to test.
   */
  private static final int NUM_LIST_ELEMENTS = 100;

  @BeforeClass(alwaysRun = true)
  public void onBeforeClass() {
    beforeClass();
  }

  @AfterClass(alwaysRun = true)
  public void onAfterClass() {
    afterClass();
  }

  @Override
  protected void beforeClass() {
    // create the db shell first (before test injector creation) to avoid db4o
    // file lock when objectcontainer is instantiated
    final Config cfg = getConfig();
    cfg.setProperty(Db4oDaoModule.ConfigKeys.DB4O_EMPLOY_SPRING_TRANSACTIONS.getKey(), false);
    final Injector i = buildInjector(new TestDb4oDaoModule(cfg), new Db4oDbShellModule() );
    final IDbShell dbs = i.getInstance(IDbShell.class);
    dbs.delete();
    dbs.create();

    cfg.setProperty(Db4oDaoModule.ConfigKeys.DB4O_EMPLOY_SPRING_TRANSACTIONS.getKey(), true);
    super.beforeClass();
    injector.getInstance(PlatformTransactionManager.class)// bind @Transactional
  }

  @Override
  protected void addModules(List<Module> modules) {
    super.addModules(modules);
    modules.add(new TestPersistenceUnitModelModule());
    modules.add(new TestDb4oDaoModule(getConfig()));
    modules.add(new Db4oDbShellModule());
    modules.add(new Module() {

      @Override
      public void configure(Binder binder) {
        binder.bind(IDbTrans.class).to(Db4oTrans.class).in(Scopes.SINGLETON);
        binder.bind(new TypeLiteral<IEntityService<Address>>() {}).to(TestEntityService.class).in(Scopes.SINGLETON);
      }
    });
  }

  protected final IEntityDao getEntityDao() {
    return injector.getInstance(IEntityDao.class);
  }

  protected final IEntityService<Address> getTestEntityService() {
    return injector.getInstance(Key.get(new TypeLiteral<IEntityService<Address>>() {}));
  }

  protected final EntityBeanFactory getEntityBeanFactory() {
    return injector.getInstance(EntityBeanFactory.class);
  }

  protected final void stubListElements() {
    // stub the list elements
    getDbTrans().startTrans();
    final Set<Address> elements = getEntityBeanFactory().getNEntityCopies(Address.class, NUM_LIST_ELEMENTS, true);
    getEntityDao().persistAll(elements);
    getDbTrans().setComplete();
    getDbTrans().endTrans();
  }

  @Test
  public void test() throws Exception {
    stubListElements();

    final IEntityService<Address> dataProvider = getTestEntityService();

    final List<Address> elements = dataProvider.loadAll();
    assert elements != null && elements.size() > 0 : "No elements exist - test can't run";
    assert elements.size() >= 10 : "At least 10 list elements must be present for this test";
    final int pageSize = 3;

    final Criteria<Address> criteria = new Criteria<Address>(Address.class);
    final Sorting sorting = new Sorting(new SortColumn("emailAddress"));
    final IListHandler<SearchResult<?>> listHandler =
      ListHandlerFactory.create(criteria, sorting, ListHandlerType.PAGE, dataProvider);

    List<SearchResult<?>> list;

    list = listHandler.getElements(0, pageSize, sorting);
    assert (list != null && list.size() == pageSize) : "getElements() size mismatch";

    list = listHandler.getElements(pageSize, pageSize, sorting);
    assert (list != null && list.size() == pageSize) : "getElements() size mismatch";

    list = listHandler.getElements(pageSize * 2, pageSize, sorting);
    assert (list != null && list.size() == pageSize) : "getElements() size mismatch";

    final List<SearchResult<?>> alist = listHandler.getElements(0, elements.size(), sorting);
    assert alist.size() == elements.size();

    for(int i = 0; i < elements.size(); i++) {
      final Address element = (Address) alist.get(i).getElement();
      assert element != null : "Empty element in list";
    }
  }

}
TOP

Related Classes of com.tll.listhandler.PagingSearchListHandlerTest$TestEntityService

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.