/**
* Copyright (C) 2010 Peter Karich <jetwick_@_pannous_._info>
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package de.jetwick.tw;
import com.google.inject.Module;
import de.jetwick.config.DefaultModule;
import de.jetwick.es.ElasticTagSearch;
import org.junit.AfterClass;
import de.jetwick.es.ElasticUserSearch;
import de.jetwick.JetwickTestClass;
import de.jetwick.data.JTag;
import de.jetwick.es.ElasticTagSearchTest;
import de.jetwick.util.GenericUrlResolver;
import java.util.Arrays;
import java.util.Collection;
import java.util.Queue;
import java.util.Stack;
import java.util.concurrent.LinkedBlockingDeque;
import java.util.concurrent.LinkedBlockingQueue;
import org.junit.After;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
import static org.junit.Assert.*;
import static org.mockito.Mockito.*;
/**
*
* @author Peter Karich, peat_hal 'at' users 'dot' sourceforge 'dot' net
*/
public class TweetProducerViaSearchTest extends JetwickTestClass {
private ElasticTagSearchTest tagSearchTester = new ElasticTagSearchTest();
private TweetProducerViaSearch twProd;
public TweetProducerViaSearchTest() {
}
@BeforeClass
public static void beforeClass() {
ElasticTagSearchTest.beforeClass();
}
@AfterClass
public static void afterClass() {
ElasticTagSearchTest.afterClass();
}
@Override
public Module createModule() {
return new DefaultModule() {
@Override
public void installSearchModule() {
// avoid that we need to set up (user/tweet) search
}
@Override
public GenericUrlResolver createGenericUrlResolver() {
return null;
}
};
}
@Override
@Before
public void setUp() throws Exception {
super.setUp();
tagSearchTester.setUp();
twProd = getInstance(TweetProducerViaSearch.class);
twProd.setTagSearch(tagSearchTester.getSearch());
}
@After
@Override
public void tearDown() throws Exception {
super.tearDown();
tagSearchTester.tearDown();
}
@Test
public void testUpdateAndInitTag() {
// make sure that updateTag is in a transaction
twProd.updateTag(new JTag("test"), 6);
tagSearchTester.getSearch().forceCleanTagQueueAndRefresh();
assertTrue(tagSearchTester.getSearch().findByTerm("test").getQueryInterval() < 10 * JTag.DEFAULT_Q_I);
}
@Test
public void testInitTagsNoException() {
twProd.updateTag(new JTag("test"), 6);
ElasticUserSearch uSearch = mock(ElasticUserSearch.class);
ElasticTagSearch tagSearch = mock(ElasticTagSearch.class);
when(uSearch.getQueryTerms()).thenReturn(Arrays.asList("test OR pest"));
when(tagSearch.findSorted(0, 1000)).thenReturn(Arrays.asList(new JTag("solr OR lucene")));
twProd.setUserSearch(uSearch);
twProd.setTagSearch(tagSearch);
Collection<JTag> tags = twProd.initTags();
assertEquals(3, tags.size());
String str = "";
for (JTag tag : tags) {
str += tag.getTerm();
twProd.updateTag(tag, 5);
}
assertTrue(str.contains("test"));
assertTrue(str.contains("pest"));
assertTrue(str.contains("solr"));
assertTrue(str.contains("lucene"));
twProd.updateTag(new JTag("anotherone"), 6);
}
@Test
public void testFIFO() {
Queue q = new LinkedBlockingDeque();
q.add("test");
q.add("pest");
assertEquals("test", q.poll());
q = new LinkedBlockingQueue();
q.add("test");
q.add("pest");
assertEquals("test", q.poll());
Stack v = new Stack();
v.add("test");
v.add("pest");
assertEquals("pest", v.pop());
}
}