Package org.hibernate.search.test.event.autoindexembeddable

Source Code of org.hibernate.search.test.event.autoindexembeddable.EventBasedEmbeddableCollectionUpdateTest

/*
* Hibernate Search, full-text search for your domain model
*
* License: GNU Lesser General Public License (LGPL), version 2.1 or later
* See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>.
*/

package org.hibernate.search.test.event.autoindexembeddable;

import java.util.List;
import javax.persistence.EntityManager;

import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.queryparser.classic.MultiFieldQueryParser;
import org.apache.lucene.queryparser.classic.ParseException;
import org.apache.lucene.queryparser.classic.QueryParser;
import org.hibernate.search.jpa.FullTextEntityManager;
import org.hibernate.search.jpa.FullTextQuery;
import org.hibernate.search.jpa.Search;
import org.hibernate.search.testsupport.TestConstants;
import org.hibernate.search.test.jpa.JPATestCase;
import org.hibernate.search.testsupport.TestForIssue;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;

import static org.junit.Assert.assertEquals;

/**
* @author Hardy Ferentschik
*/
@TestForIssue(jiraKey = "HSEARCH-1358")
public class EventBasedEmbeddableCollectionUpdateTest extends JPATestCase {

  private EntityManager entityManager;

  @Before
  public void setUp() {
    super.setUp();
    entityManager = factory.createEntityManager();
  }

  @After
  public void tearDown() {
    FullTextEntityManager fullTextEntityManager = Search.getFullTextEntityManager( entityManager );
    fullTextEntityManager.purgeAll( Book.class );
    fullTextEntityManager.flushToIndexes();
    fullTextEntityManager.close();
    super.tearDown();
  }

  @Test
  public void testUpdateOfEmbeddedElementCollectionTriggersIndexUpdate() throws Exception {
    indexBookAndEnsureItIsIndexed();

    // find and update book by adding "Bar" into Embedded ElementCollection
    entityManager.getTransaction().begin();

    Book book = entityManager.find( Book.class, 1234L );
    book.getEmbeddableCategories().getCategories().remove( 12L );
    book.getEmbeddableCategories().getCategories().put( 13L, "Bar" );

    entityManager.persist( book );
    entityManager.getTransaction().commit();

    assertEquals(
        "Foo should have been removed by indexed update",
        0,
        search( "embeddableCategories.categories:Foo" ).size()
    );
    assertEquals(
        "Bar should have been added by indexed update",
        1,
        search( "embeddableCategories.categories:Bar" ).size()
    );
  }

  @Override
  public Class[] getAnnotatedClasses() {
    return new Class[] { }; // configured in persistence.xml
  }

  private void indexBookAndEnsureItIsIndexed() throws ParseException {
    entityManager.getTransaction().begin();

    Book book = new Book();
    book.setId( 1234L );
    book.getEmbeddableCategories().getCategories().put( 12L, "Foo" );

    entityManager.persist( book );
    entityManager.getTransaction().commit();

    assertEquals(
        "Foo should have been added during indexing",
        1,
        search( "embeddableCategories.categories:Foo" ).size()
    );
    assertEquals( "Bar was not yet added", 0, search( "embeddableCategories.categories:Bar" ).size() );
  }

  @SuppressWarnings("unchecked")
  private List<Book> search(String searchQuery) throws ParseException {
    QueryParser parser = new MultiFieldQueryParser(
        TestConstants.getTargetLuceneVersion(),
        new String[] { },
        new StandardAnalyzer( TestConstants.getTargetLuceneVersion() )
    );
    FullTextQuery query = Search.getFullTextEntityManager( entityManager )
        .createFullTextQuery( parser.parse( searchQuery ), Book.class );
    return (List<Book>) query.getResultList();
  }
}

TOP

Related Classes of org.hibernate.search.test.event.autoindexembeddable.EventBasedEmbeddableCollectionUpdateTest

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.