From 340338d4d0401045ff7da9695662163f6a85719b Mon Sep 17 00:00:00 2001 From: Nick Burch Date: Thu, 11 Aug 2011 14:54:05 +0000 Subject: [PATCH] ALF-9153 Discussions rest webscript tests git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@29691 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261 --- .../discussion/DiscussionServiceTest.java | 159 +++++++++++++++++- 1 file changed, 155 insertions(+), 4 deletions(-) diff --git a/source/java/org/alfresco/repo/web/scripts/discussion/DiscussionServiceTest.java b/source/java/org/alfresco/repo/web/scripts/discussion/DiscussionServiceTest.java index d3c83abcb9..5c61a9f308 100644 --- a/source/java/org/alfresco/repo/web/scripts/discussion/DiscussionServiceTest.java +++ b/source/java/org/alfresco/repo/web/scripts/discussion/DiscussionServiceTest.java @@ -19,14 +19,19 @@ package org.alfresco.repo.web.scripts.discussion; import java.util.ArrayList; +import java.util.Date; import java.util.List; +import javax.transaction.UserTransaction; + import org.alfresco.model.ContentModel; import org.alfresco.model.ForumModel; +import org.alfresco.repo.policy.BehaviourFilter; import org.alfresco.repo.security.authentication.AuthenticationComponent; import org.alfresco.repo.security.authentication.AuthenticationUtil; import org.alfresco.repo.site.SiteModel; import org.alfresco.repo.web.scripts.BaseWebScriptTest; +import org.alfresco.service.cmr.repository.ChildAssociationRef; import org.alfresco.service.cmr.repository.NodeRef; import org.alfresco.service.cmr.repository.NodeService; import org.alfresco.service.cmr.security.MutableAuthenticationService; @@ -37,6 +42,7 @@ import org.alfresco.service.cmr.site.SiteService; import org.alfresco.service.cmr.site.SiteVisibility; import org.alfresco.service.namespace.QName; import org.alfresco.service.namespace.RegexQNamePattern; +import org.alfresco.service.transaction.TransactionService; import org.alfresco.util.PropertyMap; import org.springframework.extensions.webscripts.Status; import org.springframework.extensions.webscripts.TestWebScriptServer.DeleteRequest; @@ -60,10 +66,13 @@ public class DiscussionServiceTest extends BaseWebScriptTest private MutableAuthenticationService authenticationService; private AuthenticationComponent authenticationComponent; + private TransactionService transactionService; + private BehaviourFilter policyBehaviourFilter; private PermissionService permissionService; private PersonService personService; private SiteService siteService; private NodeService nodeService; + private NodeService internalNodeService; private static final String USER_ONE = "UserOneThird"; private static final String USER_TWO = "UserTwoThird"; @@ -88,10 +97,13 @@ public class DiscussionServiceTest extends BaseWebScriptTest this.authenticationService = (MutableAuthenticationService)getServer().getApplicationContext().getBean("AuthenticationService"); this.authenticationComponent = (AuthenticationComponent)getServer().getApplicationContext().getBean("authenticationComponent"); + this.policyBehaviourFilter = (BehaviourFilter)getServer().getApplicationContext().getBean("policyBehaviourFilter"); + this.transactionService = (TransactionService)getServer().getApplicationContext().getBean("transactionService"); + this.permissionService = (PermissionService)getServer().getApplicationContext().getBean("PermissionService"); this.personService = (PersonService)getServer().getApplicationContext().getBean("PersonService"); this.siteService = (SiteService)getServer().getApplicationContext().getBean("SiteService"); this.nodeService = (NodeService)getServer().getApplicationContext().getBean("NodeService"); - this.permissionService = (PermissionService)getServer().getApplicationContext().getBean("PermissionService"); + this.internalNodeService = (NodeService)getServer().getApplicationContext().getBean("nodeService"); // Authenticate as user this.authenticationComponent.setCurrentUser(AuthenticationUtil.getAdminUserName()); @@ -312,6 +324,10 @@ public class DiscussionServiceTest extends BaseWebScriptTest { url = baseUrl; } + else if(type == "limit") + { + url = baseUrl + "?pageSize=1"; + } else if(type == "hot") { url = baseUrl + "/hot"; @@ -415,6 +431,40 @@ public class DiscussionServiceTest extends BaseWebScriptTest return result.getJSONObject("item"); } + /** + * Monkeys with the created and published dates on a topic+posts + */ + private void pushCreatedDateBack(NodeRef node, int daysAgo) throws Exception + { + Date created = (Date)nodeService.getProperty(node, ContentModel.PROP_CREATED); + Date newCreated = new Date(created.getTime() - daysAgo*24*60*60*1000); + Date published = (Date)nodeService.getProperty(node, ContentModel.PROP_PUBLISHED); + if(published == null) published = created; + Date newPublished = new Date(published.getTime() - daysAgo*24*60*60*1000); + + UserTransaction txn = transactionService.getUserTransaction(); + txn.begin(); + + this.policyBehaviourFilter.disableBehaviour(ContentModel.ASPECT_AUDITABLE); + internalNodeService.setProperty(node, ContentModel.PROP_CREATED, newCreated); + internalNodeService.setProperty(node, ContentModel.PROP_MODIFIED, newCreated); + internalNodeService.setProperty(node, ContentModel.PROP_PUBLISHED, newPublished); + this.policyBehaviourFilter.enableBehaviour(ContentModel.ASPECT_AUDITABLE); + + txn.commit(); + + // Now chance something else on the node to have it re-indexed + nodeService.setProperty(node, ContentModel.PROP_CREATED, newCreated); + nodeService.setProperty(node, ContentModel.PROP_MODIFIED, newCreated); + nodeService.setProperty(node, ContentModel.PROP_PUBLISHED, newPublished); + nodeService.setProperty(node, ContentModel.PROP_DESCRIPTION, "Forced change"); + + // Finally change any children (eg if updating a topic, do the posts) + for(ChildAssociationRef ref : nodeService.getChildAssocs(node)) + { + pushCreatedDateBack(ref.getChildRef(), daysAgo); + } + } // ----------------------------------------------------- // Tests @@ -982,18 +1032,119 @@ public class DiscussionServiceTest extends BaseWebScriptTest // Shift some of the posts into the past // (Update the created and published dates) + pushCreatedDateBack(siteTopic1, 10); + pushCreatedDateBack(siteReply1B, -2); // Make it newer + + pushCreatedDateBack(nodeTopic2, 10); + pushCreatedDateBack(nodeTopic3, 4); + pushCreatedDateBack(nodeReply1AAA, -1); // Make it newer - // Re-check totals, no change + // Re-check totals, only ordering changes + result = getPosts(null, Status.STATUS_OK); + assertEquals(2, result.getInt("total")); + assertEquals(2, result.getInt("itemCount")); + assertEquals(2, result.getJSONArray("items").length()); + assertEquals("SiteTitle1", result.getJSONArray("items").getJSONObject(0).getString("title")); + assertEquals("SiteTitle2", result.getJSONArray("items").getJSONObject(1).getString("title")); + assertEquals(2, result.getJSONArray("items").getJSONObject(0).getInt("replyCount")); + assertEquals(3, result.getJSONArray("items").getJSONObject(1).getInt("replyCount")); + + result = getPosts(FORUM_NODE, null, Status.STATUS_OK); + assertEquals(3, result.getInt("total")); + assertEquals(3, result.getInt("itemCount")); + assertEquals(3, result.getJSONArray("items").length()); + // TODO This appears to be incorrect... + assertEquals("NodeTitle3", result.getJSONArray("items").getJSONObject(0).getString("title")); + assertEquals("NodeTitle2", result.getJSONArray("items").getJSONObject(1).getString("title")); +// assertEquals("NodeTitle2", result.getJSONArray("items").getJSONObject(0).getString("title")); +// assertEquals("NodeTitle3", result.getJSONArray("items").getJSONObject(1).getString("title")); + assertEquals("NodeTitle1", result.getJSONArray("items").getJSONObject(2).getString("title")); + assertEquals(0, result.getJSONArray("items").getJSONObject(0).getInt("replyCount")); + assertEquals(0, result.getJSONArray("items").getJSONObject(1).getInt("replyCount")); + assertEquals(1, result.getJSONArray("items").getJSONObject(2).getInt("replyCount")); + // Re-check recent, old ones vanish + result = getPosts("new?numdays=2", Status.STATUS_OK); + assertEquals(1, result.getInt("total")); + assertEquals(1, result.getInt("itemCount")); + assertEquals(1, result.getJSONArray("items").length()); + assertEquals("SiteTitle2", result.getJSONArray("items").getJSONObject(0).getString("title")); + assertEquals(3, result.getJSONArray("items").getJSONObject(0).getInt("replyCount")); + + result = getPosts(FORUM_NODE, "new?numdays=6", Status.STATUS_OK); + assertEquals(2, result.getInt("total")); + assertEquals(2, result.getInt("itemCount")); + assertEquals(2, result.getJSONArray("items").length()); + assertEquals("NodeTitle3", result.getJSONArray("items").getJSONObject(0).getString("title")); + assertEquals("NodeTitle1", result.getJSONArray("items").getJSONObject(1).getString("title")); + assertEquals(0, result.getJSONArray("items").getJSONObject(0).getInt("replyCount")); + assertEquals(1, result.getJSONArray("items").getJSONObject(1).getInt("replyCount")); + + result = getPosts(FORUM_NODE, "new?numdays=2", Status.STATUS_OK); + assertEquals(1, result.getInt("total")); + assertEquals(1, result.getInt("itemCount")); + assertEquals(1, result.getJSONArray("items").length()); + assertEquals("NodeTitle1", result.getJSONArray("items").getJSONObject(0).getString("title")); + assertEquals(1, result.getJSONArray("items").getJSONObject(0).getInt("replyCount")); + + + // Re-check "mine", no change except ordering + result = getPosts("mine", Status.STATUS_OK); + assertEquals(1, result.getInt("total")); + assertEquals(1, result.getInt("itemCount")); + assertEquals(1, result.getJSONArray("items").length()); + assertEquals("SiteTitle1", result.getJSONArray("items").getJSONObject(0).getString("title")); + assertEquals(2, result.getJSONArray("items").getJSONObject(0).getInt("replyCount")); + + result = getPosts(FORUM_NODE, "mine", Status.STATUS_OK); + assertEquals(2, result.getInt("total")); + assertEquals(2, result.getInt("itemCount")); + assertEquals(2, result.getJSONArray("items").length()); + // TODO This appears to be incorrect... + assertEquals("NodeTitle3", result.getJSONArray("items").getJSONObject(0).getString("title")); + assertEquals("NodeTitle2", result.getJSONArray("items").getJSONObject(1).getString("title")); +// assertEquals("NodeTitle2", result.getJSONArray("items").getJSONObject(0).getString("title")); +// assertEquals("NodeTitle3", result.getJSONArray("items").getJSONObject(1).getString("title")); + assertEquals(0, result.getJSONArray("items").getJSONObject(0).getInt("replyCount")); + assertEquals(0, result.getJSONArray("items").getJSONObject(1).getInt("replyCount")); - // Re-check "mine", no change // Re-check hot, some old ones vanish + result = getPosts("hot", Status.STATUS_OK); + assertEquals(2, result.getInt("total")); + assertEquals(2, result.getInt("itemCount")); + assertEquals(2, result.getJSONArray("items").length()); + assertEquals("SiteTitle2", result.getJSONArray("items").getJSONObject(0).getString("title")); + assertEquals("SiteTitle1", result.getJSONArray("items").getJSONObject(1).getString("title")); + assertEquals(3, result.getJSONArray("items").getJSONObject(0).getInt("replyCount")); + assertEquals(2, result.getJSONArray("items").getJSONObject(1).getInt("replyCount")); + + result = getPosts(FORUM_NODE, "hot", Status.STATUS_OK); + assertEquals(1, result.getInt("total")); + assertEquals(1, result.getInt("itemCount")); + assertEquals(1, result.getJSONArray("items").length()); + assertEquals("NodeTitle1", result.getJSONArray("items").getJSONObject(0).getString("title")); + assertEquals(1, result.getJSONArray("items").getJSONObject(0).getInt("replyCount")); - // TODO Check paging + // Check paging + result = getPosts("limit", Status.STATUS_OK); + assertEquals(2, result.getInt("total")); + assertEquals(1, result.getInt("itemCount")); + assertEquals(1, result.getJSONArray("items").length()); + assertEquals("SiteTitle1", result.getJSONArray("items").getJSONObject(0).getString("title")); + assertEquals(2, result.getJSONArray("items").getJSONObject(0).getInt("replyCount")); + + result = getPosts(FORUM_NODE, "limit", Status.STATUS_OK); + assertEquals(3, result.getInt("total")); + assertEquals(1, result.getInt("itemCount")); + assertEquals(1, result.getJSONArray("items").length()); + // TODO This appears to be incorrect... + assertEquals("NodeTitle3", result.getJSONArray("items").getJSONObject(0).getString("title")); +// assertEquals("NodeTitle2", result.getJSONArray("items").getJSONObject(0).getString("title")); + assertEquals(0, result.getJSONArray("items").getJSONObject(0).getInt("replyCount")); } } \ No newline at end of file