package org.axway.grapes.server.webapp.resources; import com.google.common.collect.Lists; import com.sun.jersey.api.client.ClientResponse; import com.sun.jersey.api.client.GenericType; import com.sun.jersey.api.client.WebResource; import com.sun.jersey.api.client.filter.HTTPBasicAuthFilter; import com.yammer.dropwizard.auth.AuthenticationException; import com.yammer.dropwizard.auth.basic.BasicAuthProvider; import com.yammer.dropwizard.testing.ResourceTest; import com.yammer.dropwizard.views.ViewMessageBodyWriter; import org.axway.grapes.commons.api.ServerAPI; import org.axway.grapes.server.GrapesTestUtils; import org.axway.grapes.server.config.GrapesServerConfig; import org.axway.grapes.server.db.RepositoryHandler; import org.axway.grapes.server.db.datamodel.DbCredential; import org.axway.grapes.server.db.datamodel.DbModule; import org.axway.grapes.server.db.datamodel.DbProduct; import org.axway.grapes.server.webapp.auth.GrapesAuthenticator; import org.eclipse.jetty.http.HttpStatus; import org.junit.Test; import org.mockito.ArgumentCaptor; import javax.ws.rs.core.MediaType; import java.net.UnknownHostException; import java.util.ArrayList; import java.util.Collections; import java.util.List; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.mockito.Mockito.*; public class ProductResourceTest extends ResourceTest { private RepositoryHandler repositoryHandler; @Override protected void setUpResources() throws Exception { repositoryHandler = GrapesTestUtils.getRepoHandlerMock(); final ProductResource resource = new ProductResource(repositoryHandler, mock(GrapesServerConfig.class)); addProvider(new BasicAuthProvider<DbCredential>(new GrapesAuthenticator(repositoryHandler), "test auth")); addProvider(ViewMessageBodyWriter.class); addResource(resource); } @Test public void getDocumentation(){ WebResource resource = client().resource("/" + ServerAPI.PRODUCT_RESOURCE); ClientResponse response = resource.type(MediaType.TEXT_HTML).get(ClientResponse.class); assertNotNull(response); assertEquals(HttpStatus.OK_200, response.getStatus()); } @Test public void createProduct(){ client().addFilter(new HTTPBasicAuthFilter(GrapesTestUtils.USER_4TEST, GrapesTestUtils.PASSWORD_4TEST)); WebResource resource = client().resource("/" + ServerAPI.PRODUCT_RESOURCE); ClientResponse response = resource.type(MediaType.APPLICATION_JSON).post(ClientResponse.class, "product"); assertNotNull(response); assertEquals(HttpStatus.CREATED_201, response.getStatus()); } @Test public void createProductWithEmptyName() throws AuthenticationException, UnknownHostException { client().addFilter(new HTTPBasicAuthFilter(GrapesTestUtils.USER_4TEST, GrapesTestUtils.PASSWORD_4TEST)); WebResource resource = client().resource("/" + ServerAPI.PRODUCT_RESOURCE); ClientResponse response = resource.type(MediaType.APPLICATION_JSON).post(ClientResponse.class, ""); assertNotNull(response); assertEquals(HttpStatus.BAD_REQUEST_400, response.getStatus()); response = resource.type(MediaType.APPLICATION_JSON).post(ClientResponse.class, null); assertNotNull(response); assertEquals(HttpStatus.BAD_REQUEST_400, response.getStatus()); } @Test public void getAllProductNames(){ final List<String> names = Lists.newArrayList("product1", "product2", "product3"); when(repositoryHandler.getProductNames()).thenReturn(names); WebResource resource = client().resource("/" + ServerAPI.PRODUCT_RESOURCE + ServerAPI.GET_NAMES); ClientResponse response = resource.accept(MediaType.APPLICATION_JSON).get(ClientResponse.class); assertNotNull(response); assertEquals(HttpStatus.OK_200, response.getStatus()); ArrayList<String> productNames = response.getEntity(ArrayList.class); assertNotNull(productNames); assertEquals(3, productNames.size()); } @Test public void getAProduct(){ final DbProduct product = new DbProduct(); product.setName("product1"); when(repositoryHandler.getProduct(product.getName())).thenReturn(product); WebResource resource = client().resource("/" + ServerAPI.PRODUCT_RESOURCE + "/" + product.getName()); ClientResponse response = resource.accept(MediaType.TEXT_HTML).get(ClientResponse.class); assertNotNull(response); assertEquals(HttpStatus.OK_200, response.getStatus()); } @Test public void deleteAProduct(){ final DbProduct product = new DbProduct(); product.setName("product1"); when(repositoryHandler.getProduct(product.getName())).thenReturn(product); client().addFilter(new HTTPBasicAuthFilter(GrapesTestUtils.USER_4TEST, GrapesTestUtils.PASSWORD_4TEST)); WebResource resource = client().resource("/" + ServerAPI.PRODUCT_RESOURCE + "/" + product.getName()); ClientResponse response = resource.accept(MediaType.APPLICATION_JSON).delete(ClientResponse.class); assertNotNull(response); assertEquals(HttpStatus.OK_200, response.getStatus()); ArgumentCaptor<String> captor = ArgumentCaptor.forClass(String.class); verify(repositoryHandler, times(1)).deleteProduct(captor.capture()); assertEquals(product.getName(), captor.getValue()); } @Test public void deleteAProductThatDoesNotExist(){ client().addFilter(new HTTPBasicAuthFilter(GrapesTestUtils.USER_4TEST, GrapesTestUtils.PASSWORD_4TEST)); WebResource resource = client().resource("/" + ServerAPI.PRODUCT_RESOURCE + "/doesNotExist" ); ClientResponse response = resource.accept(MediaType.APPLICATION_JSON).delete(ClientResponse.class); assertNotNull(response); assertEquals(HttpStatus.NOT_FOUND_404, response.getStatus()); } @Test public void deleteAProductWithoutDeletionRights(){ final DbProduct product = new DbProduct(); product.setName("product1"); when(repositoryHandler.getProduct(product.getName())).thenReturn(product); client().addFilter(new HTTPBasicAuthFilter(GrapesTestUtils.WRONG_USER_4TEST, GrapesTestUtils.WRONG_PASSWORD_4TEST)); WebResource resource = client().resource("/" + ServerAPI.PRODUCT_RESOURCE + "/" + product.getName()); ClientResponse response = resource.accept(MediaType.APPLICATION_JSON).delete(ClientResponse.class); assertNotNull(response); assertEquals(HttpStatus.UNAUTHORIZED_401, response.getStatus()); } @Test public void getProductModules(){ final DbProduct product = new DbProduct(); product.setName("product1"); product.setModules(Lists.newArrayList("module1", "module2", "module3")); when(repositoryHandler.getProduct(product.getName())).thenReturn(product); WebResource resource = client().resource("/" + ServerAPI.PRODUCT_RESOURCE + "/" + product.getName() + ServerAPI.GET_MODULES); ClientResponse response = resource.accept(MediaType.APPLICATION_JSON).get(ClientResponse.class); assertNotNull(response); assertEquals(HttpStatus.OK_200, response.getStatus()); final List<String> results = response.getEntity(new GenericType<List<String>>() { }); assertNotNull(results); assertEquals(3, results.size()); } @Test public void getProductModulesOfAProductThatDoesNotExist(){ WebResource resource = client().resource("/" + ServerAPI.PRODUCT_RESOURCE + "/doesNotExist" + ServerAPI.GET_MODULES); ClientResponse response = resource.accept(MediaType.APPLICATION_JSON).get(ClientResponse.class); assertNotNull(response); assertEquals(HttpStatus.NOT_FOUND_404, response.getStatus()); } @Test public void setProductModuleNames(){ final DbProduct product = new DbProduct(); product.setName("product1"); when(repositoryHandler.getProduct(product.getName())).thenReturn(product); final List<String> moduleNames = Lists.newArrayList("module1", "module2", "module3"); client().addFilter(new HTTPBasicAuthFilter(GrapesTestUtils.USER_4TEST, GrapesTestUtils.PASSWORD_4TEST)); WebResource resource = client().resource("/" + ServerAPI.PRODUCT_RESOURCE + "/" + product.getName() + ServerAPI.GET_MODULES); ClientResponse response = resource.type(MediaType.APPLICATION_JSON).post(ClientResponse.class, moduleNames); assertNotNull(response); assertEquals(HttpStatus.OK_200, response.getStatus()); ArgumentCaptor<DbProduct> captor = ArgumentCaptor.forClass(DbProduct.class); verify(repositoryHandler).store(captor.capture()); assertEquals(moduleNames.size(), captor.getValue().getModules().size()); } @Test public void setProductModuleNamesWithoutEditionRights(){ final DbProduct product = new DbProduct(); product.setName("product1"); when(repositoryHandler.getProduct(product.getName())).thenReturn(product); client().addFilter(new HTTPBasicAuthFilter(GrapesTestUtils.WRONG_USER_4TEST, GrapesTestUtils.WRONG_PASSWORD_4TEST)); WebResource resource = client().resource("/" + ServerAPI.PRODUCT_RESOURCE + "/" + product.getName() + ServerAPI.GET_MODULES); ClientResponse response = resource.type(MediaType.APPLICATION_JSON).post(ClientResponse.class, null); assertNotNull(response); assertEquals(HttpStatus.UNAUTHORIZED_401, response.getStatus()); } @Test public void setProductModuleNamesWithNoModuleNamesInfo(){ final DbProduct product = new DbProduct(); product.setName("product1"); when(repositoryHandler.getProduct(product.getName())).thenReturn(product); client().addFilter(new HTTPBasicAuthFilter(GrapesTestUtils.USER_4TEST, GrapesTestUtils.PASSWORD_4TEST)); WebResource resource = client().resource("/" + ServerAPI.PRODUCT_RESOURCE + "/" + product.getName() + ServerAPI.GET_MODULES); ClientResponse response = resource.type(MediaType.APPLICATION_JSON).post(ClientResponse.class, null); assertNotNull(response); assertEquals(HttpStatus.BAD_REQUEST_400, response.getStatus()); } @Test public void setProductModuleNamesOnAProductThatDoesNotExist(){ client().addFilter(new HTTPBasicAuthFilter(GrapesTestUtils.USER_4TEST, GrapesTestUtils.PASSWORD_4TEST)); WebResource resource = client().resource("/" + ServerAPI.PRODUCT_RESOURCE + "/doesNotExist" + ServerAPI.GET_MODULES); ClientResponse response = resource.type(MediaType.APPLICATION_JSON).post(ClientResponse.class, new ArrayList<String>()); assertNotNull(response); assertEquals(HttpStatus.NOT_FOUND_404, response.getStatus()); } @Test public void getDeliveries(){ final DbProduct product = new DbProduct(); product.setName("product1"); product.getDeliveries().put("delivery1", Collections.<String>emptyList()); when(repositoryHandler.getProduct(product.getName())).thenReturn(product); WebResource resource = client().resource("/" + ServerAPI.PRODUCT_RESOURCE + "/" + product.getName() + ServerAPI.GET_DELIVERIES); ClientResponse response = resource.type(MediaType.APPLICATION_JSON).get(ClientResponse.class); assertNotNull(response); assertEquals(HttpStatus.OK_200, response.getStatus()); ArrayList<String> deliveries = response.getEntity(ArrayList.class); assertNotNull(deliveries); assertEquals(1, deliveries.size()); assertEquals("delivery1", deliveries.get(0)); } @Test public void getDeliveriesOfAProductThatDoesNotExist(){ WebResource resource = client().resource("/" + ServerAPI.PRODUCT_RESOURCE + "/doesNotExist" + ServerAPI.GET_DELIVERIES); ClientResponse response = resource.type(MediaType.APPLICATION_JSON).get(ClientResponse.class); assertNotNull(response); assertEquals(HttpStatus.NOT_FOUND_404, response.getStatus()); } @Test public void createANewDelivery(){ final DbProduct product = new DbProduct(); product.setName("product1"); when(repositoryHandler.getProduct(product.getName())).thenReturn(product); client().addFilter(new HTTPBasicAuthFilter(GrapesTestUtils.USER_4TEST, GrapesTestUtils.PASSWORD_4TEST)); WebResource resource = client().resource("/" + ServerAPI.PRODUCT_RESOURCE + "/" + product.getName() + ServerAPI.GET_DELIVERIES); ClientResponse response = resource.type(MediaType.APPLICATION_JSON).post(ClientResponse.class, "delivery1"); assertNotNull(response); assertEquals(HttpStatus.CREATED_201, response.getStatus()); ArgumentCaptor<DbProduct> captor = ArgumentCaptor.forClass(DbProduct.class); verify(repositoryHandler).store(captor.capture()); assertEquals(1, captor.getValue().getDeliveries().size()); assertEquals("delivery1", captor.getValue().getDeliveries().keySet().iterator().next()); } @Test public void createADeliveryButForgottingTheName(){ final DbProduct product = new DbProduct(); product.setName("product1"); when(repositoryHandler.getProduct(product.getName())).thenReturn(product); client().addFilter(new HTTPBasicAuthFilter(GrapesTestUtils.USER_4TEST, GrapesTestUtils.PASSWORD_4TEST)); WebResource resource = client().resource("/" + ServerAPI.PRODUCT_RESOURCE + "/" + product.getName() + ServerAPI.GET_DELIVERIES); ClientResponse response = resource.type(MediaType.APPLICATION_JSON).post(ClientResponse.class, null); assertNotNull(response); assertEquals(HttpStatus.BAD_REQUEST_400, response.getStatus()); response = resource.type(MediaType.APPLICATION_JSON).post(ClientResponse.class, ""); assertNotNull(response); assertEquals(HttpStatus.BAD_REQUEST_400, response.getStatus()); } @Test public void createADeliveryThatAlreadyExist(){ final DbProduct product = new DbProduct(); product.setName("product1"); product.getDeliveries().put("delivery1", Collections.<String>emptyList()); when(repositoryHandler.getProduct(product.getName())).thenReturn(product); client().addFilter(new HTTPBasicAuthFilter(GrapesTestUtils.USER_4TEST, GrapesTestUtils.PASSWORD_4TEST)); WebResource resource = client().resource("/" + ServerAPI.PRODUCT_RESOURCE + "/" + product.getName() + ServerAPI.GET_DELIVERIES); ClientResponse response = resource.type(MediaType.APPLICATION_JSON).post(ClientResponse.class, "delivery1"); assertNotNull(response); assertEquals(HttpStatus.CONFLICT_409, response.getStatus()); } @Test public void createANewDeliveryButWithoutEditionRights(){ final DbProduct product = new DbProduct(); product.setName("product1"); when(repositoryHandler.getProduct(product.getName())).thenReturn(product); client().addFilter(new HTTPBasicAuthFilter(GrapesTestUtils.WRONG_USER_4TEST, GrapesTestUtils.WRONG_PASSWORD_4TEST)); WebResource resource = client().resource("/" + ServerAPI.PRODUCT_RESOURCE + "/" + product.getName() + ServerAPI.GET_DELIVERIES); ClientResponse response = resource.type(MediaType.APPLICATION_JSON).post(ClientResponse.class, "delivery1"); assertNotNull(response); assertEquals(HttpStatus.UNAUTHORIZED_401, response.getStatus()); } @Test public void getDelivery(){ final DbProduct product = new DbProduct(); product.setName("product1"); product.getDeliveries().put("delivery1", Lists.newArrayList("module1:1.0.0", "module2:1.0.0")); when(repositoryHandler.getProduct(product.getName())).thenReturn(product); WebResource resource = client().resource("/" + ServerAPI.PRODUCT_RESOURCE + "/" + product.getName() + ServerAPI.GET_DELIVERIES + "/delivery1"); ClientResponse response = resource.type(MediaType.APPLICATION_JSON).get(ClientResponse.class); assertNotNull(response); assertEquals(HttpStatus.OK_200, response.getStatus()); ArrayList<String> deliveries = response.getEntity(ArrayList.class); assertNotNull(deliveries); assertEquals(2, deliveries.size()); } @Test public void getDeliveryOfAProductThatDoesNotExist(){ WebResource resource = client().resource("/" + ServerAPI.PRODUCT_RESOURCE + "/doesNotExist" + ServerAPI.GET_DELIVERIES+ "/delivery1"); ClientResponse response = resource.type(MediaType.APPLICATION_JSON).get(ClientResponse.class); assertNotNull(response); assertEquals(HttpStatus.NOT_FOUND_404, response.getStatus()); } @Test public void getDeliveryThatDoesNotExistOnAProductThatExist(){ final DbProduct product = new DbProduct(); product.setName("product1"); when(repositoryHandler.getProduct(product.getName())).thenReturn(product); WebResource resource = client().resource("/" + ServerAPI.PRODUCT_RESOURCE + "/" + product.getName() + ServerAPI.GET_DELIVERIES+ "/doesNotExist"); ClientResponse response = resource.type(MediaType.APPLICATION_JSON).get(ClientResponse.class); assertNotNull(response); assertEquals(HttpStatus.NOT_FOUND_404, response.getStatus()); } @Test public void setModulesDelivery(){ final DbProduct product = new DbProduct(); product.setName("product1"); product.getDeliveries().put("delivery1", Collections.<String>emptyList()); when(repositoryHandler.getProduct(product.getName())).thenReturn(product); final DbModule module = new DbModule(); module.setName("module1"); module.setVersion("1.0.0-SNAPSHOT"); when(repositoryHandler.getModule(module.getId())).thenReturn(module); client().addFilter(new HTTPBasicAuthFilter(GrapesTestUtils.USER_4TEST, GrapesTestUtils.PASSWORD_4TEST)); WebResource resource = client().resource("/" + ServerAPI.PRODUCT_RESOURCE + "/" + product.getName() + ServerAPI.GET_DELIVERIES + "/delivery1" ); ClientResponse response = resource.type(MediaType.APPLICATION_JSON).post(ClientResponse.class, Collections.singletonList(module.getId())); assertNotNull(response); assertEquals(HttpStatus.CREATED_201, response.getStatus()); ArgumentCaptor<DbProduct> captor = ArgumentCaptor.forClass(DbProduct.class); verify(repositoryHandler).store(captor.capture()); assertEquals(1, captor.getValue().getDeliveries().size()); assertEquals("delivery1", captor.getValue().getDeliveries().keySet().iterator().next()); assertEquals(1, captor.getValue().getDeliveries().values().size()); assertNotNull(captor.getValue().getDeliveries().get("delivery1")); assertEquals(1, captor.getValue().getDeliveries().get("delivery1").size()); assertEquals(module.getId(), captor.getValue().getDeliveries().get("delivery1").get(0)); } @Test public void setModulesDeliveryWithModulesThatDoesNotExist(){ final DbProduct product = new DbProduct(); product.setName("product1"); product.getDeliveries().put("delivery1", Collections.<String>emptyList()); when(repositoryHandler.getProduct(product.getName())).thenReturn(product); final DbModule module = new DbModule(); module.setName("module1"); module.setVersion("1.0.0-SNAPSHOT"); client().addFilter(new HTTPBasicAuthFilter(GrapesTestUtils.USER_4TEST, GrapesTestUtils.PASSWORD_4TEST)); WebResource resource = client().resource("/" + ServerAPI.PRODUCT_RESOURCE + "/" + product.getName() + ServerAPI.GET_DELIVERIES + "/delivery1" ); ClientResponse response = resource.type(MediaType.APPLICATION_JSON).post(ClientResponse.class, Collections.singletonList(module.getId())); assertNotNull(response); assertEquals(HttpStatus.NOT_FOUND_404, response.getStatus()); } @Test public void setModulesDeliveryWithDeliveryThatDoesNotExist(){ final DbProduct product = new DbProduct(); product.setName("product1"); when(repositoryHandler.getProduct(product.getName())).thenReturn(product); final DbModule module = new DbModule(); module.setName("module1"); module.setVersion("1.0.0-SNAPSHOT"); when(repositoryHandler.getModule(module.getId())).thenReturn(module); client().addFilter(new HTTPBasicAuthFilter(GrapesTestUtils.USER_4TEST, GrapesTestUtils.PASSWORD_4TEST)); WebResource resource = client().resource("/" + ServerAPI.PRODUCT_RESOURCE + "/" + product.getName() + ServerAPI.GET_DELIVERIES + "/doesNotExist" ); ClientResponse response = resource.type(MediaType.APPLICATION_JSON).post(ClientResponse.class, Collections.singletonList(module.getId())); assertNotNull(response); assertEquals(HttpStatus.NOT_FOUND_404, response.getStatus()); } @Test public void setModulesDeliveryWithProductThatDoesNotExist(){ final DbModule module = new DbModule(); module.setName("module1"); module.setVersion("1.0.0-SNAPSHOT"); when(repositoryHandler.getModule(module.getId())).thenReturn(module); client().addFilter(new HTTPBasicAuthFilter(GrapesTestUtils.USER_4TEST, GrapesTestUtils.PASSWORD_4TEST)); WebResource resource = client().resource("/" + ServerAPI.PRODUCT_RESOURCE + "/doesNotExist" + ServerAPI.GET_DELIVERIES + "/delivery1"); ClientResponse response = resource.type(MediaType.APPLICATION_JSON).post(ClientResponse.class, Collections.singletonList(module.getId())); assertNotNull(response); assertEquals(HttpStatus.NOT_FOUND_404, response.getStatus()); } @Test public void setModulesDeliveryWithoutEditionRights(){ final DbProduct product = new DbProduct(); product.setName("product1"); product.getDeliveries().put("delivery1", Collections.<String>emptyList()); when(repositoryHandler.getProduct(product.getName())).thenReturn(product); final DbModule module = new DbModule(); module.setName("module1"); module.setVersion("1.0.0-SNAPSHOT"); when(repositoryHandler.getModule(module.getId())).thenReturn(module); client().addFilter(new HTTPBasicAuthFilter(GrapesTestUtils.WRONG_USER_4TEST, GrapesTestUtils.WRONG_PASSWORD_4TEST)); WebResource resource = client().resource("/" + ServerAPI.PRODUCT_RESOURCE + "/" + product.getName() + ServerAPI.GET_DELIVERIES + "/delivery1" ); ClientResponse response = resource.type(MediaType.APPLICATION_JSON).post(ClientResponse.class, Collections.singletonList(module.getId())); assertNotNull(response); assertEquals(HttpStatus.UNAUTHORIZED_401, response.getStatus()); } @Test public void deleteDelivery(){ final DbProduct product = new DbProduct(); product.setName("product1"); product.getDeliveries().put("delivery1", Collections.<String>emptyList()); when(repositoryHandler.getProduct(product.getName())).thenReturn(product); client().addFilter(new HTTPBasicAuthFilter(GrapesTestUtils.USER_4TEST, GrapesTestUtils.PASSWORD_4TEST)); WebResource resource = client().resource("/" + ServerAPI.PRODUCT_RESOURCE + "/" + product.getName() + ServerAPI.GET_DELIVERIES + "/delivery1" ); ClientResponse response = resource.type(MediaType.APPLICATION_JSON).delete(ClientResponse.class); assertNotNull(response); assertEquals(HttpStatus.OK_200, response.getStatus()); ArgumentCaptor<DbProduct> captor = ArgumentCaptor.forClass(DbProduct.class); verify(repositoryHandler).store(captor.capture()); assertEquals(0, captor.getValue().getDeliveries().size()); } @Test public void deleteDeliveryThatDoesNotExist(){ final DbProduct product = new DbProduct(); product.setName("product1"); when(repositoryHandler.getProduct(product.getName())).thenReturn(product); client().addFilter(new HTTPBasicAuthFilter(GrapesTestUtils.USER_4TEST, GrapesTestUtils.PASSWORD_4TEST)); WebResource resource = client().resource("/" + ServerAPI.PRODUCT_RESOURCE + "/" + product.getName() + ServerAPI.GET_DELIVERIES + "/delivery1" ); ClientResponse response = resource.type(MediaType.APPLICATION_JSON).delete(ClientResponse.class); assertNotNull(response); assertEquals(HttpStatus.NOT_FOUND_404, response.getStatus()); } @Test public void deleteDeliveryFromProductThatDoesNotExist(){ client().addFilter(new HTTPBasicAuthFilter(GrapesTestUtils.USER_4TEST, GrapesTestUtils.PASSWORD_4TEST)); WebResource resource = client().resource("/" + ServerAPI.PRODUCT_RESOURCE + "/doesNotExist" + ServerAPI.GET_DELIVERIES + "/delivery1" ); ClientResponse response = resource.type(MediaType.APPLICATION_JSON).delete(ClientResponse.class); assertNotNull(response); assertEquals(HttpStatus.NOT_FOUND_404, response.getStatus()); } @Test public void deleteDeliveryWithoutDeletionRights(){ final DbProduct product = new DbProduct(); product.setName("product1"); product.getDeliveries().put("delivery1", Collections.<String>emptyList()); when(repositoryHandler.getProduct(product.getName())).thenReturn(product); client().addFilter(new HTTPBasicAuthFilter(GrapesTestUtils.WRONG_USER_4TEST, GrapesTestUtils.WRONG_PASSWORD_4TEST)); WebResource resource = client().resource("/" + ServerAPI.PRODUCT_RESOURCE + "/" + product.getName() + ServerAPI.GET_DELIVERIES + "/delivery1" ); ClientResponse response = resource.type(MediaType.APPLICATION_JSON).delete(ClientResponse.class); assertNotNull(response); assertEquals(HttpStatus.UNAUTHORIZED_401, response.getStatus()); } }