import static java.util.Collections.emptySet;
import static org.mockito.Matchers.anyString;
import static org.mockito.Matchers.eq;
+import static org.mockito.Mockito.doAnswer;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
+import java.net.URI;
+import java.net.URISyntaxException;
import java.util.Collection;
import java.util.List;
import java.util.Map;
+import java.util.Set;
import net.pterodactylus.sone.core.Core;
import net.pterodactylus.sone.data.impl.DefaultPostBuilder;
import net.pterodactylus.sone.data.impl.DefaultPostReplyBuilder;
import net.pterodactylus.sone.database.Database;
import net.pterodactylus.sone.database.PostReplyBuilder;
+import net.pterodactylus.sone.web.WebInterface;
+import net.pterodactylus.sone.web.page.FreenetRequest;
+
+import freenet.clients.http.HTTPRequestImpl;
+import freenet.support.api.HTTPRequest;
import com.google.common.base.Function;
import com.google.common.base.Optional;
import com.google.common.collect.FluentIterable;
+import com.google.common.collect.HashMultimap;
import com.google.common.collect.Multimap;
import com.google.common.collect.Ordering;
+import com.google.common.collect.SetMultimap;
+import org.mockito.Matchers;
import org.mockito.invocation.InvocationOnMock;
import org.mockito.stubbing.Answer;
private final Map<String, Sone> sones = newHashMap();
private final Multimap<Post, PostReply> postReplies = create();
private final Multimap<String, Post> directedPosts = create();
+ private final SetMultimap<Post, Sone> postLikingSones = HashMultimap.create();
+ private final SetMultimap<PostReply, Sone> postReplyLikingSones = HashMultimap.create();
public final Database database;
public final Core core;
+ public final WebInterface webInterface;
public Mocks() {
database = mockDatabase();
core = mockCore(database);
+ webInterface = mockWebInterface(core);
when(database.getSone()).thenReturn(new Function<String, Optional<Sone>>() {
@Override
public Optional<Sone> apply(String soneId) {
return database;
}
+ private static WebInterface mockWebInterface(Core core) {
+ WebInterface webInterface = mock(WebInterface.class);
+ when(webInterface.getCore()).thenReturn(core);
+ return webInterface;
+ }
+
public SoneMocker mockSone(String id) {
return new SoneMocker(id);
}
return new PostReplyMocker(replyId, sone);
}
+ public FreenetRequest mockRequest(String path) throws URISyntaxException {
+ HTTPRequest httpRequest = new HTTPRequestImpl(new URI(path), "GET");
+ FreenetRequest request = mock(FreenetRequest.class);
+ when(request.getHttpRequest()).thenReturn(httpRequest);
+ return request;
+ }
+
public class SoneMocker {
private final Sone mockedSone = mock(Sone.class);
return Ordering.from(Reply.TIME_COMPARATOR).sortedCopy(postReplies.get(post));
}
});
+ doAnswer(new Answer<Void>() {
+ @Override
+ public Void answer(InvocationOnMock invocation) throws Throwable {
+ postLikingSones.put(post, (Sone) invocation.getArguments()[0]);
+ return null;
+ }
+ }).when(post).like(Matchers.<Sone>any());
+ doAnswer(new Answer<Void>() {
+ @Override
+ public Void answer(InvocationOnMock invocation) throws Throwable {
+ postLikingSones.remove(post, (Sone) invocation.getArguments()[0]);
+ return null;
+ }
+ }).when(post).unlike(Matchers.<Sone>any());
+ when(post.getLikes()).thenAnswer(new Answer<Set<Sone>>() {
+ @Override
+ public Set<Sone> answer(InvocationOnMock invocation) throws Throwable {
+ return postLikingSones.get(post);
+ }
+ });
return post;
}
if (text.isPresent()) {
when(postReply.getText()).thenReturn(text.get());
}
+ doAnswer(new Answer<Void>() {
+ @Override
+ public Void answer(InvocationOnMock invocation) throws Throwable {
+ postReplyLikingSones.put(postReply, (Sone) invocation.getArguments()[0]);
+ return null;
+ }
+ }).when(postReply).like(Matchers.<Sone>any());
+ doAnswer(new Answer<Void>() {
+ @Override
+ public Void answer(InvocationOnMock invocation) throws Throwable {
+ postReplyLikingSones.remove(postReply, invocation.getArguments()[0]);
+ return null;
+ }
+ }).when(postReply).unlike(Matchers.<Sone>any());
+ when(postReply.getLikes()).thenAnswer(new Answer<Set<Sone>>() {
+ @Override
+ public Set<Sone> answer(InvocationOnMock invocation) throws Throwable {
+ return postReplyLikingSones.get(postReply);
+ }
+ });
return postReply;
}
}