package io.github.azagniotov.stubby4j.utils;
import io.github.azagniotov.stubby4j.cli.ANSITerminal;
import org.junit.After;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.junit.MockitoJUnitRunner;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.ByteArrayOutputStream;
import java.io.PrintStream;
import static com.google.common.truth.Truth.assertThat;
import static org.mockito.Mockito.when;
/**
* @author: Alexander Zagniotov
* Created: 4/22/13 3:33 PM
*/
@RunWith(MockitoJUnitRunner.class)
public class ConsoleUtilsTest {
private static final String URI = "/some/uri/to/resource/123";
@Mock
private HttpServletRequest mockHttpServletRequest;
@Mock
private HttpServletResponse mockHttpServletResponse;
private ByteArrayOutputStream consoleCaptor;
@BeforeClass
public static void beforeClass() throws Exception {
ANSITerminal.muteConsole(false);
}
@Before
public void beforeEach() throws Exception {
consoleCaptor = new ByteArrayOutputStream();
final boolean NO_AUTO_FLUSH = false;
System.setOut(new PrintStream(consoleCaptor, NO_AUTO_FLUSH, StringUtils.UTF_8));
when(mockHttpServletRequest.getRequestURI()).thenReturn(URI);
}
@After
public void afterEach() throws Exception {
System.setOut(System.out);
}
@Test
public void shouldPrintToConsoleExpectedErrorWithColor_WhenStatus_500() throws Exception {
final int expectedStatus = 500;
final String expectedConsoleOutput = String.format("%s [%s] Server Error\u001B[0m", expectedStatus, URI);
final String expectedConsoleColor = "[31m";
when(mockHttpServletResponse.getStatus()).thenReturn(expectedStatus);
ConsoleUtils.logOutgoingResponse(mockHttpServletRequest.getRequestURI(), mockHttpServletResponse);
final String actualConsoleOutput = consoleCaptor.toString(StringUtils.UTF_8).trim();
assertThat(actualConsoleOutput).contains(expectedConsoleOutput);
assertThat(actualConsoleOutput).contains(expectedConsoleColor);
}
@Test
public void shouldPrintToConsoleExpectedErrorWithColor_WhenStatus_301() throws Exception {
final int expectedStatus = 301;
final String expectedConsoleOutput = String.format("%s [%s] Moved Permanently\u001B[0m", expectedStatus, URI);
final String expectedConsoleColor = "[33m";
when(mockHttpServletResponse.getStatus()).thenReturn(expectedStatus);
ConsoleUtils.logOutgoingResponse(mockHttpServletRequest.getRequestURI(), mockHttpServletResponse);
final String actualConsoleOutput = consoleCaptor.toString(StringUtils.UTF_8).trim();
assertThat(actualConsoleOutput).contains(expectedConsoleOutput);
assertThat(actualConsoleOutput).contains(expectedConsoleColor);
}
@Test
public void shouldPrintToConsoleExpectedErrorWithColor_WhenStatus_201() throws Exception {
final int expectedStatus = 201;
final String expectedConsoleOutput = String.format("%s [%s] Created\u001B[0m", expectedStatus, URI);
final String expectedConsoleColor = "[32m";
when(mockHttpServletResponse.getStatus()).thenReturn(expectedStatus);
ConsoleUtils.logOutgoingResponse(mockHttpServletRequest.getRequestURI(), mockHttpServletResponse);
final String actualConsoleOutput = consoleCaptor.toString(StringUtils.UTF_8).trim();
assertThat(actualConsoleOutput).contains(expectedConsoleOutput);
assertThat(actualConsoleOutput).contains(expectedConsoleColor);
}
@Test
public void shouldPrintToConsoleExpectedErrorWithColor_WhenStatus_200() throws Exception {
final int expectedStatus = 200;
final String expectedConsoleOutput = String.format("%s [%s] OK\u001B[0m", expectedStatus, URI);
final String expectedConsoleColor = "[32m";
when(mockHttpServletResponse.getStatus()).thenReturn(expectedStatus);
ConsoleUtils.logOutgoingResponse(mockHttpServletRequest.getRequestURI(), mockHttpServletResponse);
final String actualConsoleOutput = consoleCaptor.toString(StringUtils.UTF_8).trim();
assertThat(actualConsoleOutput).contains(expectedConsoleOutput);
assertThat(actualConsoleOutput).contains(expectedConsoleColor);
}
@Test
public void shouldPrintToConsoleExpectedErrorWithColor_WhenStatus_100() throws Exception {
final int expectedStatus = 100;
final String expectedConsoleOutput = String.format("%s [%s] Continue\u001B[0m", expectedStatus, URI);
final String expectedConsoleColor = "[34m";
when(mockHttpServletResponse.getStatus()).thenReturn(expectedStatus);
ConsoleUtils.logOutgoingResponse(mockHttpServletRequest.getRequestURI(), mockHttpServletResponse);
final String actualConsoleOutput = consoleCaptor.toString(StringUtils.UTF_8).trim();
assertThat(actualConsoleOutput).contains(expectedConsoleOutput);
assertThat(actualConsoleOutput).contains(expectedConsoleColor);
}
@Test
public void shouldPrintToConsoleExpectedErrorWithColor_WhenStatus_LessThan100() throws Exception {
final int expectedStatus = 99;
final String expectedConsoleOutput = String.format("%s [%s] 99\u001B[0m", expectedStatus, URI);
when(mockHttpServletResponse.getStatus()).thenReturn(expectedStatus);
ConsoleUtils.logOutgoingResponse(mockHttpServletRequest.getRequestURI(), mockHttpServletResponse);
final String actualConsoleOutput = consoleCaptor.toString(StringUtils.UTF_8).trim();
assertThat(actualConsoleOutput).contains(expectedConsoleOutput);
}
}