package games.strategy.util;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.sameInstance;
import static org.hamcrest.core.Is.is;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.net.URLConnection;
import java.util.Optional;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.junit.MockitoJUnitRunner;
@RunWith(MockitoJUnitRunner.class)
public class UrlStreamsTest {
private UrlStreams testObj;
private URL fakeUrl;
@Mock
private URLConnection mockUrlConnection;
@Mock
private InputStream mockInputStream;
@Before
public void setup() throws Exception {
// set up the test object with a function that will return a mocked url connection
testObj = new UrlStreams(url -> mockUrlConnection);
fakeUrl = new URL("http://well-formed-url.com");
}
/**
* Check that we turned off caching on a mocked UrlConnection.
*/
@Test
public void cacheIsOff() throws Exception {
when(mockUrlConnection.getInputStream()).thenReturn(mockInputStream);
final Optional<InputStream> connection = testObj.newStream(fakeUrl);
assertThat("expecting the same mocked http connection object back",
connection.get(), sameInstance(mockInputStream));
verify(mockUrlConnection).setUseCaches(false);
verify(mockUrlConnection).setDefaultUseCaches(false);
}
@Test
public void testErrorSuppressionWhenThereIsNoError() throws Exception {
when(mockUrlConnection.getInputStream()).thenReturn(mockInputStream);
final Optional<InputStream> stream = testObj.newStream(fakeUrl);
assertThat("No issues connecting, we should have an inpuct stream back.",
stream.isPresent(), is(true));
}
@Test
public void testErrorSuppression() throws Exception {
when(mockUrlConnection.getInputStream()).thenThrow(new IOException("simulating an IOException being thrown"));
final Optional<InputStream> stream = testObj.newStream(fakeUrl);
assertThat("No exceptions expected, but a failure to connect should return an empty object.",
stream.isPresent(), is(false));
}
}