From ece89ceea0bd98853e593cbbf75091079f0dd276 Mon Sep 17 00:00:00 2001 From: Erik Winlof Date: Wed, 3 Sep 2014 12:32:55 +0000 Subject: [PATCH] Merged HEAD-BUG-FIX (5.0/Cloud) to HEAD (5.0/Cloud) 78551: Merged V4.2-BUG-FIX (4.2.4) to HEAD-BUG-FIX (5.0/Cloud) 77501: Merged DEV to V4.2-BUG-FIX (4.2.4) 76291 : MNT-11511 : All tags are not displayed in repository when the number of nodes taggable is over 1000 - Using tagscope api at search for tags quantity in repository git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@82595 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261 --- .../scripts/tagging/TaggingServiceTest.java | 111 +++++++++++++++++- 1 file changed, 110 insertions(+), 1 deletion(-) diff --git a/source/test-java/org/alfresco/repo/web/scripts/tagging/TaggingServiceTest.java b/source/test-java/org/alfresco/repo/web/scripts/tagging/TaggingServiceTest.java index 4fd25db5d4..48ef418b26 100644 --- a/source/test-java/org/alfresco/repo/web/scripts/tagging/TaggingServiceTest.java +++ b/source/test-java/org/alfresco/repo/web/scripts/tagging/TaggingServiceTest.java @@ -18,23 +18,29 @@ */ package org.alfresco.repo.web.scripts.tagging; +import javax.transaction.UserTransaction; + import org.alfresco.model.ContentModel; import org.alfresco.repo.model.Repository; import org.alfresco.repo.security.authentication.AuthenticationComponent; import org.alfresco.repo.security.authentication.AuthenticationUtil; import org.alfresco.repo.web.scripts.BaseWebScriptTest; import org.alfresco.service.cmr.model.FileFolderService; +import org.alfresco.service.cmr.model.FileInfo; import org.alfresco.service.cmr.repository.NodeRef; import org.alfresco.service.cmr.repository.NodeService; import org.alfresco.service.cmr.repository.StoreRef; import org.alfresco.service.cmr.security.MutableAuthenticationService; import org.alfresco.service.cmr.security.PersonService; import org.alfresco.service.cmr.tagging.TaggingService; +import org.alfresco.service.transaction.TransactionService; import org.alfresco.util.GUID; import org.alfresco.util.PropertyMap; +import org.json.JSONArray; +import org.json.JSONException; +import org.json.JSONObject; import org.springframework.extensions.webscripts.TestWebScriptServer.GetRequest; import org.springframework.extensions.webscripts.TestWebScriptServer.Response; -import org.json.JSONArray; /** * Unit test to test tagging Web Script API @@ -50,6 +56,7 @@ public class TaggingServiceTest extends BaseWebScriptTest private FileFolderService fileFolderService; private Repository repositoryHelper; private NodeService nodeService; + private TransactionService transactionService; private static final String TEST_USER = "TaggingServiceTestUser"; @@ -74,6 +81,7 @@ public class TaggingServiceTest extends BaseWebScriptTest this.fileFolderService = (FileFolderService)getServer().getApplicationContext().getBean("FileFolderService"); this.repositoryHelper = (Repository)getServer().getApplicationContext().getBean("repositoryHelper"); this.nodeService = (NodeService)getServer().getApplicationContext().getBean("NodeService"); + this.transactionService = (TransactionService) getServer().getApplicationContext().getBean("TransactionService"); this.authenticationComponent.setSystemUserAsCurrentUser(); @@ -185,4 +193,105 @@ public class TaggingServiceTest extends BaseWebScriptTest } + public void testTagCountSearch() throws Exception + { + boolean removeTestFolder = false; + boolean removeTagScope = false; + FileInfo testFolderInfo = null; + NodeRef testRoot = this.repositoryHelper.getCompanyHome(); + AuthenticationUtil.pushAuthentication(); + AuthenticationUtil.setRunAsUserSystem(); + + try + { + String guid = GUID.generate(); + testFolderInfo = this.fileFolderService.create(testRoot, "testFldr" + guid, ContentModel.TYPE_FOLDER); + removeTestFolder = true; + String tagName = GUID.generate(); + boolean isTagScope = nodeService.hasAspect(testRoot, ContentModel.ASPECT_TAGSCOPE); + + //generate content with tag + UserTransaction transaction = transactionService.getUserTransaction(); + transaction.begin(); + for (int i = 0; i < 1200; i++) + { + FileInfo file = this.fileFolderService.create(testFolderInfo.getNodeRef(), "testDoc" + i + ".txt", ContentModel.TYPE_CONTENT); + this.taggingService.addTag(file.getNodeRef(), tagName); + } + transaction.commit(); + + + + Response response = null; + JSONObject jsonObj = null; + JSONArray tagsArr = null; + int number = -1; + + // tagScope API: if container isn't tagScope + if (!isTagScope) + { + response = sendRequest(new GetRequest("api/tagscopes/node/" + testRoot.toString().replace(":/", "") + "/tags"), 200); + jsonObj = new JSONObject(response.getContentAsString()); + tagsArr = jsonObj.getJSONArray("tags"); + number = getTagNumber(tagName, tagsArr); + assertEquals("Checking a search via tagScope API: Tag number must be -1, because node isn't a tag scope.", -1, number); + } + + // tag count via search engine + response = sendRequest(new GetRequest("collaboration/tagQuery?s=count&n=alfresco%3A%2F%2Fcompany%2Fhome"), 200); + jsonObj = new JSONObject(response.getContentAsString()); + tagsArr = jsonObj.getJSONArray("tags"); + number = getTagNumber(tagName, tagsArr); + assertTrue("Checking a search via search engine: Tag number must be more then 0", number > 0); + + if (!isTagScope) + { + this.taggingService.addTagScope(testRoot); + removeTagScope = true; + } + + // tag count via tagScope API + response = sendRequest(new GetRequest("api/tagscopes/node/" + testRoot.toString().replace(":/", "") + "/tags"), 200); + jsonObj = new JSONObject(response.getContentAsString()); + tagsArr = jsonObj.getJSONArray("tags"); + number = getTagNumber(tagName, tagsArr); + assertEquals("Checking a search via tagScope API: Tag number must be 1200, because node is a tag scope.", 1200, number); + + } + finally + { + if (removeTestFolder) + { + this.fileFolderService.delete(testFolderInfo.getNodeRef()); + } + if (removeTagScope) + { + taggingService.removeTagScope(testRoot); + } + AuthenticationUtil.popAuthentication(); + } + } + + private int getTagNumber(String tagName, JSONArray jsonTagsArray) throws JSONException + { + int result = -1; + if (jsonTagsArray.length() == 0) + { + return result; + } + + for (int i = 0; i < jsonTagsArray.length(); i++) + { + JSONObject tagObj = jsonTagsArray.getJSONObject(i); + if (tagName.equalsIgnoreCase(tagObj.getString("name"))) + { + result = tagObj.getInt("count"); + break; + } + } + + return result; + + } + } \ No newline at end of file