package eu.europeana.cloud.service.ips.rest; import com.google.common.collect.ImmutableMap; import eu.europeana.cloud.common.web.ParamConstants; import eu.europeana.cloud.service.ips.ApplicationContextUtils; import eu.europeana.cloud.service.ips.ImageTranslator; import junitparams.JUnitParamsRunner; import org.glassfish.jersey.server.ResourceConfig; import org.glassfish.jersey.test.JerseyTest; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mockito; import org.springframework.context.ApplicationContext; import javax.ws.rs.core.Application; import javax.ws.rs.core.Response; import javax.ws.rs.core.UriBuilder; import java.io.InputStream; import java.net.URI; import java.util.Scanner; import static org.hamcrest.Matchers.is; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertThat; @RunWith(JUnitParamsRunner.class) public class ImagesResourceTest extends JerseyTest { private ImageTranslator translator; static final private String CLOUD_ID = "SDMSJPMRCGZHR5DXPHVJ5AOBECDWLGLV2ZCQOVRJAPHHSBIHA3BA"; static final private String SCHEMA = "RepName_0000001"; static final private String VERSION = "81b85300-4faf-11e5-a18d-0a0027000001"; static final private String FILE_NAME = "01a1fd4c-b79b-490c-8b0d-27f13c2f8c04"; static final private String FILE_NAME_2 = "abc"; static final private String MANIFEST_OK = "{\n" + " \"@context\" : \"http://iiif.io/api/image/2/context.json\",\n" + " \"@id\" : \"http://loheria.man.poznan.pl/www-fcgi/iipsrv.fcgi?IIIF=SDMSJPMRCGZHR5DXPHVJ5AOBECDWLGLV2ZCQOVRJAPHHSBIHA3BA_RepName_0000001_81b85300-4faf-11e5-a18d-0a0027000001_01a1fd4c-b79b-490c-8b0d-27f13c2f8c04\",\n" + " \"protocol\" : \"http://iiif.io/api/image\",\n" + " \"width\" : 2974,\n" + " \"height\" : 4120,\n" + " \"tiles\" : [\n" + " { \"width\" : 256, \"height\" : 256, \"scaleFactors\" : [ 1, 2, 4, 8, 16, 32 ] }\n" + " ],\n" + " \"profile\" : [\n" + " \"http://iiif.io/api/image/2/level1.json\",\n" + " { \"formats\" : [ \"jpg\" ],\n" + " \"qualities\" : [ \"native\",\"color\",\"gray\" ],\n" + " \"supports\" : [\"regionByPct\",\"sizeByForcedWh\",\"sizeByWh\",\"sizeAboveFull\",\"rotationBy90s\",\"mirroring\",\"gray\"] }\n" + " ]\n" + "}"; @Override public Application configure() { return new ResourceConfig().registerClasses(ImagesResource.class) .property("contextConfigLocation", "classpath:testContext.xml"); } @Before public void mockUp() { ApplicationContext applicationContext = ApplicationContextUtils.getApplicationContext(); translator = applicationContext.getBean(ImageTranslator.class); Mockito.reset(translator); } @Test public void getManifestOK() throws Exception { Mockito.when(translator.getResponse(CLOUD_ID, SCHEMA, VERSION, FILE_NAME + "/")).thenReturn(MANIFEST_OK); URI uri = UriBuilder.fromResource(ImagesResource.class).path(ImagesResource.class, "getManifest") .buildFromMap(ImmutableMap.<String, String>of(ParamConstants.P_CLOUDID, CLOUD_ID, ParamConstants.P_REPRESENTATIONNAME, SCHEMA, ParamConstants.P_VER, VERSION, ParamConstants.P_FILENAME, FILE_NAME)); Response response = target(uri.toString()).request().get(); assertThat(response.getStatus(), is(200)); assertEquals(MANIFEST_OK, getResponseContent(response)); } private String getResponseContent(Response response) { Object entity = response.getEntity(); if (entity instanceof InputStream) { InputStream is = (InputStream) entity; Scanner s = new Scanner(is).useDelimiter("\\A"); try { if (s.hasNext()) return s.next(); } finally { s.close(); } } return null; } @Test public void getManifestReturns404IfFileDoesNotExist() throws Exception { Mockito.when(translator.getResponse(CLOUD_ID, SCHEMA, VERSION, FILE_NAME_2)).thenReturn(null); URI uri = UriBuilder.fromResource(ImagesResource.class).path(ImagesResource.class, "getManifest") .buildFromMap(ImmutableMap.<String, String>of(ParamConstants.P_CLOUDID, CLOUD_ID, ParamConstants.P_REPRESENTATIONNAME, SCHEMA, ParamConstants.P_VER, VERSION, ParamConstants.P_FILENAME, FILE_NAME_2)); Response response = target(uri.toString()).request().get(); assertThat(response.getStatus(), is(404)); } }