package org.doctester.rendermachine; import com.google.common.collect.ImmutableMap; import com.google.common.html.HtmlEscapers; import org.doctester.testbrowser.Request; import org.doctester.testbrowser.Response; import org.doctester.testbrowser.TestBrowser; import org.doctester.testbrowser.Url; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.runners.MockitoJUnitRunner; import java.util.Map; import org.doctester.testbrowser.testmodels.User; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; import static org.mockito.Mockito.when; @RunWith(MockitoJUnitRunner.class) public class RenderMachineImplTest { @Mock TestBrowser testBrowser; RenderMachineImpl renderMachine; @Before public void setupTest() { renderMachine = new RenderMachineImpl(); renderMachine.setTestBrowser(testBrowser); } @Test public void testThatFormParametersArePrintedWhenPresent() { Map formParameters = ImmutableMap.of("param1", "value1", "param2", "value2"); Request requestWithoutParameters = Request.POST().url(Url.host("host")); Request requestWithParameters = Request.POST().url(Url.host("host")).formParameters(formParameters); when(testBrowser.makeRequest(requestWithoutParameters)).thenReturn(new Response(ImmutableMap.of("header", "header"), 200, "payload")); when(testBrowser.makeRequest(requestWithParameters)).thenReturn(new Response(ImmutableMap.of("header", "header"), 200, "payload")); renderMachine.sayAndMakeRequest(requestWithoutParameters); assertFalse(renderMachine.htmlDocument.contains("<dt>Parameters</dt><dd>" + formParameters.toString() + "</dd>")); assertFalse(renderMachine.htmlDocument.contains("<dt>Parameters</dt><dd></dd>")); renderMachine.sayAndMakeRequest(requestWithParameters); assertTrue(renderMachine.htmlDocument.contains("<dt>Parameters</dt><dd>" + formParameters.toString() + "</dd>")); } @Test public void testThatJsonPayloadIsPrinted() { User user = new User("jsonPayloadTester", "test123", "JSON Payload Tester"); Request requestWithJsonPayload = Request.POST().url(Url.host("host")).contentTypeApplicationJson().payload(user); when(testBrowser.makeRequest(requestWithJsonPayload)).thenReturn(new Response(ImmutableMap.of("header", "header"), 200, "payload")); renderMachine.sayAndMakeRequest(requestWithJsonPayload); String prettyPrintJson = requestWithJsonPayload.payloadAsPrettyString(); assertTrue(prettyPrintJson.startsWith("{")); assertTrue(prettyPrintJson.contains("\"jsonPayloadTester\"")); assertTrue(renderMachine.htmlDocument.contains( "<dt>Content</dt><dd><div class=\"http-request-body\"><pre>" + HtmlEscapers.htmlEscaper().escape(prettyPrintJson) + "</pre></div></dd>") ); } @Test public void testThatXmlPayloadIsPrinted() { User user = new User("xmlPayloadTester", "test456", "XML Payload Tester"); Request requestWithXmlPayload = Request.POST().url(Url.host("host")).contentTypeApplicationXml().payload(user); when(testBrowser.makeRequest(requestWithXmlPayload)).thenReturn(new Response(ImmutableMap.of("header", "header"), 200, "payload")); renderMachine.sayAndMakeRequest(requestWithXmlPayload); String prettyPrintXml = requestWithXmlPayload.payloadAsPrettyString(); assertTrue(prettyPrintXml.startsWith("<")); assertTrue(prettyPrintXml.contains("<username>xmlPayloadTester</username>")); assertTrue(renderMachine.htmlDocument.contains( "<dt>Content</dt><dd><div class=\"http-request-body\"><pre>" + HtmlEscapers.htmlEscaper().escape(prettyPrintXml) + "</pre></div></dd>") ); } }