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=dd5cf69463b59dda896b64d599079b5b2188aa81;hpb=b88e3d99a937f44e584567d965f4870c35727407;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 dd5cf69..8720312 100644 --- a/src/test/java/net/pterodactylus/sone/data/Mocks.java +++ b/src/test/java/net/pterodactylus/sone/data/Mocks.java @@ -20,12 +20,14 @@ package net.pterodactylus.sone.data; import static com.google.common.base.Optional.of; 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; @@ -35,8 +37,8 @@ import net.pterodactylus.sone.database.Database; import net.pterodactylus.sone.database.PostReplyBuilder; import com.google.common.base.Optional; +import com.google.common.collect.FluentIterable; import com.google.common.collect.Multimap; -import org.mockito.Matchers; import org.mockito.invocation.InvocationOnMock; import org.mockito.stubbing.Answer; @@ -48,12 +50,19 @@ import org.mockito.stubbing.Answer; public class Mocks { 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) { @@ -71,40 +80,8 @@ public class Mocks { return database; } - public Sone mockLocalSone(final String id) { - final Sone sone = mock(Sone.class); - when(sone.isLocal()).thenReturn(true); - initializeSoneMock(id, sone); - 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 Sone mockRemoteSone(final String id) { - final Sone sone = mock(Sone.class); - when(sone.isLocal()).thenReturn(false); - initializeSoneMock(id, sone); - when(sone.newPostBuilder()).thenThrow(IllegalStateException.class); - when(sone.newPostReplyBuilder(Matchers.anyObject())).thenThrow(IllegalStateException.class); - return sone; - } - - private void initializeSoneMock(String id, final Sone sone) { - when(sone.getId()).thenReturn(id); - when(sone.getProfile()).thenReturn(new Profile(sone)); - when(core.getSone(eq(id))).thenReturn(of(sone)); - when(database.getSone(eq(id))).thenReturn(of(sone)); - when(sone.getPosts()).then(new Answer>() { - @Override - public List answer(InvocationOnMock invocationOnMock) throws Throwable { - return from(TIME_COMPARATOR).sortedCopy(sonePosts.get(sone)); - } - }); + public SoneMocker mockSone(String id) { + return new SoneMocker(id); } public Post mockPost(Sone sone, String postId) { @@ -124,4 +101,51 @@ public class Mocks { 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; + } + + } + }