/*
* Copyright 2000-2013 Enonic AS
* http://www.enonic.com/license
*/
package com.enonic.cms.core.search;
import org.junit.Before;
import org.junit.Test;
import com.google.common.collect.Lists;
import com.enonic.cms.core.content.ContentEntity;
import com.enonic.cms.core.content.ContentKey;
import com.enonic.cms.core.content.ContentMap;
import com.enonic.cms.core.content.IndexService;
import com.enonic.cms.core.search.builder.ContentIndexData;
import com.enonic.cms.core.search.builder.ContentIndexDataFactory;
import com.enonic.cms.core.search.query.ContentDocument;
import com.enonic.cms.core.search.query.ContentIndexService;
import com.enonic.cms.store.dao.ContentDao;
import com.enonic.cms.store.dao.FindContentByKeysCommand;
import static org.mockito.Matchers.isA;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
public class IndexTransactionJournalTest
{
IndexTransactionJournal journal;
IndexService indexService;
ContentIndexService contentIndexService;
ContentDao contentDao;
ContentIndexDataFactory contentIndexDataFactory;
@Before
public void setup()
{
contentIndexService = mock( ContentIndexService.class );
indexService = mock( IndexService.class );
contentIndexDataFactory = mock( ContentIndexDataFactory.class );
contentDao = mock( ContentDao.class );
journal = new IndexTransactionJournal( contentIndexService, indexService, contentDao );
}
@Test
public void assert_equal_journal_entries_committed_once_only()
{
final ContentKey contentKey_1 = new ContentKey( 1 );
final ContentMap contentMap = new ContentMap( Lists.newArrayList( contentKey_1 ) );
ContentEntity content_1 = createContent( contentKey_1 );
contentMap.add( content_1 );
when( contentDao.findByKeys( isA( FindContentByKeysCommand.class ) ) ).thenReturn( contentMap );
when( indexService.createContentDocument( isA( ContentEntity.class ), isA( Boolean.class ) ) ).thenReturn(
createContentIndexData() );
when( contentIndexDataFactory.create( isA( ContentDocument.class ), isA( Boolean.class ) ) ).thenReturn(
new ContentIndexData( contentKey_1 ) );
journal.registerUpdate( contentKey_1, false );
journal.registerUpdate( new ContentKey( 1 ), false );
journal.afterCommit();
verify( contentIndexService, times( 1 ) ).index( isA( ContentDocument.class ), isA( Boolean.class ) );
}
private ContentEntity createContent( ContentKey contentKey )
{
ContentEntity c = new ContentEntity();
c.setKey( contentKey );
return c;
}
private ContentDocument createContentIndexData()
{
return new ContentDocument( new ContentKey( 1 ) );
}
}