package net.pterodactylus.sone.web;
+import static net.pterodactylus.sone.test.GuiceKt.supply;
import static net.pterodactylus.sone.web.WebTestUtils.redirectsTo;
import static org.junit.Assert.fail;
import static org.mockito.ArgumentMatchers.anyBoolean;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
+import java.io.InputStream;
import java.io.PipedInputStream;
import java.io.PipedOutputStream;
import java.net.URI;
import freenet.clients.http.ToadletContext;
import freenet.l10n.BaseL10n;
+import freenet.support.SimpleReadOnlyArrayBucket;
+import freenet.support.api.Bucket;
import freenet.support.api.HTTPRequest;
+import freenet.support.api.HTTPUploadedFile;
+import freenet.support.io.NullBucket;
import com.google.common.base.Optional;
import com.google.common.collect.ArrayListMultimap;
-import com.google.common.collect.HashMultimap;
import com.google.common.collect.ListMultimap;
import com.google.common.collect.Multimap;
import com.google.common.eventbus.EventBus;
import com.google.common.io.ByteStreams;
+import com.google.inject.Guice;
+import com.google.inject.Injector;
import org.junit.Before;
import org.junit.Rule;
import org.junit.rules.ExpectedException;
protected final TemplateContext templateContext = new TemplateContext();
protected final HTTPRequest httpRequest = mock(HTTPRequest.class);
- protected final Multimap<String, String> requestParameters = HashMultimap.create();
+ protected final Multimap<String, String> requestParameters = ArrayListMultimap.create();
protected final Map<String, String> requestHeaders = new HashMap<>();
+ private final Map<String, String> uploadedFilesNames = new HashMap<>();
+ private final Map<String, String> uploadedFilesContentTypes = new HashMap<>();
+ private final Map<String, String> uploadedFilesSources = new HashMap<>();
protected final FreenetRequest freenetRequest = mock(FreenetRequest.class);
private final PipedOutputStream responseOutputStream = new PipedOutputStream();
private final PipedInputStream responseInputStream;
protected final List<Sone> localSones = new ArrayList<>();
private final ListMultimap<String, PostReply> postReplies = ArrayListMultimap.create();
+ protected final Injector injector = Guice.createInjector(
+ supply(WebInterface.class).byInstance(webInterface),
+ supply(Template.class).byInstance(template)
+ );
+
protected WebPageTest() {
try {
responseInputStream = new PipedInputStream(responseOutputStream);
return requestParameters.containsKey(parameter) ? requestParameters.get(parameter).iterator().next() : invocation.<String>getArgument(1);
}
});
+ when(httpRequest.isParameterSet(anyString())).thenAnswer(new Answer<Boolean>() {
+ @Override
+ public Boolean answer(InvocationOnMock invocation) throws Throwable {
+ return requestParameters.containsKey(invocation.<String>getArgument(0)) &&
+ requestParameters.get(invocation.<String>getArgument(0)).iterator().next() != null;
+ }
+ });
when(httpRequest.isPartSet(anyString())).thenAnswer(new Answer<Boolean>() {
@Override
public Boolean answer(InvocationOnMock invocation) throws Throwable {
return requestHeaders.get(invocation.<String>getArgument(0).toLowerCase());
}
});
+ when(httpRequest.getUploadedFile(anyString())).thenAnswer(new Answer<HTTPUploadedFile>() {
+ @Override
+ public HTTPUploadedFile answer(InvocationOnMock invocation) throws Throwable {
+ final String name = invocation.getArgument(0);
+ if (!uploadedFilesSources.containsKey(name)) {
+ return null;
+ }
+ return new HTTPUploadedFile() {
+ @Override
+ public String getContentType() {
+ return uploadedFilesContentTypes.get(name);
+ }
+
+ @Override
+ public Bucket getData() {
+ try (InputStream inputStream = getClass().getResourceAsStream(uploadedFilesSources.get(name))) {
+ byte[] bytes = ByteStreams.toByteArray(inputStream);
+ return new SimpleReadOnlyArrayBucket(bytes, 0, bytes.length);
+ } catch (IOException ioe1) {
+ return new NullBucket();
+ }
+ }
+
+ @Override
+ public String getFilename() {
+ return uploadedFilesNames.get(name);
+ }
+ };
+ }
+ });
}
@Before
}
});
when(core.getPost(anyString())).thenReturn(Optional.<Post>absent());
+ when(core.getPostReply(anyString())).thenReturn(Optional.<PostReply>absent());
when(core.getReplies(anyString())).thenAnswer(new Answer<List<PostReply>>() {
@Override
public List<PostReply> answer(InvocationOnMock invocation) throws Throwable {
}
@Before
+ public void setupL10n() {
+ when(l10n.getString(anyString())).thenAnswer(new Answer<String>() {
+ @Override
+ public String answer(InvocationOnMock invocation) throws Throwable {
+ return invocation.getArgument(0);
+ }
+ });
+ }
+
+ @Before
public final void setupIdentityManager() {
when(core.getIdentityManager().getAllOwnIdentities()).thenReturn(ownIdentities);
}
@Before
public final void setupWebInterface() {
- when(webInterface.getCurrentSone(toadletContext)).thenReturn(currentSone);
- when(webInterface.getCurrentSone(eq(toadletContext), anyBoolean())).thenReturn(currentSone);
+ when(webInterface.getCurrentSoneCreatingSession(toadletContext)).thenReturn(currentSone);
+ when(webInterface.getCurrentSoneWithoutCreatingSession(toadletContext)).thenReturn(currentSone);
when(webInterface.getNotification(anyString())).thenReturn(Optional.<Notification>absent());
when(webInterface.getNotifications(currentSone)).thenReturn(new ArrayList<Notification>());
}
}
protected void unsetCurrentSone() {
- when(webInterface.getCurrentSone(toadletContext)).thenReturn(null);
- when(webInterface.getCurrentSone(eq(toadletContext), anyBoolean())).thenReturn(null);
+ when(webInterface.getCurrentSoneCreatingSession(toadletContext)).thenReturn(null);
+ when(webInterface.getCurrentSoneWithoutCreatingSession(toadletContext)).thenReturn(null);
}
protected void request(String uri, Method method) {
when(core.getTemporaryImage(eq(imageId))).thenReturn(temporaryImage);
}
+ protected void addUploadedFile(@Nonnull String name, @Nonnull String filename, @Nonnull String contentType, @Nonnull String resource) {
+ uploadedFilesNames.put(name, filename);
+ uploadedFilesContentTypes.put(name, contentType);
+ uploadedFilesSources.put(name, resource);
+ }
+
protected byte[] getResponseBytes() throws IOException {
response.getContent().close();
try (ByteArrayOutputStream outputStream = new ByteArrayOutputStream()) {
getPage().handleRequest(freenetRequest, templateContext);
}
- protected void verifyRedirect(String target, Runnable verification) throws RedirectException {
+ protected void verifyRedirect(String target, Runnable verification) throws RedirectException {
expectedException.expect(redirectsTo(target));
try {
getPage().handleRequest(freenetRequest, templateContext);