package org.limewire.core.impl.library;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import org.jmock.Expectations;
import org.jmock.Mockery;
import org.limewire.core.api.Category;
import org.limewire.core.api.FilePropertyKey;
import org.limewire.core.api.library.FriendLibrary;
import org.limewire.core.api.library.PresenceLibrary;
import org.limewire.core.api.library.RemoteLibraryManager;
import org.limewire.core.api.search.SearchCategory;
import org.limewire.core.api.search.SearchDetails;
import org.limewire.core.api.search.SearchResult;
import org.limewire.util.BaseTestCase;
import org.limewire.friend.api.FriendPresence;
import ca.odell.glazedlists.BasicEventList;
import ca.odell.glazedlists.EventList;
public class FriendLibrariesTest extends BaseTestCase {
public FriendLibrariesTest(String name) {
super(name);
}
/**
* Tests search for remote file items in the friends library by name. Using
* a single friend and presence in this instance.
*/
public void testIndexing1FriendLibraryAndFileByFileNameOnly() {
Mockery context = new Mockery();
final EventList<FriendLibrary> friendLibraryList = new BasicEventList<FriendLibrary>();
final EventList<PresenceLibrary> presenceLibraryList1 = new BasicEventList<PresenceLibrary>();
final EventList<SearchResult> remoteFileItemList1 = new BasicEventList<SearchResult>();
final RemoteLibraryManager remoteLibraryManager = context.mock(RemoteLibraryManager.class);
final FriendLibrary friendLibrary1 = context.mock(FriendLibrary.class);
final PresenceLibrary presenceLibrary1 = context.mock(PresenceLibrary.class);
final SearchResult remoteFileItem1 = context.mock(SearchResult.class);
final String name1 = "name1";
final Category category1 = Category.AUDIO;
final FriendPresence presence1 = context.mock(FriendPresence.class);
final String presenceId1 = "1";
context.checking(new Expectations() {
{
allowing(friendLibrary1).getPresenceLibraryList();
will(returnValue(presenceLibraryList1));
allowing(remoteLibraryManager).getFriendLibraryList();
will(returnValue(friendLibraryList));
allowing(presenceLibrary1).getPresence();
will(returnValue(presence1));
allowing(presence1).getPresenceId();
will(returnValue(presenceId1));
allowing(presenceLibrary1).getModel();
will(returnValue(remoteFileItemList1));
allowing(remoteFileItem1).getFileNameWithoutExtension();
will(returnValue(name1));
allowing(remoteFileItem1).getCategory();
will(returnValue(category1));
for (FilePropertyKey filePropertyKey : FilePropertyKey.values()) {
allowing(remoteFileItem1).getProperty(filePropertyKey);
will(returnValue(null));
}
}
});
FriendLibraries friendLibraries = new FriendLibraries();
friendLibraries.register(remoteLibraryManager);
friendLibraryList.add(friendLibrary1);
presenceLibraryList1.add(presenceLibrary1);
remoteFileItemList1.add(remoteFileItem1);
Collection<String> suggestions = friendLibraries.getSuggestions("name",
SearchCategory.AUDIO);
assertEquals(1, suggestions.size());
assertContains(suggestions, name1);
Collection<SearchResult> matchingItems = friendLibraries
.getMatchingItems(new TestSearchDetails("name", SearchCategory.AUDIO));
assertEquals(1, matchingItems.size());
assertContains(matchingItems, remoteFileItem1);
suggestions = friendLibraries.getSuggestions("name", SearchCategory.ALL);
assertEquals(1, suggestions.size());
assertContains(suggestions, name1);
matchingItems = friendLibraries.getMatchingItems(new TestSearchDetails("name",
SearchCategory.ALL));
assertEquals(1, matchingItems.size());
assertContains(matchingItems, remoteFileItem1);
suggestions = friendLibraries.getSuggestions("name", SearchCategory.DOCUMENT);
assertEquals(0, suggestions.size());
matchingItems = friendLibraries.getMatchingItems(new TestSearchDetails("name",
SearchCategory.DOCUMENT));
assertEquals(0, matchingItems.size());
suggestions = friendLibraries.getSuggestions("blah", SearchCategory.AUDIO);
assertEquals(0, suggestions.size());
matchingItems = friendLibraries.getMatchingItems(new TestSearchDetails("blah",
SearchCategory.AUDIO));
assertEquals(0, matchingItems.size());
suggestions = friendLibraries.getSuggestions("na", SearchCategory.AUDIO);
assertEquals(1, suggestions.size());
assertContains(suggestions, name1);
matchingItems = friendLibraries.getMatchingItems(new TestSearchDetails("na",
SearchCategory.AUDIO));
assertEquals(1, matchingItems.size());
assertContains(matchingItems, remoteFileItem1);
suggestions = friendLibraries.getSuggestions("na", SearchCategory.ALL);
assertEquals(1, suggestions.size());
assertContains(suggestions, name1);
matchingItems = friendLibraries.getMatchingItems(new TestSearchDetails("na",
SearchCategory.ALL));
assertEquals(1, matchingItems.size());
assertContains(matchingItems, remoteFileItem1);
context.assertIsSatisfied();
}
/**
* Tests search for remote file items in the friends library by name. Using
* a single friend and presence in this instance.
*/
public void testIndexing1FriendLibraryAndMultipleFilesByFileNameOnly() {
Mockery context = new Mockery();
final EventList<FriendLibrary> friendLibraryList = new BasicEventList<FriendLibrary>();
final EventList<PresenceLibrary> presenceLibraryList1 = new BasicEventList<PresenceLibrary>();
final EventList<SearchResult> remoteFileItemList1 = new BasicEventList<SearchResult>();
final RemoteLibraryManager remoteLibraryManager = context.mock(RemoteLibraryManager.class);
final FriendLibrary friendLibrary1 = context.mock(FriendLibrary.class);
final PresenceLibrary presenceLibrary1 = context.mock(PresenceLibrary.class);
final SearchResult remoteFileItem1 = context.mock(SearchResult.class);
final String name1 = "name1";
final Category category1 = Category.AUDIO;
final SearchResult remoteFileItem2 = context.mock(SearchResult.class);
final String name2 = "name2";
final Category category2 = Category.DOCUMENT;
final SearchResult remoteFileItem3 = context.mock(SearchResult.class);
final String name3 = "blah1";
final Category category3 = Category.AUDIO;
final FriendPresence presence1 = context.mock(FriendPresence.class);
final String presenceId1 = "1";
context.checking(new Expectations() {
{
allowing(friendLibrary1).getPresenceLibraryList();
will(returnValue(presenceLibraryList1));
allowing(remoteLibraryManager).getFriendLibraryList();
will(returnValue(friendLibraryList));
allowing(presenceLibrary1).getPresence();
will(returnValue(presence1));
allowing(presence1).getPresenceId();
will(returnValue(presenceId1));
allowing(presenceLibrary1).getModel();
will(returnValue(remoteFileItemList1));
allowing(remoteFileItem1).getFileNameWithoutExtension();
will(returnValue(name1));
allowing(remoteFileItem1).getCategory();
will(returnValue(category1));
allowing(remoteFileItem2).getFileNameWithoutExtension();
will(returnValue(name2));
allowing(remoteFileItem2).getCategory();
will(returnValue(category2));
allowing(remoteFileItem3).getFileNameWithoutExtension();
will(returnValue(name3));
allowing(remoteFileItem3).getCategory();
will(returnValue(category3));
for (FilePropertyKey filePropertyKey : FilePropertyKey.values()) {
allowing(remoteFileItem1).getProperty(filePropertyKey);
will(returnValue(null));
allowing(remoteFileItem2).getProperty(filePropertyKey);
will(returnValue(null));
allowing(remoteFileItem3).getProperty(filePropertyKey);
will(returnValue(null));
}
}
});
FriendLibraries friendLibraries = new FriendLibraries();
friendLibraries.register(remoteLibraryManager);
friendLibraryList.add(friendLibrary1);
presenceLibraryList1.add(presenceLibrary1);
remoteFileItemList1.add(remoteFileItem1);
remoteFileItemList1.add(remoteFileItem2);
remoteFileItemList1.add(remoteFileItem3);
Collection<String> suggestions = friendLibraries.getSuggestions("name",
SearchCategory.AUDIO);
assertEquals(1, suggestions.size());
assertContains(suggestions, name1);
Collection<SearchResult> matchingItems = friendLibraries
.getMatchingItems(new TestSearchDetails("name", SearchCategory.AUDIO));
assertEquals(1, matchingItems.size());
assertContains(matchingItems, remoteFileItem1);
suggestions = friendLibraries.getSuggestions("name", SearchCategory.DOCUMENT);
assertEquals(1, suggestions.size());
assertContains(suggestions, name2);
matchingItems = friendLibraries.getMatchingItems(new TestSearchDetails("name",
SearchCategory.DOCUMENT));
assertEquals(1, matchingItems.size());
assertContains(matchingItems, remoteFileItem2);
suggestions = friendLibraries.getSuggestions("name", SearchCategory.ALL);
assertEquals(2, suggestions.size());
assertContains(suggestions, name1);
assertContains(suggestions, name2);
matchingItems = friendLibraries.getMatchingItems(new TestSearchDetails("name",
SearchCategory.ALL));
assertEquals(2, matchingItems.size());
assertContains(matchingItems, remoteFileItem1);
assertContains(matchingItems, remoteFileItem2);
suggestions = friendLibraries.getSuggestions("name", SearchCategory.DOCUMENT);
assertEquals(1, suggestions.size());
assertContains(suggestions, name2);
matchingItems = friendLibraries.getMatchingItems(new TestSearchDetails("name",
SearchCategory.DOCUMENT));
assertEquals(1, matchingItems.size());
assertContains(matchingItems, remoteFileItem2);
suggestions = friendLibraries.getSuggestions("blah", SearchCategory.AUDIO);
assertEquals(1, suggestions.size());
assertContains(suggestions, name3);
matchingItems = friendLibraries.getMatchingItems(new TestSearchDetails("blah",
SearchCategory.AUDIO));
assertEquals(1, matchingItems.size());
assertContains(matchingItems, remoteFileItem3);
suggestions = friendLibraries.getSuggestions("na", SearchCategory.AUDIO);
assertEquals(1, suggestions.size());
assertContains(suggestions, name1);
matchingItems = friendLibraries.getMatchingItems(new TestSearchDetails("na",
SearchCategory.AUDIO));
assertEquals(1, matchingItems.size());
assertContains(matchingItems, remoteFileItem1);
suggestions = friendLibraries.getSuggestions("na", SearchCategory.ALL);
assertEquals(2, suggestions.size());
assertContains(suggestions, name1);
assertContains(suggestions, name2);
matchingItems = friendLibraries.getMatchingItems(new TestSearchDetails("na",
SearchCategory.ALL));
assertEquals(2, matchingItems.size());
assertContains(matchingItems, remoteFileItem1);
assertContains(matchingItems, remoteFileItem2);
context.assertIsSatisfied();
}
/**
* Tests search for remote file items in the friends library by name. Using
* a multiple friends and presences.
*/
public void testIndexingMultipleFriendLibraryAndMultipleFilesByFileNameOnly() {
Mockery context = new Mockery();
final EventList<FriendLibrary> friendLibraryList = new BasicEventList<FriendLibrary>();
final EventList<PresenceLibrary> presenceLibraryList1 = new BasicEventList<PresenceLibrary>();
final EventList<SearchResult> remoteFileItemList1 = new BasicEventList<SearchResult>();
final EventList<PresenceLibrary> presenceLibraryList2 = new BasicEventList<PresenceLibrary>();
final EventList<SearchResult> remoteFileItemList2 = new BasicEventList<SearchResult>();
final RemoteLibraryManager remoteLibraryManager = context.mock(RemoteLibraryManager.class);
final FriendLibrary friendLibrary1 = context.mock(FriendLibrary.class);
final PresenceLibrary presenceLibrary1 = context.mock(PresenceLibrary.class);
final FriendLibrary friendLibrary2 = context.mock(FriendLibrary.class);
final PresenceLibrary presenceLibrary2 = context.mock(PresenceLibrary.class);
final SearchResult remoteFileItem1 = context.mock(SearchResult.class);
final String name1 = "name1";
final Category category1 = Category.AUDIO;
final SearchResult remoteFileItem2 = context.mock(SearchResult.class);
final String name2 = "name2";
final Category category2 = Category.DOCUMENT;
final SearchResult remoteFileItem3 = context.mock(SearchResult.class);
final String name3 = "blah1";
final Category category3 = Category.AUDIO;
final FriendPresence presence1 = context.mock(FriendPresence.class);
final String presenceId1 = "1";
final FriendPresence presence2 = context.mock(FriendPresence.class);
final String presenceId2 = "2";
context.checking(new Expectations() {
{
allowing(friendLibrary1).getPresenceLibraryList();
will(returnValue(presenceLibraryList1));
allowing(remoteLibraryManager).getFriendLibraryList();
will(returnValue(friendLibraryList));
allowing(presenceLibrary1).getPresence();
will(returnValue(presence1));
allowing(presence1).getPresenceId();
will(returnValue(presenceId1));
allowing(presenceLibrary1).getModel();
will(returnValue(remoteFileItemList1));
allowing(friendLibrary2).getPresenceLibraryList();
will(returnValue(presenceLibraryList2));
allowing(remoteLibraryManager).getFriendLibraryList();
will(returnValue(friendLibraryList));
allowing(presenceLibrary2).getPresence();
will(returnValue(presence2));
allowing(presence2).getPresenceId();
will(returnValue(presenceId2));
allowing(presenceLibrary2).getModel();
will(returnValue(remoteFileItemList2));
allowing(remoteFileItem1).getFileNameWithoutExtension();
will(returnValue(name1));
allowing(remoteFileItem1).getCategory();
will(returnValue(category1));
allowing(remoteFileItem2).getFileNameWithoutExtension();
will(returnValue(name2));
allowing(remoteFileItem2).getCategory();
will(returnValue(category2));
allowing(remoteFileItem3).getFileNameWithoutExtension();
will(returnValue(name3));
allowing(remoteFileItem3).getCategory();
will(returnValue(category3));
for (FilePropertyKey filePropertyKey : FilePropertyKey.values()) {
allowing(remoteFileItem1).getProperty(filePropertyKey);
will(returnValue(null));
allowing(remoteFileItem2).getProperty(filePropertyKey);
will(returnValue(null));
allowing(remoteFileItem3).getProperty(filePropertyKey);
will(returnValue(null));
}
}
});
FriendLibraries friendLibraries = new FriendLibraries();
friendLibraries.register(remoteLibraryManager);
friendLibraryList.add(friendLibrary1);
presenceLibraryList1.add(presenceLibrary1);
friendLibraryList.add(friendLibrary2);
presenceLibraryList2.add(presenceLibrary2);
remoteFileItemList1.add(remoteFileItem1);
remoteFileItemList2.add(remoteFileItem2);
remoteFileItemList2.add(remoteFileItem3);
Collection<String> suggestions = friendLibraries.getSuggestions("name",
SearchCategory.AUDIO);
assertEquals(1, suggestions.size());
assertContains(suggestions, name1);
Collection<SearchResult> matchingItems = friendLibraries
.getMatchingItems(new TestSearchDetails("name", SearchCategory.AUDIO));
assertEquals(1, matchingItems.size());
assertContains(matchingItems, remoteFileItem1);
suggestions = friendLibraries.getSuggestions("name", SearchCategory.DOCUMENT);
assertEquals(1, suggestions.size());
assertContains(suggestions, name2);
matchingItems = friendLibraries.getMatchingItems(new TestSearchDetails("name",
SearchCategory.DOCUMENT));
assertEquals(1, matchingItems.size());
assertContains(matchingItems, remoteFileItem2);
suggestions = friendLibraries.getSuggestions("name", SearchCategory.ALL);
assertEquals(2, suggestions.size());
assertContains(suggestions, name1);
assertContains(suggestions, name2);
matchingItems = friendLibraries.getMatchingItems(new TestSearchDetails("name",
SearchCategory.ALL));
assertEquals(2, matchingItems.size());
assertContains(matchingItems, remoteFileItem1);
assertContains(matchingItems, remoteFileItem2);
suggestions = friendLibraries.getSuggestions("name", SearchCategory.DOCUMENT);
assertEquals(1, suggestions.size());
assertContains(suggestions, name2);
matchingItems = friendLibraries.getMatchingItems(new TestSearchDetails("name",
SearchCategory.DOCUMENT));
assertEquals(1, matchingItems.size());
assertContains(matchingItems, remoteFileItem2);
suggestions = friendLibraries.getSuggestions("blah", SearchCategory.AUDIO);
assertEquals(1, suggestions.size());
assertContains(suggestions, name3);
matchingItems = friendLibraries.getMatchingItems(new TestSearchDetails("blah",
SearchCategory.AUDIO));
assertEquals(1, matchingItems.size());
assertContains(matchingItems, remoteFileItem3);
suggestions = friendLibraries.getSuggestions("na", SearchCategory.AUDIO);
assertEquals(1, suggestions.size());
assertContains(suggestions, name1);
matchingItems = friendLibraries.getMatchingItems(new TestSearchDetails("na",
SearchCategory.AUDIO));
assertEquals(1, matchingItems.size());
assertContains(matchingItems, remoteFileItem1);
suggestions = friendLibraries.getSuggestions("na", SearchCategory.ALL);
assertEquals(2, suggestions.size());
assertContains(suggestions, name1);
assertContains(suggestions, name2);
matchingItems = friendLibraries.getMatchingItems(new TestSearchDetails("na",
SearchCategory.ALL));
assertEquals(2, matchingItems.size());
assertContains(matchingItems, remoteFileItem1);
assertContains(matchingItems, remoteFileItem2);
context.assertIsSatisfied();
}
/**
* Testing search for friends files by metadata.
*/
public void testIndexingFileMetaData() {
Mockery context = new Mockery();
final EventList<FriendLibrary> friendLibraryList = new BasicEventList<FriendLibrary>();
final EventList<PresenceLibrary> presenceLibraryList1 = new BasicEventList<PresenceLibrary>();
final EventList<SearchResult> remoteFileItemList1 = new BasicEventList<SearchResult>();
final RemoteLibraryManager remoteLibraryManager = context.mock(RemoteLibraryManager.class);
final FriendLibrary friendLibrary1 = context.mock(FriendLibrary.class);
final PresenceLibrary presenceLibrary1 = context.mock(PresenceLibrary.class);
final SearchResult remoteFileItem1 = context.mock(SearchResult.class);
final String name1 = "name1";
final Category category1 = Category.AUDIO;
final Map<FilePropertyKey, Object> properties1 = new HashMap<FilePropertyKey, Object>();
final String album1 = "nameo";
properties1.put(FilePropertyKey.ALBUM, album1);
final FriendPresence presence1 = context.mock(FriendPresence.class);
final String presenceId1 = "1";
context.checking(new Expectations() {
{
allowing(friendLibrary1).getPresenceLibraryList();
will(returnValue(presenceLibraryList1));
allowing(remoteLibraryManager).getFriendLibraryList();
will(returnValue(friendLibraryList));
allowing(presenceLibrary1).getPresence();
will(returnValue(presence1));
allowing(presence1).getPresenceId();
will(returnValue(presenceId1));
allowing(presenceLibrary1).getModel();
will(returnValue(remoteFileItemList1));
allowing(remoteFileItem1).getFileNameWithoutExtension();
will(returnValue(name1));
allowing(remoteFileItem1).getCategory();
will(returnValue(category1));
for (FilePropertyKey filePropertyKey : FilePropertyKey.getIndexableKeys()) {
allowing(remoteFileItem1).getProperty(filePropertyKey);
if (properties1.containsKey(filePropertyKey)) {
will(returnValue(properties1.get(filePropertyKey)));
} else {
will(returnValue(null));
}
}
}
});
FriendLibraries friendLibraries = new FriendLibraries();
friendLibraries.register(remoteLibraryManager);
friendLibraryList.add(friendLibrary1);
presenceLibraryList1.add(presenceLibrary1);
remoteFileItemList1.add(remoteFileItem1);
Collection<String> suggestions = friendLibraries.getSuggestions("name",
SearchCategory.AUDIO);
assertEquals(2, suggestions.size());
assertContains(suggestions, name1);
assertContains(suggestions, album1);
Collection<SearchResult> matchingItems = friendLibraries
.getMatchingItems(new TestSearchDetails("name", SearchCategory.AUDIO));
assertEquals(1, matchingItems.size());
assertContains(matchingItems, remoteFileItem1);
suggestions = friendLibraries.getSuggestions("name", SearchCategory.ALL);
assertEquals(2, suggestions.size());
assertContains(suggestions, name1);
assertContains(suggestions, album1);
matchingItems = friendLibraries.getMatchingItems(new TestSearchDetails("name",
SearchCategory.ALL));
assertEquals(1, matchingItems.size());
assertContains(matchingItems, remoteFileItem1);
suggestions = friendLibraries.getSuggestions("name", SearchCategory.DOCUMENT);
assertEquals(0, suggestions.size());
matchingItems = friendLibraries.getMatchingItems(new TestSearchDetails("name",
SearchCategory.DOCUMENT));
assertEquals(0, matchingItems.size());
suggestions = friendLibraries.getSuggestions("blah", SearchCategory.AUDIO);
assertEquals(0, suggestions.size());
matchingItems = friendLibraries.getMatchingItems(new TestSearchDetails("blah",
SearchCategory.AUDIO));
assertEquals(0, matchingItems.size());
suggestions = friendLibraries.getSuggestions("na", SearchCategory.AUDIO);
assertEquals(2, suggestions.size());
assertContains(suggestions, name1);
assertContains(suggestions, album1);
matchingItems = friendLibraries.getMatchingItems(new TestSearchDetails("na",
SearchCategory.AUDIO));
assertEquals(1, matchingItems.size());
assertContains(matchingItems, remoteFileItem1);
suggestions = friendLibraries.getSuggestions("na", SearchCategory.ALL);
assertEquals(2, suggestions.size());
assertContains(suggestions, name1);
assertContains(suggestions, album1);
matchingItems = friendLibraries.getMatchingItems(new TestSearchDetails("na",
SearchCategory.ALL));
assertEquals(1, matchingItems.size());
assertContains(matchingItems, remoteFileItem1);
suggestions = friendLibraries.getSuggestions("nameo", SearchCategory.ALL);
assertEquals(1, suggestions.size());
assertContains(suggestions, album1);
matchingItems = friendLibraries.getMatchingItems(new TestSearchDetails("nameo",
SearchCategory.ALL));
assertEquals(1, matchingItems.size());
assertContains(matchingItems, remoteFileItem1);
context.assertIsSatisfied();
suggestions = friendLibraries.getSuggestions("nameo", SearchCategory.ALL,
FilePropertyKey.ALBUM);
assertEquals(1, suggestions.size());
assertContains(suggestions, album1);
suggestions = friendLibraries
.getSuggestions("n", SearchCategory.ALL, FilePropertyKey.ALBUM);
assertEquals(1, suggestions.size());
assertContains(suggestions, album1);
suggestions = friendLibraries.getSuggestions("n", SearchCategory.AUDIO,
FilePropertyKey.ALBUM);
assertEquals(1, suggestions.size());
assertContains(suggestions, album1);
suggestions = friendLibraries.getSuggestions("nameo", SearchCategory.AUDIO,
FilePropertyKey.TITLE);
assertEmpty(suggestions);
context.assertIsSatisfied();
}
/**
* Testing search for friends files with advancedDetails.
*/
public void testAdvancedSearch() {
Mockery context = new Mockery();
final EventList<FriendLibrary> friendLibraryList = new BasicEventList<FriendLibrary>();
final EventList<PresenceLibrary> presenceLibraryList1 = new BasicEventList<PresenceLibrary>();
final EventList<SearchResult> remoteFileItemList1 = new BasicEventList<SearchResult>();
final RemoteLibraryManager remoteLibraryManager = context.mock(RemoteLibraryManager.class);
final FriendLibrary friendLibrary1 = context.mock(FriendLibrary.class);
final PresenceLibrary presenceLibrary1 = context.mock(PresenceLibrary.class);
final SearchResult remoteFileItem1 = context.mock(SearchResult.class);
final String name1 = "name1";
final Category category1 = Category.AUDIO;
final Map<FilePropertyKey, Object> properties1 = new HashMap<FilePropertyKey, Object>();
final String author1 = "nameo1";
properties1.put(FilePropertyKey.AUTHOR, author1);
final SearchResult remoteFileItem2 = context.mock(SearchResult.class);
final String name2 = "name2";
final Category category2 = Category.DOCUMENT;
final Map<FilePropertyKey, Object> properties2 = new HashMap<FilePropertyKey, Object>();
final String author2 = "nameo2";
properties2.put(FilePropertyKey.AUTHOR, author2);
final FriendPresence presence1 = context.mock(FriendPresence.class);
final String presenceId1 = "1";
context.checking(new Expectations() {
{
allowing(friendLibrary1).getPresenceLibraryList();
will(returnValue(presenceLibraryList1));
allowing(remoteLibraryManager).getFriendLibraryList();
will(returnValue(friendLibraryList));
allowing(presenceLibrary1).getPresence();
will(returnValue(presence1));
allowing(presence1).getPresenceId();
will(returnValue(presenceId1));
allowing(presenceLibrary1).getModel();
will(returnValue(remoteFileItemList1));
allowing(remoteFileItem1).getFileNameWithoutExtension();
will(returnValue(name1));
allowing(remoteFileItem1).getCategory();
will(returnValue(category1));
for (FilePropertyKey filePropertyKey : FilePropertyKey.getIndexableKeys()) {
allowing(remoteFileItem1).getProperty(filePropertyKey);
if (properties1.containsKey(filePropertyKey)) {
will(returnValue(properties1.get(filePropertyKey)));
} else {
will(returnValue(null));
}
}
allowing(remoteFileItem2).getFileNameWithoutExtension();
will(returnValue(name2));
allowing(remoteFileItem2).getCategory();
will(returnValue(category2));
for (FilePropertyKey filePropertyKey : FilePropertyKey.getIndexableKeys()) {
allowing(remoteFileItem2).getProperty(filePropertyKey);
if (properties2.containsKey(filePropertyKey)) {
will(returnValue(properties2.get(filePropertyKey)));
} else {
will(returnValue(null));
}
}
}
});
FriendLibraries friendLibraries = new FriendLibraries();
friendLibraries.register(remoteLibraryManager);
friendLibraryList.add(friendLibrary1);
presenceLibraryList1.add(presenceLibrary1);
remoteFileItemList1.add(remoteFileItem1);
remoteFileItemList1.add(remoteFileItem2);
Map<FilePropertyKey, String> advancedDetails1 = new HashMap<FilePropertyKey, String>();
advancedDetails1.put(FilePropertyKey.AUTHOR, "n");
Collection<SearchResult> matchingItems = friendLibraries
.getMatchingItems(new TestSearchDetails("", SearchCategory.AUDIO, advancedDetails1));
assertEquals(1, matchingItems.size());
assertContains(matchingItems, remoteFileItem1);
matchingItems = friendLibraries.getMatchingItems(new TestSearchDetails("",
SearchCategory.DOCUMENT, advancedDetails1));
assertEquals(1, matchingItems.size());
assertContains(matchingItems, remoteFileItem2);
matchingItems = friendLibraries.getMatchingItems(new TestSearchDetails("n",
SearchCategory.DOCUMENT));
assertEquals(1, matchingItems.size());
assertContains(matchingItems, remoteFileItem2);
matchingItems = friendLibraries.getMatchingItems(new TestSearchDetails("n",
SearchCategory.ALL));
assertEquals(2, matchingItems.size());
assertContains(matchingItems, remoteFileItem1);
assertContains(matchingItems, remoteFileItem2);
matchingItems = friendLibraries.getMatchingItems(new TestSearchDetails("",
SearchCategory.ALL, advancedDetails1));
assertEquals(2, matchingItems.size());
assertContains(matchingItems, remoteFileItem1);
assertContains(matchingItems, remoteFileItem2);
matchingItems = friendLibraries.getMatchingItems(new TestSearchDetails("name",
SearchCategory.ALL, advancedDetails1));
assertEquals(2, matchingItems.size());
assertContains(matchingItems, remoteFileItem1);
assertContains(matchingItems, remoteFileItem2);
matchingItems = friendLibraries.getMatchingItems(new TestSearchDetails("name1",
SearchCategory.ALL, advancedDetails1));
assertEquals(1, matchingItems.size());
assertContains(matchingItems, remoteFileItem1);
matchingItems = friendLibraries.getMatchingItems(new TestSearchDetails("name2",
SearchCategory.ALL, advancedDetails1));
assertEquals(1, matchingItems.size());
assertContains(matchingItems, remoteFileItem2);
Map<FilePropertyKey, String> advancedDetails2 = new HashMap<FilePropertyKey, String>();
advancedDetails2.put(FilePropertyKey.AUTHOR, "nameo");
matchingItems = friendLibraries.getMatchingItems(new TestSearchDetails("name",
SearchCategory.ALL, advancedDetails2));
assertEquals(2, matchingItems.size());
assertContains(matchingItems, remoteFileItem1);
assertContains(matchingItems, remoteFileItem2);
Map<FilePropertyKey, String> advancedDetails3 = new HashMap<FilePropertyKey, String>();
advancedDetails3.put(FilePropertyKey.AUTHOR, "nameo1");
matchingItems = friendLibraries.getMatchingItems(new TestSearchDetails("name",
SearchCategory.ALL, advancedDetails3));
assertEquals(1, matchingItems.size());
assertContains(matchingItems, remoteFileItem1);
Map<FilePropertyKey, String> advancedDetails4 = new HashMap<FilePropertyKey, String>();
advancedDetails4.put(FilePropertyKey.AUTHOR, "nameo2");
matchingItems = friendLibraries.getMatchingItems(new TestSearchDetails("name",
SearchCategory.ALL, advancedDetails4));
assertEquals(1, matchingItems.size());
assertContains(matchingItems, remoteFileItem2);
}
/**
* Testing indexing phrases. Suggestions only index the phrase, while the
* matches are found based on indexing all of the parts of the phrase.
*/
public void testIndexingPhrases() {
Mockery context = new Mockery();
final EventList<FriendLibrary> friendLibraryList = new BasicEventList<FriendLibrary>();
final EventList<PresenceLibrary> presenceLibraryList1 = new BasicEventList<PresenceLibrary>();
final EventList<SearchResult> remoteFileItemList1 = new BasicEventList<SearchResult>();
final RemoteLibraryManager remoteLibraryManager = context.mock(RemoteLibraryManager.class);
final FriendLibrary friendLibrary1 = context.mock(FriendLibrary.class);
final PresenceLibrary presenceLibrary1 = context.mock(PresenceLibrary.class);
final SearchResult remoteFileItem1 = context.mock(SearchResult.class);
final String name1 = "name 1";
final Category category1 = Category.AUDIO;
final Map<FilePropertyKey, Object> properties1 = new HashMap<FilePropertyKey, Object>();
final String author1 = "nameo 1";
properties1.put(FilePropertyKey.AUTHOR, author1);
final SearchResult remoteFileItem2 = context.mock(SearchResult.class);
final String name2 = "name 2";
final Category category2 = Category.DOCUMENT;
final Map<FilePropertyKey, Object> properties2 = new HashMap<FilePropertyKey, Object>();
final String author2 = "nameo 2";
properties2.put(FilePropertyKey.AUTHOR, author2);
final FriendPresence presence1 = context.mock(FriendPresence.class);
final String presenceId1 = "1";
context.checking(new Expectations() {
{
allowing(friendLibrary1).getPresenceLibraryList();
will(returnValue(presenceLibraryList1));
allowing(remoteLibraryManager).getFriendLibraryList();
will(returnValue(friendLibraryList));
allowing(presenceLibrary1).getPresence();
will(returnValue(presence1));
allowing(presence1).getPresenceId();
will(returnValue(presenceId1));
allowing(presenceLibrary1).getModel();
will(returnValue(remoteFileItemList1));
allowing(remoteFileItem1).getFileNameWithoutExtension();
will(returnValue(name1));
allowing(remoteFileItem1).getCategory();
will(returnValue(category1));
for (FilePropertyKey filePropertyKey : FilePropertyKey.getIndexableKeys()) {
allowing(remoteFileItem1).getProperty(filePropertyKey);
if (properties1.containsKey(filePropertyKey)) {
will(returnValue(properties1.get(filePropertyKey)));
} else {
will(returnValue(null));
}
}
allowing(remoteFileItem2).getFileNameWithoutExtension();
will(returnValue(name2));
allowing(remoteFileItem2).getCategory();
will(returnValue(category2));
for (FilePropertyKey filePropertyKey : FilePropertyKey.getIndexableKeys()) {
allowing(remoteFileItem2).getProperty(filePropertyKey);
if (properties2.containsKey(filePropertyKey)) {
will(returnValue(properties2.get(filePropertyKey)));
} else {
will(returnValue(null));
}
}
}
});
FriendLibraries friendLibraries = new FriendLibraries();
friendLibraries.register(remoteLibraryManager);
friendLibraryList.add(friendLibrary1);
presenceLibraryList1.add(presenceLibrary1);
remoteFileItemList1.add(remoteFileItem1);
remoteFileItemList1.add(remoteFileItem2);
Collection<String> suggestions = friendLibraries.getSuggestions("", SearchCategory.ALL);
assertEquals(4, suggestions.size());
assertContains(suggestions, name1);
assertContains(suggestions, name2);
assertContains(suggestions, author1);
assertContains(suggestions, author2);
suggestions = friendLibraries.getSuggestions("name", SearchCategory.ALL);
assertEquals(4, suggestions.size());
assertContains(suggestions, name1);
assertContains(suggestions, name2);
assertContains(suggestions, author1);
assertContains(suggestions, author2);
suggestions = friendLibraries.getSuggestions("name ", SearchCategory.ALL);
assertEquals(2, suggestions.size());
assertContains(suggestions, name1);
assertContains(suggestions, name2);
suggestions = friendLibraries.getSuggestions("nameo ", SearchCategory.ALL);
assertEquals(2, suggestions.size());
assertContains(suggestions, author1);
assertContains(suggestions, author2);
suggestions = friendLibraries.getSuggestions("name", SearchCategory.ALL,
FilePropertyKey.AUTHOR);
assertEquals(2, suggestions.size());
assertContains(suggestions, author1);
assertContains(suggestions, author2);
suggestions = friendLibraries.getSuggestions("nameo", SearchCategory.ALL,
FilePropertyKey.AUTHOR);
assertEquals(2, suggestions.size());
assertContains(suggestions, author1);
assertContains(suggestions, author2);
suggestions = friendLibraries.getSuggestions("nameo 1", SearchCategory.ALL,
FilePropertyKey.AUTHOR);
assertEquals(1, suggestions.size());
assertContains(suggestions, author1);
suggestions = friendLibraries.getSuggestions("nameo 2", SearchCategory.ALL,
FilePropertyKey.AUTHOR);
assertEquals(1, suggestions.size());
assertContains(suggestions, author2);
Map<FilePropertyKey, String> advancedDetails1 = new HashMap<FilePropertyKey, String>();
advancedDetails1.put(FilePropertyKey.AUTHOR, "n");
Collection<SearchResult> matchingItems = friendLibraries
.getMatchingItems(new TestSearchDetails("", SearchCategory.AUDIO, advancedDetails1));
assertEquals(1, matchingItems.size());
assertContains(matchingItems, remoteFileItem1);
matchingItems = friendLibraries.getMatchingItems(new TestSearchDetails("",
SearchCategory.DOCUMENT, advancedDetails1));
assertEquals(1, matchingItems.size());
assertContains(matchingItems, remoteFileItem2);
matchingItems = friendLibraries.getMatchingItems(new TestSearchDetails("n",
SearchCategory.DOCUMENT));
assertEquals(1, matchingItems.size());
assertContains(matchingItems, remoteFileItem2);
matchingItems = friendLibraries.getMatchingItems(new TestSearchDetails("n",
SearchCategory.ALL));
assertEquals(2, matchingItems.size());
assertContains(matchingItems, remoteFileItem1);
assertContains(matchingItems, remoteFileItem2);
matchingItems = friendLibraries.getMatchingItems(new TestSearchDetails("",
SearchCategory.ALL, advancedDetails1));
assertEquals(2, matchingItems.size());
assertContains(matchingItems, remoteFileItem1);
assertContains(matchingItems, remoteFileItem2);
matchingItems = friendLibraries.getMatchingItems(new TestSearchDetails("name",
SearchCategory.ALL, advancedDetails1));
assertEquals(2, matchingItems.size());
assertContains(matchingItems, remoteFileItem1);
assertContains(matchingItems, remoteFileItem2);
matchingItems = friendLibraries.getMatchingItems(new TestSearchDetails("name 1",
SearchCategory.ALL, advancedDetails1));
assertEquals(1, matchingItems.size());
assertContains(matchingItems, remoteFileItem1);
matchingItems = friendLibraries.getMatchingItems(new TestSearchDetails("1",
SearchCategory.ALL, advancedDetails1));
assertEquals(1, matchingItems.size());
assertContains(matchingItems, remoteFileItem1);
matchingItems = friendLibraries.getMatchingItems(new TestSearchDetails("name 2",
SearchCategory.ALL, advancedDetails1));
assertEquals(1, matchingItems.size());
assertContains(matchingItems, remoteFileItem2);
matchingItems = friendLibraries.getMatchingItems(new TestSearchDetails("2",
SearchCategory.ALL, advancedDetails1));
assertEquals(1, matchingItems.size());
assertContains(matchingItems, remoteFileItem2);
Map<FilePropertyKey, String> advancedDetails2 = new HashMap<FilePropertyKey, String>();
advancedDetails2.put(FilePropertyKey.AUTHOR, "nameo");
matchingItems = friendLibraries.getMatchingItems(new TestSearchDetails("name",
SearchCategory.ALL, advancedDetails2));
assertEquals(2, matchingItems.size());
assertContains(matchingItems, remoteFileItem1);
assertContains(matchingItems, remoteFileItem2);
Map<FilePropertyKey, String> advancedDetails3 = new HashMap<FilePropertyKey, String>();
advancedDetails3.put(FilePropertyKey.AUTHOR, "nameo 1");
matchingItems = friendLibraries.getMatchingItems(new TestSearchDetails("name",
SearchCategory.ALL, advancedDetails3));
assertEquals(1, matchingItems.size());
assertContains(matchingItems, remoteFileItem1);
Map<FilePropertyKey, String> advancedDetails4 = new HashMap<FilePropertyKey, String>();
advancedDetails4.put(FilePropertyKey.AUTHOR, "nameo 2");
matchingItems = friendLibraries.getMatchingItems(new TestSearchDetails("name",
SearchCategory.ALL, advancedDetails4));
assertEquals(1, matchingItems.size());
assertContains(matchingItems, remoteFileItem2);
Map<FilePropertyKey, String> advancedDetails5 = new HashMap<FilePropertyKey, String>();
advancedDetails5.put(FilePropertyKey.AUTHOR, "1");
matchingItems = friendLibraries.getMatchingItems(new TestSearchDetails("",
SearchCategory.ALL, advancedDetails5));
assertEquals(1, matchingItems.size());
assertContains(matchingItems, remoteFileItem1);
Map<FilePropertyKey, String> advancedDetails6 = new HashMap<FilePropertyKey, String>();
advancedDetails6.put(FilePropertyKey.AUTHOR, "2");
matchingItems = friendLibraries.getMatchingItems(new TestSearchDetails("",
SearchCategory.ALL, advancedDetails6));
assertEquals(1, matchingItems.size());
assertContains(matchingItems, remoteFileItem2);
}
private class TestSearchDetails implements SearchDetails {
private final SearchCategory category;
private final String query;
private final SearchType searchType;
private final Map<FilePropertyKey, String> advancedDetails;
public TestSearchDetails(String query, SearchCategory category,
Map<FilePropertyKey, String> advancedDetails) {
this.category = category;
this.query = query;
this.searchType = SearchType.KEYWORD;
this.advancedDetails = advancedDetails;
}
public TestSearchDetails(String query, SearchCategory category) {
this(query, category, new HashMap<FilePropertyKey, String>());
}
@Override
public Map<FilePropertyKey, String> getAdvancedDetails() {
return advancedDetails;
}
@Override
public SearchCategory getSearchCategory() {
return category;
}
@Override
public String getSearchQuery() {
return query;
}
@Override
public SearchType getSearchType() {
return searchType;
}
}
}