package com.github.instaweb.jade; import static org.junit.Assert.assertTrue; import java.util.Date; import java.util.Map; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.context.embedded.EmbeddedWebApplicationContext; import org.springframework.boot.test.IntegrationTest; import org.springframework.boot.test.SpringApplicationConfiguration; import org.springframework.boot.test.TestRestTemplate; import org.springframework.context.annotation.Configuration; import org.springframework.stereotype.Controller; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import org.springframework.test.context.web.WebAppConfiguration; import org.springframework.web.bind.annotation.RequestMapping; import com.github.instaweb.jade.AutoApplicationTests.Application; @RunWith(SpringJUnit4ClassRunner.class) @SpringApplicationConfiguration(classes = Application.class) @IntegrationTest("server.port:0") @WebAppConfiguration public class AutoApplicationTests { @Autowired private EmbeddedWebApplicationContext context; private int port; @Before public void init() { port = context.getEmbeddedServletContainer().getPort(); } @Test public void testHomePage() throws Exception { String body = new TestRestTemplate().getForObject("http://localhost:" + port, String.class); assertTrue(body.contains("<title>Hello App</title>")); assertTrue(body.contains("<p>Hello World</p>")); } @Test public void testExtendsPage() throws Exception { String body = new TestRestTemplate().getForObject("http://localhost:" + port + "/extends", String.class); assertTrue(body.contains("<title>Article Title</title>")); assertTrue(body.contains("<h1>My Article</h1>")); assertTrue(body.contains("<h1>welcome</h1>")); } @Test public void testIncludePage() throws Exception { String body = new TestRestTemplate().getForObject("http://localhost:" + port + "/include", String.class); assertTrue(body.contains("<title>Testing Include</title>")); assertTrue(body.contains("<h1>Include worked</h1>")); assertTrue(body.contains("<h2>include-content</h2>")); } @Configuration @EnableAutoConfiguration @Controller public static class Application { @RequestMapping("/") public String home(Map<String, Object> model) { model.put("time", new Date()); model.put("message", "Hello World"); model.put("title", "Hello App"); return "home"; } @RequestMapping("/extends") public String extendsPage(Map<String, Object> model) { model.put("time", new Date()); model.put("message", "Hello World"); model.put("title", "Hello App"); return "extends-content"; } @RequestMapping("/include") public String includePage(Map<String, Object> model) { model.put("time", new Date()); model.put("message", "Include worked"); model.put("title", "Testing Include"); return "include"; } public static void main(String[] args) { SpringApplication.run(Application.class, args); } } }