ALF-1568 Expanded the JSON returned by the api/sites/{siteName}/invitations webscript and various other related webscripts. The JSOn now includes an "invitee" object with a structure

{  "avatar" : "avatarThumbnailURI",
   "firstName" : "John",
   "lastName" : "Smith",
   "userName" : "johnsmith"
}

git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@20040 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
N Smith
2010-04-29 11:14:15 +00:00
parent a9ab66f4bf
commit a3620d1427
10 changed files with 442 additions and 177 deletions

View File

@@ -1,19 +1,31 @@
<#-- renders an invitation object which can be either a MODERATED or NOMINATED invitation-->
<#macro invitationJSON invitation>
<#macro invitationJSON invitation avatars={"" : ""} >
<#escape x as jsonUtils.encodeJSONString(x)>
{
"inviteId": "${invitation.inviteId}",
"inviteeUserName": "${invitation.inviteeUserName}",
<#if invitation.roleName??>"roleName": "${invitation.roleName}",</#if>
"invitee":
{
<#if invitation.inviteeFirstName??>"firstName": "${invitation.inviteeFirstName}",</#if>
<#if invitation.inviteeLastName??>"lastName": "${invitation.inviteeLastName}",</#if>
<#if invitation.inviteeEmail??>"email": "${invitation.inviteeEmail}",</#if>
<#assign userName = invitation.inviteeUserName>
<#if avatars[userName]??>"avatar" : "${avatars[userName]}",</#if>
"userName": "${invitation.inviteeUserName}"
},
<#-- Moderated invitation properties -->
<#if invitation.inviteeComments??>"inviteeComments": "${invitation.inviteeComments}",</#if>
<#if invitation.roleName??>"roleName": "${invitation.roleName}",</#if>
<#-- Nominated invitation properties -->
<#if invitation.acceptURL??>"acceptURL": "${invitation.acceptURL}",</#if>
<#if invitation.acceptURL??>"rejectURL": "${invitation.rejectURL}",</#if>
<#if invitation.sentInviteDateAsISO8601??>"sentInviteDate" : { "iso8601" : "${invitation.sentInviteDateAsISO8601}" }, </#if>
<#if invitation.inviteeFirstName??>"inviteeFirstName": "${invitation.inviteeFirstName}",</#if>
<#if invitation.inviteeLastName??>"inviteeLastName": "${invitation.inviteeLastName}",</#if>
<#if invitation.inviteeEmail??>"inviteeEmail": "${invitation.inviteeEmail}",</#if>
<#if invitation.rejectURL??>"rejectURL": "${invitation.rejectURL}",</#if>
<#if invitation.sentInviteDateAsISO8601??>
"sentInviteDate" :
{
"iso8601" : "${invitation.sentInviteDateAsISO8601}"
},
</#if>
<#if invitation.inviterUserName??>"inviterUserName": "${invitation.inviterUserName}",</#if>
<#-- put a mandatory property at the end to deal cleanly with training commas -->
"resourceType": "${invitation.resourceType}",
"resourceName": "${invitation.resourceName}",

View File

@@ -1,7 +1,7 @@
<webscript>
<shortname>List Invitations</shortname>
<description><![CDATA[
Get a collecton of a invitations.
Get a collecton of invitations.
<BR />
With no parameters, returns all open invitations (which could be a large number).
<BR />

View File

@@ -34,8 +34,28 @@ function main()
var invites = invitations.listInvitations(props);
//Get the avatars for the invitees.
var avatars = new Object();
for (var i = 0; i<invites.length; i++)
{
var invite = invites[i];
var userName = invite.inviteeUserName;
var person = people.getPerson(userName);
if (person != undefined && person !=null)
{
var assocs = person.assocs['{http://www.alfresco.org/model/content/1.0}avatar'];
if (assocs !=null && assocs.length>0)
{
var avatar = 'api/node/';
avatar = avatar + assocs[0].nodeRef.toString();
avatar = avatar + '/content/thumbnails/avatar';
avatars[userName] = avatar;
}
}
}
// Pass the information to the template
model.invitations = invites;
model.avatars = avatars;
}
main();

View File

@@ -4,7 +4,7 @@
{
"data": [
<#list invitations as invitation>
<@invitationLib.invitationJSON invitation=invitation />
<@invitationLib.invitationJSON invitation=invitation avatars=avatars/>
<#if invitation_has_next>,</#if>
</#list>
]

View File

@@ -24,9 +24,26 @@ function main()
return;
}
var avatars = new Object();
// Get the avatar.
var userName = invitation.inviteeUserName;
var person = people.getPerson(userName);
if (person != undefined && person !=null)
{
var assocs = person.assocs['{http://www.alfresco.org/model/content/1.0}avatar'];
if (assocs !=null && assocs.length>0)
{
var avatar = 'api/node/';
avatar = avatar + assocs[0].nodeRef.toString();
avatar = avatar + '/content/thumbnails/avatar';
avatars[userName] = avatar;
}
}
// Pass the model to the template
model.invitation = invitation;
model.site = site;
model.avatars=avatars;
}
main();

View File

@@ -1,5 +1,5 @@
<#-- Get Invitation -->
<#import "../../invitation/invitation.lib.ftl" as invitationLib/>
{
"data":<@invitationLib.invitationJSON invitation=invitation />
"data":<@invitationLib.invitationJSON invitation=invitation avatars=avatars />
}

View File

@@ -30,10 +30,32 @@ function main ()
props.invitationType = invitationType
}
var invitations = site.listInvitations(props);
var invites = site.listInvitations(props);
//Get the avatars for the invitees.
var avatars = new Object();
for (var i = 0; i<invites.length; i++)
{
var invite = invites[i];
var userName = invite.inviteeUserName;
var person = people.getPerson(userName);
if (person != undefined && person !=null)
{
var assocs = person.assocs['{http://www.alfresco.org/model/content/1.0}avatar'];
if (assocs !=null && assocs.length>0)
{
var avatar = 'api/node/';
avatar = avatar + assocs[0].nodeRef.toString();
avatar = avatar + '/content/thumbnails/avatar';
avatars[userName] = avatar;
}
}
}
// Pass the information to the template
model.invitations = invitations;
model.invitations = invites;
model.avatars = avatars;
}
main();

