From 64910d2d770fd6d95a6afd87f276c05f11f060e7 Mon Sep 17 00:00:00 2001 From: Jamal Kaabi-Mofrad Date: Tue, 10 May 2016 11:04:11 +0000 Subject: [PATCH] Merged FILE-FOLDER-API (5.2.0) to HEAD (5.2) 122317 gjames: Adding more test coverage of the webscript executors git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@126465 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261 --- .../tests/api/mocks/GrassEntityResource.java | 16 +- .../api/mocks3/GoatRelationshipResource.java | 9 +- .../tests/core/AbstractContextTest.java | 84 +++++++++ .../tests/core/AllRestFrameworkTest.java | 2 +- .../framework/tests/core/ExecutionTests.java | 168 ++++++++++++++++++ .../framework/tests/core/SerializeTests.java | 82 +-------- source/test-resources/test-rest-context.xml | 14 +- 7 files changed, 290 insertions(+), 85 deletions(-) create mode 100644 source/test-java/org/alfresco/rest/framework/tests/core/AbstractContextTest.java create mode 100644 source/test-java/org/alfresco/rest/framework/tests/core/ExecutionTests.java diff --git a/source/test-java/org/alfresco/rest/framework/tests/api/mocks/GrassEntityResource.java b/source/test-java/org/alfresco/rest/framework/tests/api/mocks/GrassEntityResource.java index b96ab852a7..9cb5c43b25 100644 --- a/source/test-java/org/alfresco/rest/framework/tests/api/mocks/GrassEntityResource.java +++ b/source/test-java/org/alfresco/rest/framework/tests/api/mocks/GrassEntityResource.java @@ -8,8 +8,10 @@ import org.alfresco.rest.framework.resource.EntityResource; import org.alfresco.rest.framework.resource.actions.interfaces.EntityResourceAction; import org.alfresco.rest.framework.resource.parameters.Parameters; +import java.util.List; + @EntityResource(name = "grass", title="Grass") -public class GrassEntityResource implements EntityResourceAction.ReadById{ +public class GrassEntityResource implements EntityResourceAction.ReadById, EntityResourceAction.Create, EntityResourceAction.Delete { @Override @WebApiDescription(title = "Gets grass by id") @@ -31,4 +33,16 @@ public class GrassEntityResource implements EntityResourceAction.ReadById return "Growing well"; } + @Override + @WebApiDescription(title = "Create some grass") + public List create(List entity, Parameters parameters) + { + return entity; + } + + @Override + public void delete(String id, Parameters parameters) + { + //I did a delete + } } diff --git a/source/test-java/org/alfresco/rest/framework/tests/api/mocks3/GoatRelationshipResource.java b/source/test-java/org/alfresco/rest/framework/tests/api/mocks3/GoatRelationshipResource.java index 732910e093..0efe496b0a 100644 --- a/source/test-java/org/alfresco/rest/framework/tests/api/mocks3/GoatRelationshipResource.java +++ b/source/test-java/org/alfresco/rest/framework/tests/api/mocks3/GoatRelationshipResource.java @@ -21,7 +21,7 @@ import java.io.File; * @author Gethin James */ @RelationshipResource(name = "herd",entityResource=GoatEntityResourceForV3.class, title = "Goat Herd") -public class GoatRelationshipResource implements RelationshipResourceAction.Read, RelationshipResourceBinaryAction.Read +public class GoatRelationshipResource implements RelationshipResourceAction.Read, RelationshipResourceBinaryAction.Read, RelationshipResourceBinaryAction.Delete { @Override public CollectionWithPagingInfo readAll(String entityResourceId, Parameters params) @@ -36,4 +36,11 @@ public class GoatRelationshipResource implements RelationshipResourceAction.Read File file = TempFileProvider.createTempFile("Its a goat", ".txt"); return new FileBinaryResource(file); } + + @Override + @BinaryProperties({"content"}) + public void deleteProperty(String entityId, String entityResourceId, Parameters parameters) + { + //Its deleted + } } diff --git a/source/test-java/org/alfresco/rest/framework/tests/core/AbstractContextTest.java b/source/test-java/org/alfresco/rest/framework/tests/core/AbstractContextTest.java new file mode 100644 index 0000000000..148b91bba0 --- /dev/null +++ b/source/test-java/org/alfresco/rest/framework/tests/core/AbstractContextTest.java @@ -0,0 +1,84 @@ +package org.alfresco.rest.framework.tests.core; + +import static org.mockito.Matchers.any; +import static org.mockito.Matchers.anyBoolean; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; + +import org.alfresco.repo.transaction.RetryingTransactionHelper; +import org.alfresco.rest.framework.Api; +import org.alfresco.rest.framework.core.ResourceDictionaryBuilder; +import org.alfresco.rest.framework.core.ResourceLookupDictionary; +import org.alfresco.rest.framework.jacksonextensions.JacksonHelper; +import org.alfresco.rest.framework.resource.EntityResource; +import org.alfresco.rest.framework.resource.RelationshipResource; +import org.alfresco.rest.framework.resource.parameters.Params; +import org.alfresco.rest.framework.webscripts.AbstractResourceWebScript; +import org.alfresco.rest.framework.webscripts.ResourceWebScriptHelper; +import org.alfresco.service.transaction.TransactionService; +import org.junit.Before; +import org.junit.runner.RunWith; +import org.mockito.invocation.InvocationOnMock; +import org.mockito.stubbing.Answer; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.ApplicationContext; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; + +import java.util.Map; + +/** + * Uses a test context and sets up some data. + */ +@RunWith(SpringJUnit4ClassRunner.class) +@ContextConfiguration(locations = { "classpath:test-rest-context.xml" }) +public abstract class AbstractContextTest +{ + @Autowired + ResourceLookupDictionary locator; + + @Autowired + ApplicationContext applicationContext; + + @Autowired + ResourceWebScriptHelper helper; + + @Autowired + JacksonHelper jsonHelper; + + static Params NOT_USED = Params.valueOf("notUsed", null); + static final Params.RecognizedParams NULL_PARAMS = new Params.RecognizedParams(null, null, null, null, null, null, null, false); + static Api api = Api.valueOf("alfrescomock", "private", "1"); + + @SuppressWarnings("unchecked") + @Before + public void setUp() throws Exception + { + Map entityResourceBeans = applicationContext.getBeansWithAnnotation(EntityResource.class); + Map relationResourceBeans = applicationContext.getBeansWithAnnotation(RelationshipResource.class); + locator.setDictionary(ResourceDictionaryBuilder.build(entityResourceBeans.values(), relationResourceBeans.values())); + AbstractResourceWebScript executor = (AbstractResourceWebScript) applicationContext.getBean("executorOfGets"); + AbstractResourceWebScript postExecutor = (AbstractResourceWebScript) applicationContext.getBean("executorOfPost"); + AbstractResourceWebScript putExecutor = (AbstractResourceWebScript) applicationContext.getBean("executorOfPut"); + AbstractResourceWebScript deleteExecutor = (AbstractResourceWebScript) applicationContext.getBean("executorOfDelete"); + + //Mock transaction service + TransactionService transerv = mock(TransactionService.class); + RetryingTransactionHelper tHelper = mock(RetryingTransactionHelper.class); + when(transerv.getRetryingTransactionHelper()).thenReturn(tHelper); + when(tHelper.doInTransaction(any(RetryingTransactionHelper.RetryingTransactionCallback.class), anyBoolean(), anyBoolean())).thenAnswer(new Answer() { + @SuppressWarnings("rawtypes") + @Override + public Object answer(InvocationOnMock invocation) throws Throwable { + Object[] args = invocation.getArguments(); + RetryingTransactionHelper.RetryingTransactionCallback cb = (RetryingTransactionHelper.RetryingTransactionCallback) args[0]; + cb.execute(); + return null; + } + }); + executor.setTransactionService(transerv); + postExecutor.setTransactionService(transerv); + putExecutor.setTransactionService(transerv); + deleteExecutor.setTransactionService(transerv); + } +} diff --git a/source/test-java/org/alfresco/rest/framework/tests/core/AllRestFrameworkTest.java b/source/test-java/org/alfresco/rest/framework/tests/core/AllRestFrameworkTest.java index adcdf766db..82c0b47c36 100644 --- a/source/test-java/org/alfresco/rest/framework/tests/core/AllRestFrameworkTest.java +++ b/source/test-java/org/alfresco/rest/framework/tests/core/AllRestFrameworkTest.java @@ -10,7 +10,7 @@ import org.junit.runners.Suite.SuiteClasses; */ @RunWith(Suite.class) @SuiteClasses({ InspectorTests.class, JsonJacksonTests.class, ParamsExtractorTests.class, - ResourceLocatorTests.class, ResourceWebScriptHelperTests.class, SerializeTests.class, WhereTests.class }) + ResourceLocatorTests.class, ResourceWebScriptHelperTests.class, SerializeTests.class, WhereTests.class, ExecutionTests.class }) public class AllRestFrameworkTest { diff --git a/source/test-java/org/alfresco/rest/framework/tests/core/ExecutionTests.java b/source/test-java/org/alfresco/rest/framework/tests/core/ExecutionTests.java new file mode 100644 index 0000000000..e5d35cf450 --- /dev/null +++ b/source/test-java/org/alfresco/rest/framework/tests/core/ExecutionTests.java @@ -0,0 +1,168 @@ +package org.alfresco.rest.framework.tests.core; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; + +import org.alfresco.rest.framework.Api; +import org.alfresco.rest.framework.core.ResourceLookupDictionary; +import org.alfresco.rest.framework.core.ResourceWithMetadata; +import org.alfresco.rest.framework.jacksonextensions.ExecutionResult; +import org.alfresco.rest.framework.resource.actions.ActionExecutor; +import org.alfresco.rest.framework.resource.content.ContentInfo; +import org.alfresco.rest.framework.resource.parameters.CollectionWithPagingInfo; +import org.alfresco.rest.framework.resource.parameters.Params; +import org.alfresco.rest.framework.tests.api.mocks.Grass; +import org.alfresco.rest.framework.tests.api.mocks.Sheep; +import org.alfresco.rest.framework.webscripts.AbstractResourceWebScript; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.ApplicationContext; +import org.springframework.http.HttpMethod; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; + +import java.io.IOException; +import java.util.Arrays; + +/** + * Tests the execution of resources + */ + +public class ExecutionTests extends AbstractContextTest +{ + static final Api api3 = Api.valueOf("alfrescomock", "private", "3"); + + @Test + public void testInvokeGet() throws IOException + { + ResourceWithMetadata entityResource = locator.locateEntityResource(api,"sheep", HttpMethod.GET); + AbstractResourceWebScript executor = (AbstractResourceWebScript) applicationContext.getBean("executorOfGets"); + executor.execute(entityResource, Params.valueOf((String)null, null), new ActionExecutor.ExecutionCallback(){ + @Override + public void onSuccess(CollectionWithPagingInfo result, ContentInfo contentInfo) + { + assertNotNull(result); + }}); + + ResourceWithMetadata baa = locator.locateRelationResource(api,"sheep", "baaahh", HttpMethod.GET); + executor = (AbstractResourceWebScript) applicationContext.getBean("executorOfGets"); + executor.execute(baa, Params.valueOf("4", null), new ActionExecutor.ExecutionCallback(){ + @Override + public void onSuccess(CollectionWithPagingInfo result, ContentInfo contentInfo) + { + assertNotNull(result); + }}); + + executor.execute(baa, Params.valueOf("4", "45"), new ActionExecutor.ExecutionCallback(){ + @Override + public void onSuccess(ExecutionResult result, ContentInfo contentInfo) + { + assertNotNull(result); + }}); + + ResourceWithMetadata baaPhoto = locator.locateRelationResource(api,"sheep/{entityId}/baaahh", "photo", HttpMethod.GET); + executor.execute(baaPhoto, Params.valueOf("4", "45"), new ActionExecutor.ExecutionCallback(){ + @Override + public void onSuccess(CollectionWithPagingInfo result, ContentInfo contentInfo) + { + assertNull(result); + }}); + + } + + @Test + public void testInvokePost() throws IOException + { + AbstractResourceWebScript executor = (AbstractResourceWebScript) applicationContext.getBean("executorOfPost"); + + ResourceWithMetadata resource = locator.locateRelationResource(api, "sheep", "blacksheep", HttpMethod.POST); + final Sheep aSheep = new Sheep("xyz"); + executor.execute(resource, Params.valueOf("654", null, NULL_PARAMS, Arrays.asList(aSheep)), new ActionExecutor.ExecutionCallback(){ + @Override + public void onSuccess(ExecutionResult result, ContentInfo contentInfo) + { + assertNotNull(result); + assertEquals(aSheep,result.getRoot()); + }}); + + ResourceWithMetadata grassResource = locator.locateEntityResource(api,"grass", HttpMethod.POST); + final Grass grr = new Grass("grr"); + executor.execute(grassResource, Params.valueOf("654", null, NULL_PARAMS, Arrays.asList(grr)), new ActionExecutor.ExecutionCallback(){ + @Override + public void onSuccess(ExecutionResult result, ContentInfo contentInfo) + { + assertEquals(grr,result.getRoot()); + }}); + + ResourceWithMetadata entityResource = locator.locateRelationResource(api,"grass", "grow", HttpMethod.POST); + executor.execute(entityResource, Params.valueOf("654", null, NULL_PARAMS, grr), new ActionExecutor.ExecutionCallback(){ + @Override + public void onSuccess(String result, ContentInfo contentInfo) + { + assertEquals("Growing well",result); + }}); + + } + + @Test + public void testInvokeDelete() throws IOException + { + ResourceWithMetadata grassResource = locator.locateEntityResource(api,"grass", HttpMethod.DELETE); + AbstractResourceWebScript executor = (AbstractResourceWebScript) applicationContext.getBean("executorOfDelete"); + executor.execute(grassResource, Params.valueOf("4", null), new ActionExecutor.ExecutionCallback(){ + @Override + public void onSuccess(Object result, ContentInfo contentInfo) + { + assertNull(result); + }}); + ResourceWithMetadata resource = locator.locateRelationResource(api, "sheep", "blacksheep", HttpMethod.DELETE); + executor.execute(resource, Params.valueOf("4", null), new ActionExecutor.ExecutionCallback(){ + @Override + public void onSuccess(Object result, ContentInfo contentInfo) + { + assertNull(result); + }}); + + ResourceWithMetadata goatDelete = locator.locateRelationResource(api3,"goat/{entityId}/herd", "content", HttpMethod.DELETE); + executor.execute(goatDelete, Params.valueOf("4", "56"), new ActionExecutor.ExecutionCallback(){ + @Override + public void onSuccess(Object result, ContentInfo contentInfo) + { + assertNull(result); + }}); + } + + + @Test + public void testInvokePut() throws IOException + { + ResourceWithMetadata entityResource = locator.locateEntityResource(api,"sheep", HttpMethod.PUT); + AbstractResourceWebScript executor = (AbstractResourceWebScript) applicationContext.getBean("executorOfPut"); + final Sheep aSheep = new Sheep("xyz"); + executor.execute(entityResource, Params.valueOf("654", null, NULL_PARAMS, aSheep), new ActionExecutor.ExecutionCallback(){ + @Override + public void onSuccess(ExecutionResult result, ContentInfo contentInfo) + { + assertNotNull(result); + assertEquals(aSheep,result.getRoot()); + }}); + + ResourceWithMetadata resource = locator.locateRelationResource(api, "sheep", "blacksheep", HttpMethod.PUT); + executor.execute(resource, Params.valueOf("654", null, NULL_PARAMS, aSheep), new ActionExecutor.ExecutionCallback(){ + @Override + public void onSuccess(ExecutionResult result, ContentInfo contentInfo) + { + assertNotNull(result); + assertEquals(aSheep,result.getRoot()); + }}); + ResourceWithMetadata baaPhoto = locator.locateRelationResource(api,"sheep/{entityId}/baaahh", "photo", HttpMethod.PUT); + executor.execute(baaPhoto, Params.valueOf("4", "56"), new ActionExecutor.ExecutionCallback(){ + @Override + public void onSuccess(Object result, ContentInfo contentInfo) + { + assertNull(result); + }}); + } +} diff --git a/source/test-java/org/alfresco/rest/framework/tests/core/SerializeTests.java b/source/test-java/org/alfresco/rest/framework/tests/core/SerializeTests.java index 74875af92b..efc186dbb9 100644 --- a/source/test-java/org/alfresco/rest/framework/tests/core/SerializeTests.java +++ b/source/test-java/org/alfresco/rest/framework/tests/core/SerializeTests.java @@ -106,51 +106,9 @@ import java.util.Locale; import java.util.Map; import java.util.Set; -@RunWith(SpringJUnit4ClassRunner.class) -@ContextConfiguration(locations = { "classpath:test-rest-context.xml" }) -public class SerializeTests +public class SerializeTests extends AbstractContextTest { - @Autowired - private ResourceLookupDictionary locator; - @Autowired - private ApplicationContext applicationContext; - - @Autowired - private ResourceWebScriptHelper helper; - - private static Api api = Api.valueOf("alfrescomock", "private", "1"); - private static Params NOT_USED = Params.valueOf("notUsed", null); - - @Autowired - protected JacksonHelper jsonHelper; - - @SuppressWarnings("unchecked") - @Before - public void setUp() throws Exception - { - Map entityResourceBeans = applicationContext.getBeansWithAnnotation(EntityResource.class); - Map relationResourceBeans = applicationContext.getBeansWithAnnotation(RelationshipResource.class); - locator.setDictionary(ResourceDictionaryBuilder.build(entityResourceBeans.values(), relationResourceBeans.values())); - AbstractResourceWebScript executor = (AbstractResourceWebScript) applicationContext.getBean("executorOfGets"); - - //Mock transaction service - TransactionService transerv = mock(TransactionService.class); - RetryingTransactionHelper tHelper = mock(RetryingTransactionHelper.class); - when(transerv.getRetryingTransactionHelper()).thenReturn(tHelper); - when(tHelper.doInTransaction(any(RetryingTransactionCallback.class), anyBoolean(), anyBoolean())).thenAnswer(new Answer() { - @SuppressWarnings("rawtypes") - @Override - public Object answer(InvocationOnMock invocation) throws Throwable { - Object[] args = invocation.getArguments(); - RetryingTransactionCallback cb = (RetryingTransactionCallback) args[0]; - cb.execute(); - return null; - } - }); - executor.setTransactionService(transerv); - } - @Test public void testInvokeEntity() throws IOException { @@ -450,44 +408,6 @@ public class SerializeTests assertNotNull(result); }}); - } - - @Test - public void testInvokeEntities() throws IOException - { - ResourceWithMetadata entityResource = locator.locateEntityResource(api,"sheep", HttpMethod.GET); - AbstractResourceWebScript executor = (AbstractResourceWebScript) applicationContext.getBean("executorOfGets"); - executor.execute(entityResource, Params.valueOf((String)null, null), new ExecutionCallback(){ - @Override - public void onSuccess(CollectionWithPagingInfo result, ContentInfo contentInfo) - { - assertNotNull(result); - }}); - - ResourceWithMetadata baa = locator.locateRelationResource(api,"sheep", "baaahh", HttpMethod.GET); - executor = (AbstractResourceWebScript) applicationContext.getBean("executorOfGets"); - executor.execute(baa, Params.valueOf("4", null), new ExecutionCallback(){ - @Override - public void onSuccess(CollectionWithPagingInfo result, ContentInfo contentInfo) - { - assertNotNull(result); - }}); - - executor.execute(baa, Params.valueOf("4", "45"), new ExecutionCallback(){ - @Override - public void onSuccess(ExecutionResult result, ContentInfo contentInfo) - { - assertNotNull(result); - }}); - - ResourceWithMetadata baaPhoto = locator.locateRelationResource(api,"sheep/{entityId}/baaahh", "photo", HttpMethod.GET); - executor.execute(baaPhoto, Params.valueOf("4", "45"), new ExecutionCallback(){ - @Override - public void onSuccess(ExecutionResult result, ContentInfo contentInfo) - { - assertNull(result); - }}); - } @Test diff --git a/source/test-resources/test-rest-context.xml b/source/test-resources/test-rest-context.xml index 860ee16ada..c35e3f77ac 100644 --- a/source/test-resources/test-rest-context.xml +++ b/source/test-resources/test-rest-context.xml @@ -55,7 +55,19 @@ - + + + + + + + + + + + + +