package controllers; import static org.fest.assertions.Assertions.assertThat; import static controllers.Helpers.callAction; import static play.test.Helpers.contentType; import static play.test.Helpers.header; import static play.test.Helpers.status; import static test.AorraTestUtils.asAdminUser; import static test.AorraTestUtils.fileStore; import java.io.ByteArrayInputStream; import java.util.zip.ZipEntry; import java.util.zip.ZipInputStream; import javax.jcr.Session; import models.User; import org.apache.commons.codec.binary.Hex; import org.apache.commons.lang.ArrayUtils; import org.apache.commons.lang3.StringUtils; import org.junit.Test; import play.libs.F; import play.mvc.Result; import play.test.FakeRequest; import service.filestore.FileStore; public class HtmlControllerTest { @Test public void toHtml() { asAdminUser(new F.Function3<Session, User, FakeRequest, Session>() { @Override public Session apply(final Session session, final User user, final FakeRequest newRequest) throws Throwable { final FileStore.Manager fsm = fileStore().getManager(session); FileStore.Folder root = fsm.getRoot(); FileStore.File htmlFile = root.createFile("foo.html", "text/html", new ByteArrayInputStream( ("<html><body>some html content</body></html>").getBytes())); final Result result = callAction( controllers.routes.ref.HtmlController.toHtml( htmlFile.getIdentifier()), newRequest); assertThat(status(result)).isEqualTo(200); assertThat(contentType(result)).isEqualTo("text/html"); return session; } }); } @Test public void htmlzip() { asAdminUser(new F.Function3<Session, User, FakeRequest, Session>() { @Override public Session apply(final Session session, final User user, final FakeRequest newRequest) throws Throwable { final FileStore.Manager fsm = fileStore().getManager(session); FileStore.Folder root = fsm.getRoot(); FileStore.File htmlFile = root.createFile("foo.html", "text/html", new ByteArrayInputStream( ("<html><body>some html content</body></html>").getBytes())); final Result result = callAction( controllers.routes.ref.HtmlController.toHtmlZip( htmlFile.getIdentifier()), newRequest); assertThat(status(result)).isEqualTo(200); assertThat(contentType(result)).isEqualTo("application/zip"); assertThat(header("Content-Disposition", result)).startsWith( "attachment; filename=\"foo.html.zip\""); byte[] zip = play.test.Helpers.contentAsBytes(result); assertThat(containsFile(zip, "foo.html")).isTrue(); return session; } }); } @Test public void pdf() { asAdminUser(new F.Function3<Session, User, FakeRequest, Session>() { @Override public Session apply(final Session session, final User user, final FakeRequest newRequest) throws Throwable { final FileStore.Manager fsm = fileStore().getManager(session); FileStore.Folder root = fsm.getRoot(); FileStore.File htmlFile = root.createFile("foo.html", "text/html", new ByteArrayInputStream( ("<html><body>some html content</body></html>").getBytes())); final Result result = callAction( controllers.routes.ref.HtmlController.toPdf( htmlFile.getIdentifier(), ""), newRequest); assertThat(status(result)).isEqualTo(200); assertThat(contentType(result)).isEqualTo("application/pdf"); assertThat(header("Content-Disposition", result)).startsWith( "attachment; filename=\"foo.html.pdf\""); byte[] pdf = play.test.Helpers.contentAsBytes(result); assertThat(Hex.encodeHexString(ArrayUtils.subarray(pdf, 0, 4))) .isEqualTo("25504446"); return session; } }); } private boolean containsFile(byte[] zip, String file) throws Exception { ZipInputStream z = new ZipInputStream(new ByteArrayInputStream(zip)); while (true) { ZipEntry entry = z.getNextEntry(); if (entry == null) { break; } if (StringUtils.equals(entry.getName(), file)) { return true; } z.closeEntry(); } z.close(); return false; } }