package eu.europeana.cloud.service.uis; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; import java.util.ArrayList; import javax.ws.rs.Path; import javax.ws.rs.client.Entity; import javax.ws.rs.client.WebTarget; import javax.ws.rs.core.Application; import javax.ws.rs.core.Response; import org.glassfish.jersey.test.JerseyTest; import org.junit.Before; import org.junit.Test; import org.mockito.Mockito; import org.springframework.context.ApplicationContext; import eu.europeana.cloud.common.exceptions.ProviderDoesNotExistException; import eu.europeana.cloud.common.model.DataProvider; import eu.europeana.cloud.common.model.DataProviderProperties; import eu.europeana.cloud.common.response.ResultSlice; import eu.europeana.cloud.common.web.ParamConstants; import eu.europeana.cloud.service.uis.exception.ProviderAlreadyExistsException; import eu.europeana.cloud.service.uis.rest.DataProvidersResource; import eu.europeana.cloud.service.uis.rest.JerseyConfig; /** * DataProviderResourceTest */ public class DataProvidersResourceTest extends JerseyTest { private DataProviderService dataProviderService; private WebTarget dataProvidersWebTarget; @Override public Application configure() { return new JerseyConfig().property("contextConfigLocation", "classpath:/uis-context-test.xml"); } /** * Get the mocks form the application context */ @Before public void mockUp() { ApplicationContext applicationContext = ApplicationContextUtils.getApplicationContext(); dataProviderService = applicationContext.getBean(DataProviderService.class); dataProvidersWebTarget = target(DataProvidersResource.class.getAnnotation(Path.class).value()); } /** * Test return empty list when provider does not exist */ @Test public void shouldReturnEmptyListOfProvidersIfNoneExists() { // given there is no provider Mockito.when(dataProviderService.getProviders(Mockito.anyString(), Mockito.anyInt())).thenReturn( new ResultSlice<DataProvider>()); // when you list all providers Response listDataProvidersResponse = dataProvidersWebTarget.request().get(); assertEquals(Response.Status.OK.getStatusCode(), listDataProvidersResponse.getStatus()); @SuppressWarnings("unchecked") ResultSlice<DataProvider> dataProviders = listDataProvidersResponse.readEntity(ResultSlice.class); // then you should get empty list assertTrue("Expected empty list of data providers", dataProviders.getResults().isEmpty()); } /** * Create a new provider * * @throws ProviderDoesNotExistException * @throws ProviderAlreadyExistsException */ @Test public void shouldCreateProvider() throws ProviderDoesNotExistException, ProviderAlreadyExistsException { // given certain provider data DataProviderProperties properties = new DataProviderProperties(); properties.setOrganisationName("Organizacja"); properties.setRemarks("Remarks"); String providerName = "provident"; DataProvider dp = new DataProvider(); dp.setId(providerName); dp.setProperties(properties); Mockito.when(dataProviderService.createProvider(providerName, properties)).thenReturn(dp); Mockito.when(dataProviderService.getProvider(providerName)).thenReturn(dp); // when you put the provider into storage WebTarget providentWebTarget = dataProvidersWebTarget.queryParam(ParamConstants.F_PROVIDER, providerName); Response putResponse = providentWebTarget.request().post(Entity.json(properties)); assertEquals(Response.Status.CREATED.getStatusCode(), putResponse.getStatus()); // then the inserted provider should be in service DataProvider provider = dataProviderService.getProvider(providerName); assertEquals(providerName, provider.getId()); assertEquals(properties, provider.getProperties()); } /** * Return a newly created provider * * @throws ProviderAlreadyExistsException */ @Test public void shouldReturnInsertedProviderOnList() throws ProviderAlreadyExistsException { // given one provider in service String providerName = "provident"; ResultSlice<DataProvider> dpSlice = new ResultSlice<>(); final DataProvider dp = new DataProvider(); dp.setId(providerName); dpSlice.setResults(new ArrayList<DataProvider>() { { add(dp); } }); Mockito.when(dataProviderService.getProviders(Mockito.anyString(), Mockito.anyInt())).thenReturn( dpSlice); // when you list all providers Response listDataProvidersResponse = dataProvidersWebTarget.request().get(); assertEquals(Response.Status.OK.getStatusCode(), listDataProvidersResponse.getStatus()); @SuppressWarnings("unchecked") ResultSlice<DataProvider> dataProviders = listDataProvidersResponse.readEntity(ResultSlice.class); // then there should be exactly one provider, the same as inserted assertEquals("Expected single data provider on list", 1, dataProviders.getResults().size()); assertEquals("Wrong provider identifier", providerName, dataProviders.getResults().get(0).getId()); } }