I\'m trying to create a function test for a Play 2 controller which takes multipart form data as input. There is no method currently in FakeRequest to support multipart form
Here is a solution with callAction() in Java to create the multipart/form-data content for a request. It works at least in Play 2.2.3. My content-type was application/zip. You might want to change this.
@Test
public void callImport() throws Exception {
File file = new File("test/yourfile.zip");
FilePart part = new MultipartFormData.FilePart<>(
"file", "test/yourfile.zip",
Scala.Option("application/zip"), new TemporaryFile(file));
List> fileParts = new ArrayList<>();
fileParts.add(part);
scala.collection.immutable.List> files = scala.collection.JavaConversions
.asScalaBuffer(fileParts).toList();
MultipartFormData formData = new MultipartFormData(
null, files, null, null);
AnyContent anyContent = new AnyContentAsMultipartFormData(formData);
Result result = callAction(
controllers.routes.ref.ImportExport.import(),
fakeRequest().withAnyContent(anyContent,
"multipart/form-data", "POST"));
// Your Tests
assertThat(status(result)).isEqualTo(OK);
}