diff --git a/config/alfresco/templates/webscripts/org/alfresco/repository/activities/feed/control/userfeed-control.delete.desc.xml b/config/alfresco/templates/webscripts/org/alfresco/repository/activities/feed/control/userfeed-control.delete.desc.xml
new file mode 100644
index 0000000000..a30366c2cc
--- /dev/null
+++ b/config/alfresco/templates/webscripts/org/alfresco/repository/activities/feed/control/userfeed-control.delete.desc.xml
@@ -0,0 +1,9 @@
+
+ Activity User Feed Controls
+ Unset activity feed control (opt-out) for currently logged in user.
+ /api/activities/feed/user/control?s={siteId}&a={appToolId}
+ /api/activities/feed/user/control??s={siteId}&a={appToolId}&format=json
+
+ user
+ required
+
\ No newline at end of file
diff --git a/config/alfresco/templates/webscripts/org/alfresco/repository/activities/feed/control/userfeed-control.delete.js b/config/alfresco/templates/webscripts/org/alfresco/repository/activities/feed/control/userfeed-control.delete.js
new file mode 100644
index 0000000000..2314fe29b4
--- /dev/null
+++ b/config/alfresco/templates/webscripts/org/alfresco/repository/activities/feed/control/userfeed-control.delete.js
@@ -0,0 +1,20 @@
+function main()
+{
+ // Get the details of the site id (site shortname) and/or appTool id
+ var siteId = args["s"];
+ var appToolId = args["a"];
+
+ if ((siteId == null || siteId.length == 0) &&
+ (appToolId == null || appToolId.length == 0))
+ {
+ status.code = 400;
+ status.message = "siteId and appToolId are both missing - must supply one or both.";
+ status.redirect = true;
+ return;
+ }
+
+ // Unset feed control for current user
+ activities.unsetFeedControl(siteId, appToolId);
+}
+
+main();
\ No newline at end of file
diff --git a/config/alfresco/templates/webscripts/org/alfresco/repository/activities/feed/control/userfeed-control.delete.json.ftl b/config/alfresco/templates/webscripts/org/alfresco/repository/activities/feed/control/userfeed-control.delete.json.ftl
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/config/alfresco/templates/webscripts/org/alfresco/repository/activities/feed/control/userfeed-control.post.desc.xml b/config/alfresco/templates/webscripts/org/alfresco/repository/activities/feed/control/userfeed-control.post.desc.xml
new file mode 100644
index 0000000000..6c3d115d9b
--- /dev/null
+++ b/config/alfresco/templates/webscripts/org/alfresco/repository/activities/feed/control/userfeed-control.post.desc.xml
@@ -0,0 +1,9 @@
+
+ Activity User Feed Controls
+ Set activity feed control (opt-out) for currently logged in user.
+ /api/activities/feed/user/control
+ /api/activities/feed/user/control?format=json
+
+ user
+ required
+
\ No newline at end of file
diff --git a/config/alfresco/templates/webscripts/org/alfresco/repository/activities/feed/control/userfeed-control.post.js b/config/alfresco/templates/webscripts/org/alfresco/repository/activities/feed/control/userfeed-control.post.js
new file mode 100644
index 0000000000..6ad2010794
--- /dev/null
+++ b/config/alfresco/templates/webscripts/org/alfresco/repository/activities/feed/control/userfeed-control.post.js
@@ -0,0 +1,30 @@
+function main()
+{
+ // Get the details of the site id (site shortname) and/or appTool id
+ var siteId = null;
+ var appToolId = null;
+
+ if (! json.isNull("siteId"))
+ {
+ siteId = json.get("siteId");
+ }
+
+ if (! json.isNull("appToolId"))
+ {
+ appToolId = json.get("appToolId");
+ }
+
+ if ((siteId == null || siteId.length == 0) &&
+ (appToolId == null || appToolId.length == 0))
+ {
+ status.code = 400;
+ status.message = "siteId and appToolId are both missing - must supply one or both.";
+ status.redirect = true;
+ return;
+ }
+
+ // Set feed control for current user
+ activities.setFeedControl(siteId, appToolId);
+}
+
+main();
\ No newline at end of file
diff --git a/config/alfresco/templates/webscripts/org/alfresco/repository/activities/feed/control/userfeed-control.post.json.ftl b/config/alfresco/templates/webscripts/org/alfresco/repository/activities/feed/control/userfeed-control.post.json.ftl
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/config/alfresco/templates/webscripts/org/alfresco/repository/activities/feed/control/userfeed-controls.get.desc.xml b/config/alfresco/templates/webscripts/org/alfresco/repository/activities/feed/control/userfeed-controls.get.desc.xml
new file mode 100644
index 0000000000..09bfb849bc
--- /dev/null
+++ b/config/alfresco/templates/webscripts/org/alfresco/repository/activities/feed/control/userfeed-controls.get.desc.xml
@@ -0,0 +1,9 @@
+
+ Activity User Feed Controls
+ Get the activity feed controls (opt-outs) for currently logged in user.
+ /api/activities/feed/user/controls
+ /api/activities/feed/user/controls?format=json
+
+ user
+ required
+
\ No newline at end of file
diff --git a/config/alfresco/templates/webscripts/org/alfresco/repository/activities/feed/control/userfeed-controls.get.js b/config/alfresco/templates/webscripts/org/alfresco/repository/activities/feed/control/userfeed-controls.get.js
new file mode 100644
index 0000000000..0a250e280f
--- /dev/null
+++ b/config/alfresco/templates/webscripts/org/alfresco/repository/activities/feed/control/userfeed-controls.get.js
@@ -0,0 +1,5 @@
+// Get the list of feed controls for current user
+var feedControls = activities.getFeedControls();
+
+// Pass the queried feed controls to the template
+model.feedControls = feedControls;
\ No newline at end of file
diff --git a/config/alfresco/templates/webscripts/org/alfresco/repository/activities/feed/control/userfeed-controls.get.json.ftl b/config/alfresco/templates/webscripts/org/alfresco/repository/activities/feed/control/userfeed-controls.get.json.ftl
new file mode 100644
index 0000000000..21a7ae373b
--- /dev/null
+++ b/config/alfresco/templates/webscripts/org/alfresco/repository/activities/feed/control/userfeed-controls.get.json.ftl
@@ -0,0 +1,7 @@
+[
+<#if feedControls??>
+ <#list feedControls as feedControl>
+ ${feedControl}<#if feedControl_has_next>,#if>
+ #list>
+#if>
+]
\ No newline at end of file
diff --git a/config/alfresco/templates/webscripts/org/alfresco/repository/activities/sitefeed.get.atomfeed.ftl b/config/alfresco/templates/webscripts/org/alfresco/repository/activities/feed/sitefeed.get.atomfeed.ftl
similarity index 100%
rename from config/alfresco/templates/webscripts/org/alfresco/repository/activities/sitefeed.get.atomfeed.ftl
rename to config/alfresco/templates/webscripts/org/alfresco/repository/activities/feed/sitefeed.get.atomfeed.ftl
diff --git a/config/alfresco/templates/webscripts/org/alfresco/repository/activities/sitefeed.get.desc.xml b/config/alfresco/templates/webscripts/org/alfresco/repository/activities/feed/sitefeed.get.desc.xml
similarity index 100%
rename from config/alfresco/templates/webscripts/org/alfresco/repository/activities/sitefeed.get.desc.xml
rename to config/alfresco/templates/webscripts/org/alfresco/repository/activities/feed/sitefeed.get.desc.xml
diff --git a/config/alfresco/templates/webscripts/org/alfresco/repository/activities/userfeed-admin.get.json.ftl b/config/alfresco/templates/webscripts/org/alfresco/repository/activities/feed/sitefeed.get.json.ftl
similarity index 100%
rename from config/alfresco/templates/webscripts/org/alfresco/repository/activities/userfeed-admin.get.json.ftl
rename to config/alfresco/templates/webscripts/org/alfresco/repository/activities/feed/sitefeed.get.json.ftl
diff --git a/config/alfresco/templates/webscripts/org/alfresco/repository/activities/userfeed-admin.get.atomfeed.ftl b/config/alfresco/templates/webscripts/org/alfresco/repository/activities/feed/userfeed-admin.get.atomfeed.ftl
similarity index 100%
rename from config/alfresco/templates/webscripts/org/alfresco/repository/activities/userfeed-admin.get.atomfeed.ftl
rename to config/alfresco/templates/webscripts/org/alfresco/repository/activities/feed/userfeed-admin.get.atomfeed.ftl
diff --git a/config/alfresco/templates/webscripts/org/alfresco/repository/activities/userfeed-admin.get.desc.xml b/config/alfresco/templates/webscripts/org/alfresco/repository/activities/feed/userfeed-admin.get.desc.xml
similarity index 100%
rename from config/alfresco/templates/webscripts/org/alfresco/repository/activities/userfeed-admin.get.desc.xml
rename to config/alfresco/templates/webscripts/org/alfresco/repository/activities/feed/userfeed-admin.get.desc.xml
diff --git a/config/alfresco/templates/webscripts/org/alfresco/repository/activities/userfeed.get.json.ftl b/config/alfresco/templates/webscripts/org/alfresco/repository/activities/feed/userfeed-admin.get.json.ftl
similarity index 100%
rename from config/alfresco/templates/webscripts/org/alfresco/repository/activities/userfeed.get.json.ftl
rename to config/alfresco/templates/webscripts/org/alfresco/repository/activities/feed/userfeed-admin.get.json.ftl
diff --git a/config/alfresco/templates/webscripts/org/alfresco/repository/activities/userfeed.get.atomfeed.ftl b/config/alfresco/templates/webscripts/org/alfresco/repository/activities/feed/userfeed.get.atomfeed.ftl
similarity index 100%
rename from config/alfresco/templates/webscripts/org/alfresco/repository/activities/userfeed.get.atomfeed.ftl
rename to config/alfresco/templates/webscripts/org/alfresco/repository/activities/feed/userfeed.get.atomfeed.ftl
diff --git a/config/alfresco/templates/webscripts/org/alfresco/repository/activities/userfeed.get.desc.xml b/config/alfresco/templates/webscripts/org/alfresco/repository/activities/feed/userfeed.get.desc.xml
similarity index 100%
rename from config/alfresco/templates/webscripts/org/alfresco/repository/activities/userfeed.get.desc.xml
rename to config/alfresco/templates/webscripts/org/alfresco/repository/activities/feed/userfeed.get.desc.xml
diff --git a/config/alfresco/templates/webscripts/org/alfresco/repository/activities/feed/userfeed.get.json.ftl b/config/alfresco/templates/webscripts/org/alfresco/repository/activities/feed/userfeed.get.json.ftl
new file mode 100644
index 0000000000..3af0b6a7d9
--- /dev/null
+++ b/config/alfresco/templates/webscripts/org/alfresco/repository/activities/feed/userfeed.get.json.ftl
@@ -0,0 +1,7 @@
+[
+<#if feedEntries??>
+<#list feedEntries as feedEntry>
+ ${feedEntry}<#if feedEntry_has_next>,#if>
+#list>
+#if>
+]
\ No newline at end of file
diff --git a/config/alfresco/web-scripts-application-context.xml b/config/alfresco/web-scripts-application-context.xml
index ad0d5583d2..7c34f0d599 100644
--- a/config/alfresco/web-scripts-application-context.xml
+++ b/config/alfresco/web-scripts-application-context.xml
@@ -227,17 +227,17 @@
-
+
-
+
-
+
diff --git a/source/java/org/alfresco/repo/web/scripts/activities/SiteActivitySystemTest.java b/source/java/org/alfresco/repo/web/scripts/activities/SiteActivitySystemTest.java
index 8fb9048467..67b1b226aa 100644
--- a/source/java/org/alfresco/repo/web/scripts/activities/SiteActivitySystemTest.java
+++ b/source/java/org/alfresco/repo/web/scripts/activities/SiteActivitySystemTest.java
@@ -75,15 +75,27 @@ public class SiteActivitySystemTest extends TestCase
private static final String URL_ACTIVITIES = "/api/activities";
private static final String URL_SITE_FEED = "/feed/site";
private static final String URL_USER_FEED = "/feed/user";
+ private static final String URL_USER_FEED_CTRL = "/feed/user/control";
+ // Users & Passwords
+ private static final String ADMIN_USER = "admin";
+ private static final String ADMIN_PW = "admin";
- private static boolean setup = false;
-
- private static String shortName = null;
private static String user1 = null;
private static String user2 = null;
private static String user3 = null;
+ private static final String USER_PW = "password";
+
+ // Test siteId
+ private static String shortName = null;
+
+ // Site Service appToolId
+ private static String appToolId = "siteService"; // refer to SiteService
+
+ private static boolean setup = false;
+
+
public SiteActivitySystemTest()
{
@@ -105,9 +117,9 @@ public class SiteActivitySystemTest extends TestCase
// pre-create users
- createUser(user1, "password");
- createUser(user2, "password");
- createUser(user3, "password");
+ createUser(user1, USER_PW);
+ createUser(user2, USER_PW);
+ createUser(user3, USER_PW);
setup = true;
}
@@ -122,7 +134,7 @@ public class SiteActivitySystemTest extends TestCase
public void testCreateSite() throws Exception
{
- String ticket = callLoginWebScript(WEBSCRIPT_ENDPOINT, "admin", "admin");
+ String ticket = callLoginWebScript(WEBSCRIPT_ENDPOINT, ADMIN_USER, ADMIN_PW);
JSONObject site = new JSONObject();
site.put("sitePreset", "myPreset");
@@ -147,7 +159,7 @@ public class SiteActivitySystemTest extends TestCase
{
// relies on testCreateSite
- String ticket = callLoginWebScript(WEBSCRIPT_ENDPOINT, "admin", "admin");
+ String ticket = callLoginWebScript(WEBSCRIPT_ENDPOINT, ADMIN_USER, ADMIN_PW);
String url = WEBSCRIPT_ENDPOINT + URL_SITES + "/" + shortName;
String response = callGetWebScript(url, ticket);
@@ -165,7 +177,7 @@ public class SiteActivitySystemTest extends TestCase
{
// relies on testCreateSite
- String ticket = callLoginWebScript(WEBSCRIPT_ENDPOINT, "admin", "admin");
+ String ticket = callLoginWebScript(WEBSCRIPT_ENDPOINT, ADMIN_USER, ADMIN_PW);
String url = WEBSCRIPT_ENDPOINT + URL_ACTIVITIES + URL_SITE_FEED + "/" + shortName + "?format=json";
String jsonArrayResult = callGetWebScript(url, ticket);
@@ -185,7 +197,7 @@ public class SiteActivitySystemTest extends TestCase
{
// relies on testCreateSite
- String ticket = callLoginWebScript(WEBSCRIPT_ENDPOINT, "admin", "admin");
+ String ticket = callLoginWebScript(WEBSCRIPT_ENDPOINT, ADMIN_USER, ADMIN_PW);
String url = WEBSCRIPT_ENDPOINT + URL_ACTIVITIES + URL_USER_FEED + "/" + user1 + "?format=json";
String jsonArrayResult = callGetWebScript(url, ticket);
@@ -227,29 +239,43 @@ public class SiteActivitySystemTest extends TestCase
}
}
+ public void testUserFeedControls() throws Exception
+ {
+ String ticket = callLoginWebScript(WEBSCRIPT_ENDPOINT, user1, USER_PW);
+ addFeedControl(user1, shortName, null, ticket);
+
+ ticket = callLoginWebScript(WEBSCRIPT_ENDPOINT, user2, USER_PW);
+ addFeedControl(user2, null, appToolId, ticket);
+
+ //ticket = callLoginWebScript(WEBSCRIPT_ENDPOINT, user2, USER_PW);
+ //addFeedControl(user3, shortName, appToolId, ticket);
+
+ // TODO add more here, once we have more appToolIds
+ }
+
public void testMemberships() throws Exception
{
// relies on testCreateSite
- String ticket = callLoginWebScript(WEBSCRIPT_ENDPOINT, "admin", "admin");
+ String ticket = callLoginWebScript(WEBSCRIPT_ENDPOINT, ADMIN_USER, ADMIN_PW);
// add member -> join site
- testAddMembership(user1, ticket, SiteModel.SITE_CONSUMER);
- testAddMembership(user2, ticket, SiteModel.SITE_MANAGER);
- testAddMembership(user3, ticket, SiteModel.SITE_COLLABORATOR);
+ addMembership(user1, ticket, SiteModel.SITE_CONSUMER);
+ addMembership(user2, ticket, SiteModel.SITE_MANAGER);
+ addMembership(user3, ticket, SiteModel.SITE_COLLABORATOR);
// update member -> change role
- testUpdateMembership(user1, ticket, SiteModel.SITE_MANAGER);
- testUpdateMembership(user2, ticket, SiteModel.SITE_COLLABORATOR);
- testUpdateMembership(user3, ticket, SiteModel.SITE_CONSUMER);
+ updateMembership(user1, ticket, SiteModel.SITE_MANAGER);
+ updateMembership(user2, ticket, SiteModel.SITE_COLLABORATOR);
+ updateMembership(user3, ticket, SiteModel.SITE_CONSUMER);
// add pause - otherwise, activity service will not generate feed entries (since they will have already left the site)
Thread.sleep(90000); // 1 min
// remove member -> leave site
- testRemoveMembership(user1, ticket);
- testRemoveMembership(user2, ticket);
- testRemoveMembership(user3, ticket);
+ removeMembership(user1, ticket);
+ removeMembership(user2, ticket);
+ removeMembership(user3, ticket);
// add pause
Thread.sleep(60000); // 1 min
@@ -259,7 +285,7 @@ public class SiteActivitySystemTest extends TestCase
{
// relies on testCreateSite, testMemberships
- String ticket = callLoginWebScript(WEBSCRIPT_ENDPOINT, "admin", "admin");
+ String ticket = callLoginWebScript(WEBSCRIPT_ENDPOINT, ADMIN_USER, ADMIN_PW);
String url = WEBSCRIPT_ENDPOINT + URL_ACTIVITIES + URL_SITE_FEED + "/" + shortName + "?format=json";
String jsonArrayResult = callGetWebScript(url, ticket);
@@ -287,7 +313,7 @@ public class SiteActivitySystemTest extends TestCase
{
// relies on testCreateSite, testMemberships
- String ticket = callLoginWebScript(WEBSCRIPT_ENDPOINT, "admin", "admin");
+ String ticket = callLoginWebScript(WEBSCRIPT_ENDPOINT, ADMIN_USER, ADMIN_PW);
String url = WEBSCRIPT_ENDPOINT + URL_ACTIVITIES + URL_USER_FEED + "/" + user1 + "?format=json";
String jsonArrayResult = callGetWebScript(url, ticket);
@@ -303,7 +329,7 @@ public class SiteActivitySystemTest extends TestCase
if (jsonArrayResult != null)
{
JSONArray ja = new JSONArray(jsonArrayResult);
- assertEquals(6, ja.length());
+ assertEquals(0, ja.length()); // 0 due to feed control
}
else
{
@@ -324,7 +350,7 @@ public class SiteActivitySystemTest extends TestCase
if (jsonArrayResult != null)
{
JSONArray ja = new JSONArray(jsonArrayResult);
- assertEquals(6, ja.length());
+ assertEquals(0, ja.length()); // 0 due to feed control
}
else
{
@@ -353,7 +379,7 @@ public class SiteActivitySystemTest extends TestCase
}
}
- private void testAddMembership(String userName, String ticket, String role) throws Exception
+ private void addMembership(String userName, String ticket, String role) throws Exception
{
// Build the JSON membership object
JSONObject membership = new JSONObject();
@@ -367,14 +393,14 @@ public class SiteActivitySystemTest extends TestCase
if (logger.isDebugEnabled())
{
- logger.debug("testAddMembership: " + userName);
- logger.debug("------------------");
+ logger.debug("addMembership: " + userName);
+ logger.debug("--------------");
logger.debug(url);
logger.debug(response);
}
}
- private void testUpdateMembership(String userName, String ticket, String role) throws Exception
+ private void updateMembership(String userName, String ticket, String role) throws Exception
{
// Build the JSON membership object
JSONObject membership = new JSONObject();
@@ -388,22 +414,41 @@ public class SiteActivitySystemTest extends TestCase
if (logger.isDebugEnabled())
{
- logger.debug("testUpdateMembership: " + userName);
- logger.debug("------------------");
+ logger.debug("updateMembership: " + userName);
+ logger.debug("-----------------");
logger.debug(url);
logger.debug(response);
}
}
- private void testRemoveMembership(String userName, String ticket) throws Exception
+ private void removeMembership(String userName, String ticket) throws Exception
{
String url = WEBSCRIPT_ENDPOINT + URL_SITES + "/" + shortName + URL_MEMBERSHIPS + "/" + userName;
String response = callDeleteWebScript(url, ticket);
if (logger.isDebugEnabled())
{
- logger.debug("testRemoveMembership: " + userName);
- logger.debug("---------------------");
+ logger.debug("removeMembership: " + userName);
+ logger.debug("-----------------");
+ logger.debug(url);
+ logger.debug(response);
+ }
+ }
+
+ private void addFeedControl(String userName, String siteId, String appToolId, String ticket) throws Exception
+ {
+ // Build the JSON feedControl object
+ JSONObject feedControl = new JSONObject();
+ feedControl.put("siteId", siteId);
+ feedControl.put("appToolId", appToolId);
+
+ String url = WEBSCRIPT_ENDPOINT + URL_ACTIVITIES + URL_USER_FEED_CTRL;
+ String response = callPostWebScript(url, ticket, feedControl.toString());
+
+ if (logger.isDebugEnabled())
+ {
+ logger.debug("addFeedControl: " + userName);
+ logger.debug("--------------");
logger.debug(url);
logger.debug(response);
}
@@ -563,7 +608,7 @@ public class SiteActivitySystemTest extends TestCase
protected void createUser(String username, String password) throws MalformedURLException, URISyntaxException, IOException
{
- String ticket = webServiceStartSession("admin", "admin");
+ String ticket = webServiceStartSession(ADMIN_USER, ADMIN_PW);
webServiceCreateUser(username, password, ticket);
webServiceEndSession(ticket);
}
diff --git a/source/java/org/alfresco/repo/web/scripts/activities/SiteFeedRetrieverWebScript.java b/source/java/org/alfresco/repo/web/scripts/activities/feed/SiteFeedRetrieverWebScript.java
similarity index 98%
rename from source/java/org/alfresco/repo/web/scripts/activities/SiteFeedRetrieverWebScript.java
rename to source/java/org/alfresco/repo/web/scripts/activities/feed/SiteFeedRetrieverWebScript.java
index cca1916382..3c48df3c7e 100644
--- a/source/java/org/alfresco/repo/web/scripts/activities/SiteFeedRetrieverWebScript.java
+++ b/source/java/org/alfresco/repo/web/scripts/activities/feed/SiteFeedRetrieverWebScript.java
@@ -22,7 +22,7 @@
* the FLOSS exception, and it is also available here:
* http://www.alfresco.com/legal/licensing
*/
-package org.alfresco.repo.web.scripts.activities;
+package org.alfresco.repo.web.scripts.activities.feed;
import java.util.ArrayList;
import java.util.HashMap;
diff --git a/source/java/org/alfresco/repo/web/scripts/activities/UserFeedRetrieverWebScript.java b/source/java/org/alfresco/repo/web/scripts/activities/feed/UserFeedRetrieverWebScript.java
similarity index 98%
rename from source/java/org/alfresco/repo/web/scripts/activities/UserFeedRetrieverWebScript.java
rename to source/java/org/alfresco/repo/web/scripts/activities/feed/UserFeedRetrieverWebScript.java
index d4f0120c0d..e993804e91 100644
--- a/source/java/org/alfresco/repo/web/scripts/activities/UserFeedRetrieverWebScript.java
+++ b/source/java/org/alfresco/repo/web/scripts/activities/feed/UserFeedRetrieverWebScript.java
@@ -22,7 +22,7 @@
* the FLOSS exception, and it is also available here:
* http://www.alfresco.com/legal/licensing
*/
-package org.alfresco.repo.web.scripts.activities;
+package org.alfresco.repo.web.scripts.activities.feed;
import java.util.ArrayList;
import java.util.HashMap;
diff --git a/source/java/org/alfresco/repo/web/scripts/activities/feed/control/FeedControlTest.java b/source/java/org/alfresco/repo/web/scripts/activities/feed/control/FeedControlTest.java
new file mode 100644
index 0000000000..08b7a15b9a
--- /dev/null
+++ b/source/java/org/alfresco/repo/web/scripts/activities/feed/control/FeedControlTest.java
@@ -0,0 +1,161 @@
+/*
+ * Copyright (C) 2005-2008 Alfresco Software Limited.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ * As a special exception to the terms and conditions of version 2.0 of
+ * the GPL, you may redistribute this Program in connection with Free/Libre
+ * and Open Source Software ("FLOSS") applications as described in Alfresco's
+ * FLOSS exception. You should have recieved a copy of the text describing
+ * the FLOSS exception, and it is also available here:
+ * http://www.alfresco.com/legal/licensing"
+ */
+package org.alfresco.repo.web.scripts.activities.feed.control;
+
+import org.alfresco.model.ContentModel;
+import org.alfresco.repo.security.authentication.AuthenticationComponent;
+import org.alfresco.repo.web.scripts.BaseWebScriptTest;
+import org.alfresco.service.cmr.security.AuthenticationService;
+import org.alfresco.service.cmr.security.PersonService;
+import org.alfresco.util.PropertyMap;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.json.JSONArray;
+import org.json.JSONObject;
+import org.springframework.mock.web.MockHttpServletResponse;
+
+/**
+ * Unit test the Activity Service's User Feed Control Web Script API
+ *
+ * @author janv
+ */
+public class FeedControlTest extends BaseWebScriptTest
+{
+ private static Log logger = LogFactory.getLog(FeedControlTest.class);
+
+ private AuthenticationService authenticationService;
+ private AuthenticationComponent authenticationComponent;
+ private PersonService personService;
+
+ private static final String TEST_USER = "my user";
+
+ private static final String TEST_SITE_ID = "my site";
+ private static final String TEST_APP_TOOL_ID = "my app tool";
+
+ private static final String URL_CONTROLS = "/api/activities/feed/user/controls";
+ private static final String URL_CONTROL = "/api/activities/feed/user/control";
+
+
+ @Override
+ protected void setUp() throws Exception
+ {
+ super.setUp();
+
+ this.authenticationService = (AuthenticationService)getServer().getApplicationContext().getBean("AuthenticationService");
+ this.authenticationComponent = (AuthenticationComponent)getServer().getApplicationContext().getBean("authenticationComponent");
+ this.personService = (PersonService)getServer().getApplicationContext().getBean("PersonService");
+
+ this.authenticationComponent.setCurrentUser("admin");
+
+ // Create users
+ createUser(TEST_USER);
+
+ // Do tests as user one
+ this.authenticationComponent.setCurrentUser(TEST_USER);
+ }
+
+ private void createUser(String userName)
+ {
+ if (this.authenticationService.authenticationExists(userName) == false)
+ {
+ this.authenticationService.createAuthentication(userName, "PWD".toCharArray());
+
+ PropertyMap ppOne = new PropertyMap(4);
+ ppOne.put(ContentModel.PROP_USERNAME, userName);
+ ppOne.put(ContentModel.PROP_FIRSTNAME, "firstName");
+ ppOne.put(ContentModel.PROP_LASTNAME, "lastName");
+ ppOne.put(ContentModel.PROP_EMAIL, "email@email.com");
+ ppOne.put(ContentModel.PROP_JOBTITLE, "jobTitle");
+
+ this.personService.createPerson(ppOne);
+ }
+ }
+
+ @Override
+ protected void tearDown() throws Exception
+ {
+ super.tearDown();
+
+ this.authenticationComponent.clearCurrentSecurityContext();
+ }
+
+ public void testCreateFeedControls() throws Exception
+ {
+ createFeedControl(TEST_SITE_ID, null);
+ createFeedControl(null, TEST_APP_TOOL_ID);
+ createFeedControl(TEST_SITE_ID, TEST_APP_TOOL_ID);
+ }
+
+ protected void createFeedControl(String siteId, String appToolId) throws Exception
+ {
+ // Set (create) feed control
+ JSONObject feedControl = new JSONObject();
+ feedControl.put("siteId", siteId);
+ feedControl.put("appToolId", appToolId);
+
+ int expectedStatus = 200;
+ MockHttpServletResponse response = postRequest(URL_CONTROL, expectedStatus, feedControl.toString(), "application/json");
+
+ if (logger.isDebugEnabled())
+ {
+ logger.debug(response);
+ }
+ }
+
+ public void testRetrieveFeedControls() throws Exception
+ {
+ // Get (retrieve) feed controls
+ int expectedStatus = 200;
+ MockHttpServletResponse response = getRequest(URL_CONTROLS, expectedStatus);
+ JSONArray result = new JSONArray(response.getContentAsString());
+
+ if (logger.isDebugEnabled())
+ {
+ logger.debug(result);
+ }
+
+ assertNotNull(result);
+ assertEquals(3, result.length());
+ }
+
+ public void testDeleteFeedControls() throws Exception
+ {
+ deleteFeedControl(TEST_SITE_ID, null);
+ deleteFeedControl(null, TEST_APP_TOOL_ID);
+ deleteFeedControl(TEST_SITE_ID, TEST_APP_TOOL_ID);
+ }
+
+ protected void deleteFeedControl(String siteId, String appToolId) throws Exception
+ {
+ // Unset (delete) feed control
+ int expectedStatus = 200;
+ MockHttpServletResponse response = deleteRequest(URL_CONTROL + "?s=" + TEST_SITE_ID + "&a=" + TEST_APP_TOOL_ID, expectedStatus);
+
+ if (logger.isDebugEnabled())
+ {
+ logger.debug(response);
+ }
+ }
+}