Make it possible to mock a Sone’s insert URI.
[Sone.git] / src / test / java / net / pterodactylus / sone / data / Mocks.java
index f56a1d4..1962686 100644 (file)
@@ -24,14 +24,13 @@ import static com.google.common.collect.ArrayListMultimap.create;
 import static com.google.common.collect.Maps.newHashMap;
 import static com.google.common.collect.Ordering.from;
 import static java.util.Collections.emptySet;
+import static org.mockito.Matchers.any;
 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;
@@ -40,20 +39,20 @@ import java.util.Set;
 import net.pterodactylus.sone.core.Core;
 import net.pterodactylus.sone.core.Options;
 import net.pterodactylus.sone.core.Options.DefaultOption;
-import net.pterodactylus.sone.core.Options.Option;
-import net.pterodactylus.sone.core.Options.OptionWatcher;
 import net.pterodactylus.sone.core.Preferences;
-import net.pterodactylus.sone.core.SoneInserter;
 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.PostBuilder.PostCreated;
 import net.pterodactylus.sone.database.PostReplyBuilder;
-import net.pterodactylus.sone.fcp.FcpInterface.FullAccessRequired;
+import net.pterodactylus.sone.database.PostReplyBuilder.PostReplyCreated;
+import net.pterodactylus.sone.freenet.wot.OwnIdentity;
 import net.pterodactylus.sone.utils.IntegerRangePredicate;
 import net.pterodactylus.sone.web.WebInterface;
 import net.pterodactylus.sone.web.page.FreenetRequest;
 
-import freenet.clients.http.HTTPRequestImpl;
+import freenet.clients.http.SessionManager.Session;
+import freenet.clients.http.ToadletContext;
 import freenet.support.api.HTTPRequest;
 
 import com.google.common.base.Function;
@@ -77,6 +76,8 @@ public class Mocks {
 
        private final Multimap<Sone, Post> sonePosts = create();
        private final Map<String, Sone> sones = newHashMap();
+       private Optional<Sone> currentSone = absent();
+       private final Map<String, Post> posts = newHashMap();
        private final Multimap<Post, PostReply> postReplies = create();
        private final Multimap<String, Post> directedPosts = create();
        private final SetMultimap<Post, Sone> postLikingSones = HashMultimap.create();
@@ -95,6 +96,14 @@ public class Mocks {
                                return (soneId == null) ? Optional.<Sone>absent() : fromNullable(sones.get(soneId));
                        }
                });
+               Answer<Sone> returnCurrentSone = new Answer<Sone>() {
+                       @Override
+                       public Sone answer(InvocationOnMock invocation) throws Throwable {
+                               return currentSone.orNull();
+                       }
+               };
+               when(webInterface.getCurrentSone(any(ToadletContext.class))).then(returnCurrentSone);
+               when(webInterface.getCurrentSone(any(Session.class))).then(returnCurrentSone);
                when(core.getSones()).then(new Answer<Collection<Sone>>() {
                        @Override
                        public Collection<Sone> answer(InvocationOnMock invocation) throws Throwable {
@@ -114,6 +123,24 @@ public class Mocks {
                                return FluentIterable.from(sones.values()).filter(Sone.LOCAL_SONE_FILTER).toList();
                        }
                });
+               when(core.postCreated()).thenReturn(Optional.<PostCreated>of(new PostCreated() {
+                       @Override
+                       public void postCreated(Post post) {
+                               posts.put(post.getId(), post);
+                               sonePosts.put(post.getSone(), post);
+                       }
+               }));
+               when(core.postReplyCreated()).then(new Answer<Optional<PostReplyCreated>>() {
+                       @Override
+                       public Optional<PostReplyCreated> answer(InvocationOnMock invocation) throws Throwable {
+                               return Optional.<PostReplyCreated>of(new PostReplyCreated() {
+                                       @Override
+                                       public void postReplyCreated(PostReply postReply) {
+                                               postReplies.put(postReply.getPost().get(), postReply);
+                                       }
+                               });
+                       }
+               });
                Options options = createOptions();
                when(core.getPreferences()).thenReturn(new Preferences(options));
                when(database.getDirectedPosts(anyString())).then(new Answer<Collection<Post>>() {
@@ -147,10 +174,15 @@ public class Mocks {
                return core;
        }
 
-       private static Database mockDatabase() {
+       private Database mockDatabase() {
                Database database = mock(Database.class);
                when(database.getSone(anyString())).thenReturn(Optional.<Sone>absent());
-               when(database.getPost(anyString())).thenReturn(Optional.<Post>absent());
+               when(database.getPost(anyString())).then(new Answer<Optional<Post>>() {
+                       @Override
+                       public Optional<Post> answer(InvocationOnMock invocation) throws Throwable {
+                               return fromNullable(posts.get(invocation.getArguments()[0]));
+                       }
+               });
                when(database.getPostReply(anyString())).thenReturn(Optional.<PostReply>absent());
                return database;
        }
@@ -186,7 +218,9 @@ public class Mocks {
 
                private final Sone mockedSone = mock(Sone.class);
                private final String id;
+               private String insertUrI;
                private boolean local;
+               private boolean current;
                private Optional<String> name = absent();
                private long time;
                private Profile profile = new Profile(mockedSone);
@@ -201,6 +235,16 @@ public class Mocks {
                        return this;
                }
 
+               public SoneMocker insertUri(String insertUri) {
+                       this.insertUrI = insertUri;
+                       return this;
+               }
+
+               public SoneMocker current() {
+                       current = true;
+                       return this;
+               }
+
                public SoneMocker withName(String name) {
                        this.name = fromNullable(name);
                        return this;
@@ -229,6 +273,14 @@ public class Mocks {
                public Sone create() {
                        when(mockedSone.getId()).thenReturn(id);
                        when(mockedSone.isLocal()).thenReturn(local);
+                       if (local) {
+                               OwnIdentity ownIdentity = mock(OwnIdentity.class);
+                               when(ownIdentity.getInsertUri()).thenReturn(insertUrI);
+                               when(mockedSone.getIdentity()).thenReturn(ownIdentity);
+                       }
+                       if (current) {
+                               currentSone = of(mockedSone);
+                       }
                        if (name.isPresent()) {
                                when(mockedSone.getName()).thenReturn(name.get());
                        }