X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=src%2Ftest%2Fjava%2Fnet%2Fpterodactylus%2Fsone%2Fdata%2FMocks.java;h=8720312a22943c85837022d5b07523a172aca5c2;hb=253c9c1552e471513d34ae48c156a367b417b827;hp=34aff9bc1b32bae3ff26dca7d3526878038a804b;hpb=02bf56efeee6654cd6ed0b92074e09180b7fb0b6;p=Sone.git diff --git a/src/test/java/net/pterodactylus/sone/data/Mocks.java b/src/test/java/net/pterodactylus/sone/data/Mocks.java index 34aff9b..8720312 100644 --- a/src/test/java/net/pterodactylus/sone/data/Mocks.java +++ b/src/test/java/net/pterodactylus/sone/data/Mocks.java @@ -18,12 +18,18 @@ package net.pterodactylus.sone.data; import static com.google.common.base.Optional.of; -import static org.mockito.ArgumentCaptor.forClass; +import static com.google.common.collect.ArrayListMultimap.create; +import static com.google.common.collect.Ordering.from; +import static com.google.common.collect.Sets.newHashSet; +import static net.pterodactylus.sone.data.Post.TIME_COMPARATOR; import static org.mockito.Matchers.anyString; import static org.mockito.Matchers.eq; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; +import java.util.Collection; +import java.util.List; + import net.pterodactylus.sone.core.Core; import net.pterodactylus.sone.data.impl.DefaultPostBuilder; import net.pterodactylus.sone.data.impl.DefaultPostReplyBuilder; @@ -31,8 +37,8 @@ import net.pterodactylus.sone.database.Database; import net.pterodactylus.sone.database.PostReplyBuilder; import com.google.common.base.Optional; -import org.mockito.ArgumentCaptor; -import org.mockito.Matchers; +import com.google.common.collect.FluentIterable; +import com.google.common.collect.Multimap; import org.mockito.invocation.InvocationOnMock; import org.mockito.stubbing.Answer; @@ -43,14 +49,30 @@ import org.mockito.stubbing.Answer; */ public class Mocks { - public static Core mockCore(Database database) { + private final Multimap sonePosts = create(); + private final Collection sones = newHashSet(); + public final Database database; + public final Core core; + + public Mocks() { + database = mockDatabase(); + core = mockCore(database); + when(core.getLocalSones()).then(new Answer>() { + @Override + public Collection answer(InvocationOnMock invocation) throws Throwable { + return FluentIterable.from(sones).filter(Sone.LOCAL_SONE_FILTER).toList(); + } + }); + } + + private static Core mockCore(Database database) { Core core = mock(Core.class); when(core.getDatabase()).thenReturn(database); when(core.getSone(anyString())).thenReturn(Optional.absent()); return core; } - public static Database mockDatabase() { + private static Database mockDatabase() { Database database = mock(Database.class); when(database.getSone(anyString())).thenReturn(Optional.absent()); when(database.getPost(anyString())).thenReturn(Optional.absent()); @@ -58,49 +80,72 @@ public class Mocks { return database; } - public static Sone mockLocalSone(Core core, final String id) { - Sone sone = mockRemoteSone(core, id); - when(sone.isLocal()).thenReturn(true); - final Database database = core.getDatabase(); - when(sone.newPostBuilder()).thenReturn(new DefaultPostBuilder(database, id)); - when(sone.newPostReplyBuilder(anyString())).then(new Answer() { - @Override - public PostReplyBuilder answer(InvocationOnMock invocation) throws Throwable { - return new DefaultPostReplyBuilder(database, id, (String) invocation.getArguments()[0]); - } - }); - return sone; - } - - public static Sone mockRemoteSone(Core core, final String id) { - Sone sone = mock(Sone.class); - when(sone.getId()).thenReturn(id); - when(sone.isLocal()).thenReturn(false); - when(sone.getProfile()).thenReturn(new Profile(sone)); - final Database database = core.getDatabase(); - when(sone.newPostBuilder()).thenThrow(IllegalStateException.class); - when(sone.newPostReplyBuilder(Matchers.anyObject())).thenThrow(IllegalStateException.class); - when(core.getSone(eq(id))).thenReturn(of(sone)); - when(database.getSone(eq(id))).thenReturn(of(sone)); - return sone; + public SoneMocker mockSone(String id) { + return new SoneMocker(id); } - public static Post mockPost(Core core, Sone sone, String postId) { + public Post mockPost(Sone sone, String postId) { Post post = mock(Post.class); when(post.getId()).thenReturn(postId); when(post.getSone()).thenReturn(sone); - Database database = core.getDatabase(); when(database.getPost(eq(postId))).thenReturn(of(post)); + sonePosts.put(sone, post); return post; } - public static PostReply mockPostReply(Core core, Sone sone, String replyId) { + public PostReply mockPostReply(Sone sone, String replyId) { PostReply postReply = mock(PostReply.class); when(postReply.getId()).thenReturn(replyId); when(postReply.getSone()).thenReturn(sone); - Database database = core.getDatabase(); when(database.getPostReply(eq(replyId))).thenReturn(of(postReply)); return postReply; } + public class SoneMocker { + + private final Sone mockedSone = mock(Sone.class); + private final String id; + private boolean local; + private Profile profile = new Profile(mockedSone); + + private SoneMocker(String id) { + this.id = id; + } + + public SoneMocker local() { + local = true; + return this; + } + + public Sone create() { + when(mockedSone.getId()).thenReturn(id); + when(mockedSone.isLocal()).thenReturn(local); + when(mockedSone.getProfile()).thenReturn(profile); + if (local) { + when(mockedSone.newPostBuilder()).thenReturn(new DefaultPostBuilder(database, id)); + when(mockedSone.newPostReplyBuilder(anyString())).then(new Answer() { + @Override + public PostReplyBuilder answer(InvocationOnMock invocation) throws Throwable { + return new DefaultPostReplyBuilder(database, id, (String) invocation.getArguments()[0]); + } + }); + } else { + when(mockedSone.newPostBuilder()).thenThrow(IllegalStateException.class); + when(mockedSone.newPostReplyBuilder(anyString())).thenThrow(IllegalStateException.class); + } + when(core.getSone(eq(id))).thenReturn(of(mockedSone)); + when(database.getSone(eq(id))).thenReturn(of(mockedSone)); + when(mockedSone.getPosts()).then(new Answer>() { + @Override + public List answer(InvocationOnMock invocationOnMock) throws Throwable { + return from(TIME_COMPARATOR).sortedCopy(sonePosts.get(mockedSone)); + } + }); + when(mockedSone.toString()).thenReturn(String.format("Sone[%s]", id)); + sones.add(mockedSone); + return mockedSone; + } + + } + }