7a849789cb9466384d4bfe977ec59edd3a8e6d14
[Sone.git] / src / test / java / net / pterodactylus / sone / main / DebugLoadersTest.java
1 package net.pterodactylus.sone.main;
2
3 import static org.hamcrest.MatcherAssert.assertThat;
4 import static org.hamcrest.Matchers.is;
5 import static org.hamcrest.Matchers.startsWith;
6 import static org.mockito.Mockito.mock;
7
8 import java.io.ByteArrayOutputStream;
9 import java.io.File;
10 import java.io.IOException;
11 import java.io.OutputStream;
12 import java.io.StringWriter;
13 import java.net.URI;
14 import java.net.URISyntaxException;
15
16 import net.pterodactylus.sone.web.page.FreenetRequest;
17 import net.pterodactylus.util.template.Template;
18 import net.pterodactylus.util.template.TemplateContext;
19 import net.pterodactylus.util.template.TemplateProvider;
20 import net.pterodactylus.util.web.Method;
21 import net.pterodactylus.util.web.Page;
22 import net.pterodactylus.util.web.Response;
23
24 import freenet.clients.http.SessionManager;
25 import freenet.clients.http.ToadletContext;
26 import freenet.l10n.BaseL10n;
27 import freenet.support.api.HTTPRequest;
28
29 import com.google.common.base.Charsets;
30 import com.google.common.io.Files;
31 import org.junit.Before;
32 import org.junit.Rule;
33 import org.junit.Test;
34 import org.junit.rules.TemporaryFolder;
35
36 /**
37  * Unit test for {@link DebugLoaders}.
38  */
39 public class DebugLoadersTest {
40
41         @Rule
42         public final TemporaryFolder temporaryFolder = new TemporaryFolder();
43
44         private final BaseL10n l10n = mock(BaseL10n.class);
45         private final StringWriter stringWriter = new StringWriter();
46         private final TemplateContext templateContext = new TemplateContext();
47         private Loaders loaders;
48
49         @Before
50         public void setupLoader() throws IOException {
51                 String templatePath = temporaryFolder.newFolder("temps").getPath();
52                 loaders = new DebugLoaders(templatePath);
53                 File templateFile = new File(templatePath, "template.txt");
54                 Files.write("<%if foo>foo<%else>bar<%/if>", templateFile, Charsets.UTF_8);
55                 new File(templatePath, "templates").mkdir();
56                 File secondTemplateFile = new File(templatePath, "templates/template.txt");
57                 Files.write("<%if foo>foo<%else>bar<%/if>", secondTemplateFile, Charsets.UTF_8);
58         }
59
60         @Test
61         public void debugLoaderCanLoadTemplatesFromFilesystem() throws IOException {
62                 Template template = loaders.loadTemplate("/template.txt");
63                 template.render(templateContext, stringWriter);
64                 assertThat(stringWriter.toString(), is("bar"));
65         }
66
67         @Test
68         public void staticPageIsServedFromFilesystem() throws URISyntaxException, IOException {
69                 Page<FreenetRequest> page = loaders.loadStaticPage("text/", "", "text/plain");
70                 URI uri = new URI("http://some.host/text/template.txt");
71                 Method method = Method.GET;
72                 HTTPRequest httpRequest = mock(HTTPRequest.class);
73                 ToadletContext toadletContext = mock(ToadletContext.class);
74                 SessionManager sessionManager = mock(SessionManager.class);
75                 FreenetRequest request = new FreenetRequest(uri, method, httpRequest, toadletContext, l10n, sessionManager);
76                 OutputStream outputStream = new ByteArrayOutputStream();
77                 Response response = new Response(outputStream);
78                 page.handleRequest(request, response);
79                 assertThat(response.getContentType(), startsWith("text/plain"));
80                 assertThat(response.getStatusCode(), is(200));
81         }
82
83         @Test
84         public void templateProviderLocatesTemplatesInFileSystem() {
85                 TemplateProvider templateProvider = loaders.getTemplateProvider();
86                 Template template = templateProvider.getTemplate(templateContext, "template.txt");
87                 template.render(templateContext, stringWriter);
88                 assertThat(stringWriter.toString(), is("bar"));
89         }
90
91 }