View File

@@ -4,7 +4,7 @@
{
"data": [
<#list invitations as invitation>
<@invitationLib.invitationJSON invitation=invitation />
<@invitationLib.invitationJSON invitation=invitation avatars=avatars />
<#if invitation_has_next>,</#if>
</#list>
]

View File

@@ -19,22 +19,28 @@
package org.alfresco.repo.web.scripts.invitation;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.alfresco.model.ContentModel;
import org.alfresco.repo.action.executer.MailActionExecuter;
import org.alfresco.repo.action.executer.TestModeable;
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;
import org.alfresco.service.cmr.security.PersonService;
import org.alfresco.service.cmr.site.SiteService;
import org.alfresco.service.cmr.site.SiteVisibility;
import org.alfresco.service.namespace.NamespaceService;
import org.alfresco.service.namespace.QName;
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.DeleteRequest;
import org.springframework.extensions.webscripts.TestWebScriptServer.GetRequest;
@@ -50,22 +56,25 @@ import org.springframework.extensions.webscripts.TestWebScriptServer.Response;
*/
public class InvitationTest extends BaseWebScriptTest
{
private final static QName avatarQName = QName.createQName(NamespaceService.APP_MODEL_1_0_URI, "test");
private MutableAuthenticationService authenticationService;
private AuthenticationComponent authenticationComponent;
private PersonService personService;
private SiteService siteService;
private NodeService nodeService;
private static final String USER_ONE = "InvitationTestOne";
private static final String USER_TWO = "InvitationTestTwo";
private static final String USER_THREE = "InvitationTestThree";
private String userOne = "InvitationTestOne" + GUID.generate();
private String userTwo = "InvitationTestTwo" + GUID.generate();
private String userThree = "InvitationTestThree" + GUID.generate();
private static final String URL_SITES = "/api/sites";
private static final String URL_INVITATIONS = "/api/invitations";
private List<String> createdSites = new ArrayList<String>(5);
private List<Tracker> createdInvitations = new ArrayList<Tracker>(10);
private TestModeable mailActionExecutor;
private final Map<String, Map<String, String>> userProperties = new HashMap<String, Map<String,String>>(3);
private class Tracker
{
@@ -74,6 +83,7 @@ public class InvitationTest extends BaseWebScriptTest
this.inviteId = inviteId;
this.siteName = siteName;
}
public String inviteId;
public String siteName;
}
@@ -83,43 +93,50 @@ public class InvitationTest extends BaseWebScriptTest
{
super.setUp();
this.authenticationService = (MutableAuthenticationService)getServer().getApplicationContext().getBean("AuthenticationService");
this.authenticationComponent = (AuthenticationComponent)getServer().getApplicationContext().getBean("authenticationComponent");
this.personService = (PersonService)getServer().getApplicationContext().getBean("PersonService");
this.siteService = (SiteService)getServer().getApplicationContext().getBean("SiteService");
this.nodeService = (NodeService)getServer().getApplicationContext().getBean("NodeService");
this.authenticationService = (MutableAuthenticationService) getServer().getApplicationContext().getBean(
"AuthenticationService");
this.authenticationComponent = (AuthenticationComponent) getServer().getApplicationContext().getBean(
"authenticationComponent");
this.personService = (PersonService) getServer().getApplicationContext().getBean("PersonService");
this.nodeService = (NodeService) getServer().getApplicationContext().getBean("NodeService");
// TODO MER 20/11/2009 Bodge - turn off email sending to prevent errors during unit testing
// TODO MER 20/11/2009 Bodge - turn off email sending to prevent errors
// during unit testing
// (or sending out email by accident from tests)
MailActionExecuter mail = (MailActionExecuter) getServer().getApplicationContext().getBean("mail");
mail.setTestMode(true);
mailActionExecutor = (TestModeable) getServer().getApplicationContext().getBean("mail");
mailActionExecutor.setTestMode(true);
this.authenticationComponent.setSystemUserAsCurrentUser();
// Create users
createUser(USER_ONE);
createUser(USER_TWO);
createUser(USER_THREE);
createUser(userOne, "Joe", "Bloggs");
createUser(userTwo, "Jane", "Doe");
createUser(userThree, "Nick", "Smith");
// Do tests as user one
this.authenticationComponent.setCurrentUser(USER_ONE);
this.authenticationComponent.setCurrentUser(userOne);
}
private void createUser(String userName)
{
if (this.authenticationService.authenticationExists(userName) == false)
private void createUser(String userName, String firstName, String lastName)
{
this.authenticationService.createAuthentication(userName, "PWD".toCharArray());
PropertyMap ppOne = new PropertyMap(4);
PropertyMap ppOne = new PropertyMap(5);
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_FIRSTNAME, firstName);
ppOne.put(ContentModel.PROP_LASTNAME, lastName);
String email = firstName+"@email.com";
ppOne.put(ContentModel.PROP_EMAIL, email);
ppOne.put(ContentModel.PROP_JOBTITLE, "jobTitle");
NodeRef person = personService.createPerson(ppOne);
String avatarUrl = makeAvatar(person);
this.personService.createPerson(ppOne);
}
// Create expected user properties
HashMap<String, String> properties = new HashMap<String, String>(4);
properties.put("firstName", firstName);
properties.put("lastName", lastName);
properties.put("email", email);
properties.put("avatar", avatarUrl);
userProperties.put(userName, properties);
}
@Override
@@ -128,7 +145,7 @@ public class InvitationTest extends BaseWebScriptTest
super.tearDown();
this.authenticationComponent.setCurrentUser(AuthenticationUtil.getAdminUserName());
// Tidy-up any site's create during the execution of the test
// Tidy-up any site's created during the execution of the test
for (String shortName : this.createdSites)
{
sendRequest(new DeleteRequest(URL_SITES + "/" + shortName), 0);
@@ -143,11 +160,17 @@ public class InvitationTest extends BaseWebScriptTest
}
// Clear the list
this.createdSites.clear();
this.createdInvitations.clear();
// Switch the MailActionExecutor back to normal mode.
mailActionExecutor.setTestMode(false);
personService.deletePerson(userOne);
personService.deletePerson(userTwo);
personService.deletePerson(userThree);
}
private JSONObject createSite(String sitePreset, String shortName, String title, String description, SiteVisibility visibility, int expectedStatus)
throws Exception
private JSONObject createSite(String sitePreset, String shortName, String title, String description,
SiteVisibility visibility, int expectedStatus) throws Exception
{
JSONObject site = new JSONObject();
site.put("sitePreset", sitePreset);
@@ -162,9 +185,11 @@ public class InvitationTest extends BaseWebScriptTest
/**
* Detailed Test of List Invitation Web Script.
* Using URL: /api/invitations
*
* @throws Exception
*/
public void testListInvitation() throws Exception
public void testInvitationsGet() throws Exception
{
// Create two sites.
String shortNameSiteA = GUID.generate();
@@ -175,7 +200,7 @@ public class InvitationTest extends BaseWebScriptTest
// Create a moderated invitation on SiteA, USER_TWO
String inviteeComments = "Please sir, let $* me in";
String userName = USER_TWO;
String userName = userTwo;
String roleName = SiteModel.SITE_CONSUMER;
String moderatedIdAUSER_TWO = createModeratedInvitation(shortNameSiteA, inviteeComments, userName, roleName);
@@ -183,9 +208,12 @@ public class InvitationTest extends BaseWebScriptTest
String moderatedIdBUSER_TWO = createModeratedInvitation(shortNameSiteB, inviteeComments, userName, roleName);
String inviteeCommentsB = "Please sir, let $* me in";
String userNameB = USER_THREE;
String userNameB = userThree;
String roleNameB = SiteModel.SITE_CONSUMER;
String moderatedIdBUSER_THREE = createModeratedInvitation(shortNameSiteA, inviteeCommentsB, userNameB, roleNameB);
// Create a moderated invitation on SiteB, USER_THREE
String moderatedIdBUSER_THREE = createModeratedInvitation(shortNameSiteB, inviteeCommentsB, userNameB,
roleNameB);
String inviteeFirstName = "Buffy";
String inviteeLastName = "Summers";
@@ -195,75 +223,239 @@ public class InvitationTest extends BaseWebScriptTest
String acceptURL = "page/accept-invite";
String rejectURL = "page/reject-invite";
// Create a nominated invitation
String nominatedId = createNominatedInvitation(shortNameSiteA, inviteeFirstName, inviteeLastName, inviteeEmail, inviteeUserName, roleName, serverPath, acceptURL, rejectURL);
// Create a nominated invitation on SiteA, UsER_TWO
String nominatedId = createNominatedInvitation(shortNameSiteA, inviteeFirstName, inviteeLastName, inviteeEmail,
inviteeUserName, roleName, serverPath, acceptURL, rejectURL);
/**
* search by user - find USER_TWO's three invitations
*/
// search by user - find USER_TWO's three invitations
{
Response response = sendRequest(new GetRequest(URL_INVITATIONS + "?inviteeUserName=" + USER_TWO), 200);
Response response = sendRequest(new GetRequest(URL_INVITATIONS + "?inviteeUserName=" + userTwo), 200);
JSONObject top = new JSONObject(response.getContentAsString());
//System.out.println(response.getContentAsString());
// System.out.println(response.getContentAsString());
JSONArray data = top.getJSONArray("data");
JSONObject first = getInvitation(moderatedIdAUSER_TWO, data);
assertNotNull("first is null", first);
JSONObject second = getInvitation(moderatedIdBUSER_TWO, data);
assertNotNull("second is null", second);
JSONObject third = getInvitation(nominatedId, data);
assertNotNull("third is null", third);
JSONObject moderatedAInv = getInvitation(moderatedIdAUSER_TWO, data);
assertNotNull("Moderated invitation to Site A not present!", moderatedAInv);
JSONObject moderatedBInv = getInvitation(moderatedIdBUSER_TWO, data);
assertNotNull("Moderated invitation to Site B not present!", moderatedBInv);
JSONObject nominatedInv = getInvitation(nominatedId, data);
assertNotNull("Nominated invitation to Site A not present!", nominatedInv);
for(int i = 0; i < data.length(); i++)
{
JSONObject obj = data.getJSONObject(i);
assertEquals("userid is wrong", obj.getString("inviteeUserName"), USER_TWO);
}
checkJSONInvitations(data);
}
/**
* search by type - should find three moderated invitations
*/
// search by type - should find three moderated invitations
{
Response response = sendRequest(new GetRequest(URL_INVITATIONS + "?invitationType=MODERATED"), 200);
JSONObject top = new JSONObject(response.getContentAsString());
//System.out.println(response.getContentAsString());
// System.out.println(response.getContentAsString());
JSONArray data = top.getJSONArray("data");
for(int i = 0; i < data.length(); i++)
for (int i = 0; i < data.length(); i++)
{
JSONObject obj = data.getJSONObject(i);
assertEquals("invitation type ", obj.getString("invitationType"), "MODERATED");
assertEquals("Wrong invitation type", "MODERATED", obj.getString("invitationType"));
}
JSONObject first = getInvitation(moderatedIdAUSER_TWO, data);
assertNotNull("first is null", first);
JSONObject second = getInvitation(moderatedIdBUSER_TWO, data);
assertNotNull("second is null", second);
JSONObject third = getInvitation(moderatedIdBUSER_THREE, data);
assertNotNull("third is null", third);
JSONObject moderatedATwoInv = getInvitation(moderatedIdAUSER_TWO, data);
assertNotNull("first is null", moderatedATwoInv);
JSONObject moderatedBTwoInv = getInvitation(moderatedIdBUSER_TWO, data);
assertNotNull("second is null", moderatedBTwoInv);
JSONObject moderatedBThreeInv = getInvitation(moderatedIdBUSER_THREE, data);
assertNotNull("third is null", moderatedBThreeInv);
}
/**
* Search by type and site
*/
// Search by type and site
{
Response response = sendRequest(new GetRequest(URL_INVITATIONS + "?invitationType=MODERATED&resourceName="+shortNameSiteA+ "&resourceType=WEB_SITE"), 200);
Response response = sendRequest(new GetRequest(URL_INVITATIONS + "?invitationType=MODERATED&resourceName="
+ shortNameSiteA + "&resourceType=WEB_SITE"), 200);
JSONObject top = new JSONObject(response.getContentAsString());
System.out.println(response.getContentAsString());
JSONArray data = top.getJSONArray("data");
assertEquals("two moderated invitations not found", data.length(), 2);
assertEquals("One moderated invitations not found", 1, data.length());
}
// negative test - unknown resourceType
{
sendRequest(new GetRequest(URL_INVITATIONS + "?invitationType=MODERATED&resourceName="+shortNameSiteA+ "&resourceType=crap"), 500);
Response response = sendRequest(new GetRequest(URL_INVITATIONS + "?invitationType=MODERATED&resourceName="
+ shortNameSiteA + "&resourceType=madeUpStuff"), 500);
assertEquals(500, response.getStatus());
JSONObject top = new JSONObject(response.getContentAsString());
assertNotNull(top.getString("message"));
}
}
/**
* Detailed Test of List Invitation Web Script.
* Using URL: /api/sites/{shortname}/invitations
*
* @throws Exception
*/
public void testSiteInvitationsGet() throws Exception
{
// Create two sites.
String shortNameSiteA = GUID.generate();
createSite("myPreset", shortNameSiteA, "myTitle", "myDescription", SiteVisibility.PUBLIC, 200);
String shortNameSiteB = GUID.generate();
createSite("myPreset", shortNameSiteB, "myTitle", "myDescription", SiteVisibility.PUBLIC, 200);
// Create a moderated invitation on SiteA, USER_TWO
String inviteeComments = "Please sir, let $* me in";
String userName = userTwo;
String roleName = SiteModel.SITE_CONSUMER;
String moderatedIdAUSER_TWO = createModeratedInvitation(shortNameSiteA, inviteeComments, userName, roleName);
// Create a moderated invitation on SiteB, USER_TWO
String moderatedIdBUSER_TWO = createModeratedInvitation(shortNameSiteB, inviteeComments, userName, roleName);
String inviteeCommentsB = "Please sir, let $* me in";
String userNameB = userThree;
String roleNameB = SiteModel.SITE_CONSUMER;
// Create a moderated invitation on SiteB, USER_THREE
String moderatedIdBUSER_THREE = createModeratedInvitation(shortNameSiteB, inviteeCommentsB, userNameB,
roleNameB);
String inviteeFirstName = "Buffy";
String inviteeLastName = "Summers";
String inviteeEmail = "buffy@sunnydale";
String inviteeUserName = userName;
String serverPath = "http://localhost:8081/share/";
String acceptURL = "page/accept-invite";
String rejectURL = "page/reject-invite";
// Create a nominated invitation on SiteA, UsER_TWO
String nominatedId = createNominatedInvitation(shortNameSiteA, inviteeFirstName, inviteeLastName, inviteeEmail,
inviteeUserName, roleName, serverPath, acceptURL, rejectURL);
// search for all invitations to site A: One Moderated Usr2, One Nominated User2
{
String allSiteAUrl = URL_SITES +"/" + shortNameSiteA + "/invitations";
Response response = sendRequest(new GetRequest(allSiteAUrl), 200);
JSONObject top = new JSONObject(response.getContentAsString());
// System.out.println(response.getContentAsString());
JSONArray data = top.getJSONArray("data");
assertEquals("Wrong number of invitations!", 2, data.length());
JSONObject moderatedAInv = getInvitation(moderatedIdAUSER_TWO, data);
assertNotNull("Moderated invitation to Site A not present!", moderatedAInv);
JSONObject nominatedInv = getInvitation(nominatedId, data);
assertNotNull("Nominated invitation to Site A not present!", nominatedInv);
checkJSONInvitations(data);
}
// search for all invitations to site B: One Moderated User2, One Moderated User3.
{
String allSiteBUrl = URL_SITES +"/" + shortNameSiteB + "/invitations";
Response response = sendRequest(new GetRequest(allSiteBUrl), 200);
JSONObject top = new JSONObject(response.getContentAsString());
// System.out.println(response.getContentAsString());
JSONArray data = top.getJSONArray("data");
assertEquals("Wrong number of invitations!", 2, data.length());
private String createNominatedInvitation(String siteName, String inviteeFirstName, String inviteeLastName, String inviteeEmail, String inviteeUserName, String inviteeRoleName, String serverPath, String acceptURL, String rejectURL) throws Exception
JSONObject moderatedB2Inv = getInvitation(moderatedIdBUSER_TWO, data);
assertNotNull("Moderated invitation User 2 to Site B not present!", moderatedB2Inv);
JSONObject moderatedB3Inv = getInvitation(moderatedIdBUSER_THREE, data);
assertNotNull("Moderated invitation User 3 to Site B not present!", moderatedB3Inv);
checkJSONInvitations(data);
}
// search SiteA by type Moderated: One Moderated User2
{
String siteAModeratedUrl = URL_SITES + "/" +shortNameSiteA + "/invitations?invitationType=MODERATED";
Response response = sendRequest(new GetRequest(siteAModeratedUrl), 200);
JSONObject top = new JSONObject(response.getContentAsString());
// System.out.println(response.getContentAsString());
JSONArray data = top.getJSONArray("data");
assertEquals(1, data.length());
JSONObject invitation = data.getJSONObject(0);
assertEquals("Wrong invitation type", "MODERATED", invitation.getString("invitationType"));
JSONObject moderatedATwoInv = getInvitation(moderatedIdAUSER_TWO, data);
assertNotNull("first is null", moderatedATwoInv);
}
// search SiteA by type Nominated: One Nominated User2
{
String siteANominatedUrl = URL_SITES + "/" +shortNameSiteA + "/invitations?invitationType=NOMINATED";
Response response = sendRequest(new GetRequest(siteANominatedUrl), 200);
JSONObject top = new JSONObject(response.getContentAsString());
// System.out.println(response.getContentAsString());
JSONArray data = top.getJSONArray("data");
assertEquals(1, data.length());
JSONObject invitation = data.getJSONObject(0);
assertEquals("Wrong invitation type", "NOMINATED", invitation.getString("invitationType"));
JSONObject nominatedATwoInv = getInvitation(nominatedId, data);
assertNotNull("first is null", nominatedATwoInv);
}
// search SiteB by userId 2: One Moderated User2
{
String siteBUser2Url = URL_SITES + "/" +shortNameSiteB + "/invitations?inviteeUserName=" + userTwo;
Response response = sendRequest(new GetRequest(siteBUser2Url), 200);
JSONObject top = new JSONObject(response.getContentAsString());
// System.out.println(response.getContentAsString());
JSONArray data = top.getJSONArray("data");
assertEquals(1, data.length());
JSONObject invitation = data.getJSONObject(0);
assertEquals("Wrong invitation user", userTwo, invitation.getString("inviteeUserName"));
JSONObject moderatedBTwoInv = getInvitation(moderatedIdBUSER_TWO, data);
assertNotNull("first is null", moderatedBTwoInv);
}
// search SiteB by userId 2: One Moderated User2
{
String siteBUser2Url = URL_SITES + "/" +shortNameSiteB + "/invitations?inviteeUserName=" + userThree;
Response response = sendRequest(new GetRequest(siteBUser2Url), 200);
JSONObject top = new JSONObject(response.getContentAsString());
// System.out.println(response.getContentAsString());
JSONArray data = top.getJSONArray("data");
assertEquals(1, data.length());
JSONObject invitation = data.getJSONObject(0);
assertEquals("Wrong invitation user", userThree, invitation.getString("inviteeUserName"));
JSONObject moderatedBThreeInv = getInvitation(moderatedIdBUSER_THREE, data);
assertNotNull("first is null", moderatedBThreeInv);
}
// negative test - unknown resourceType
{
Response response = sendRequest(new GetRequest(URL_INVITATIONS + "?invitationType=MODERATED&resourceName="
+ shortNameSiteA + "&resourceType=madeUpStuff"), 500);
assertEquals(500, response.getStatus());
JSONObject top = new JSONObject(response.getContentAsString());
assertNotNull(top.getString("message"));
}
}
private void checkJSONInvitations(JSONArray data) throws JSONException
{
for (int i = 0; i < data.length(); i++)
{
JSONObject invitation = data.getJSONObject(i);
String userId = invitation.getString("inviteeUserName");
// Check invitee info for Nominated invitation.
Map<String, String> expectedProps = userProperties.get(userId);
JSONObject invitee = invitation.getJSONObject("invitee");
assertNotNull(invitee);
assertEquals("User name is wrong for user: " + i, userId, invitee.getString("userName"));
assertEquals("Avatar URI is wrong for user: " + i, expectedProps.get("avatar"), invitee.getString("avatar"));
assertEquals("First name is wrong!", expectedProps.get("firstName"), invitee.getString("firstName"));
assertEquals("Last name is wrong!", expectedProps.get("lastName"), invitee.getString("lastName"));
}
}
private String makeAvatar(final NodeRef person)
{
nodeService.addAspect(person, ContentModel.ASPECT_PREFERENCES, null);
ChildAssociationRef assoc = nodeService.createNode(person, ContentModel.ASSOC_PREFERENCE_IMAGE, avatarQName,
ContentModel.TYPE_CONTENT);
NodeRef avatar = assoc.getChildRef();
nodeService.createAssociation(person, avatar, ContentModel.ASSOC_AVATAR);
return "api/node/" + avatar + "/content/thumbnails/avatar";
}
private String createNominatedInvitation(String siteName, String inviteeFirstName, String inviteeLastName,
String inviteeEmail, String inviteeUserName, String inviteeRoleName, String serverPath,
String acceptURL, String rejectURL) throws Exception
{
/*
* Create a new nominated invitation
@@ -272,12 +464,11 @@ public class InvitationTest extends BaseWebScriptTest
newInvitation.put("invitationType", "NOMINATED");
newInvitation.put("inviteeRoleName", inviteeRoleName);
if(inviteeUserName != null)
if (inviteeUserName != null)
{
// nominate an existing user
newInvitation.put("inviteeUserName", inviteeUserName);
}
else
} else
{
// nominate someone else
newInvitation.put("inviteeFirstName", inviteeFirstName);
@@ -288,7 +479,8 @@ public class InvitationTest extends BaseWebScriptTest
newInvitation.put("acceptURL", acceptURL);
newInvitation.put("rejectURL", rejectURL);
Response response = sendRequest(new PostRequest(URL_SITES + "/" + siteName + "/invitations", newInvitation.toString(), "application/json"), 201);
Response response = sendRequest(new PostRequest(URL_SITES + "/" + siteName + "/invitations", newInvitation
.toString(), "application/json"), 201);
JSONObject top = new JSONObject(response.getContentAsString());
JSONObject data = top.getJSONObject("data");
String inviteId = data.getString("inviteId");
@@ -298,7 +490,8 @@ public class InvitationTest extends BaseWebScriptTest
return inviteId;
}
private String createModeratedInvitation(String siteName, String inviteeComments, String inviteeUserName, String inviteeRoleName) throws Exception
private String createModeratedInvitation(String siteName, String inviteeComments, String inviteeUserName,
String inviteeRoleName) throws Exception
{
/*
* Create a new moderated invitation
@@ -309,7 +502,8 @@ public class InvitationTest extends BaseWebScriptTest
newInvitation.put("inviteeRoleName", inviteeRoleName);
newInvitation.put("inviteeComments", inviteeComments);
newInvitation.put("inviteeUserName", inviteeUserName);
Response response = sendRequest(new PostRequest(URL_SITES + "/" + siteName + "/invitations", newInvitation.toString(), "application/json"), 201);
Response response = sendRequest(new PostRequest(URL_SITES + "/" + siteName + "/invitations", newInvitation
.toString(), "application/json"), 201);
JSONObject top = new JSONObject(response.getContentAsString());
JSONObject data = top.getJSONObject("data");
String inviteId = data.getString("inviteId");
@@ -321,10 +515,10 @@ public class InvitationTest extends BaseWebScriptTest
private JSONObject getInvitation(String inviteId, JSONArray data) throws Exception
{
for(int i = 0; i < data.length(); i++)
for (int i = 0; i < data.length(); i++)
{
JSONObject obj = data.getJSONObject(i);
if(inviteId.equals(obj.getString("inviteId")))
if (inviteId.equals(obj.getString("inviteId")))
{
return obj;
}