Author: ludovic
Date: 2007-12-18 16:24:28 +0100 (Tue, 18 Dec 2007)
New Revision: 6404
Modified:
xwiki-products/curriki/trunk/plugins/invitationmanager/src/main/java/org/xwiki/plugin/invitationmanager/impl/InvitationManagerImpl.java
xwiki-products/curriki/trunk/plugins/invitationmanager/src/test/java/org/xwiki/plugin/invitationmanager/impl/InvitationImplTest.java
xwiki-products/curriki/trunk/plugins/invitationmanager/src/test/java/org/xwiki/plugin/invitationmanager/impl/InvitationManagerTest.java
xwiki-products/curriki/trunk/plugins/invitationmanager/src/test/java/org/xwiki/plugin/invitationmanager/impl/JoinRequestTest.java
xwiki-products/curriki/trunk/plugins/invitationmanager/src/test/java/org/xwiki/plugin/invitationmanager/impl/MembershipRequestImplTest.java
Log:
Finished invitation manager impl and tests
Modified:
xwiki-products/curriki/trunk/plugins/invitationmanager/src/main/java/org/xwiki/plugin/invitationmanager/impl/InvitationManagerImpl.java
===================================================================
---
xwiki-products/curriki/trunk/plugins/invitationmanager/src/main/java/org/xwiki/plugin/invitationmanager/impl/InvitationManagerImpl.java
2007-12-18 15:20:54 UTC (rev 6403)
+++
xwiki-products/curriki/trunk/plugins/invitationmanager/src/main/java/org/xwiki/plugin/invitationmanager/impl/InvitationManagerImpl.java
2007-12-18 15:24:28 UTC (rev 6404)
@@ -38,6 +38,7 @@
import com.xpn.xwiki.XWikiContext;
import com.xpn.xwiki.XWikiException;
+import com.xpn.xwiki.doc.XWikiDocument;
import com.xpn.xwiki.plugin.mailsender.MailSenderPlugin;
/**
@@ -230,8 +231,69 @@
*/
public List getInvitations(Invitation prototype, int start, int count,
XWikiContext context)
{
- // TODO
- return Collections.EMPTY_LIST;
+ try {
+ String className = getJoinRequestClassName(Invitation.class);
+ StringBuffer fromClause =
+ new StringBuffer("from XWikiDocument as doc, BaseObject as
obj");
+ StringBuffer whereClause =
+ new StringBuffer("where doc.fullName=obj.name and
obj.className = '" + className
+ + "'");
+
+ String space = prototype.getSpace();
+ String invitee = prototype.getInvitee();
+ if (space != null && invitee != null) {
+ Invitation invitation = getInvitation(space, invitee, context);
+ // find a better way of testing if the invitation is new
+ if (((XWikiDocument) invitation).isNew()) {
+ return Collections.EMPTY_LIST;
+ }
+ List list = new ArrayList();
+ list.add(invitation);
+ return list;
+ } else if (space != null) {
+ fromClause.append(", StringProperty as space");
+ whereClause
+ .append(" and obj.id=space.id.id and space.id.name='"
+ + InvitationImpl.InvitationFields.SPACE + "' and
space.value='" + space
+ + "'");
+ } else if (invitee != null) {
+ fromClause.append(" StringProperty as invitee");
+ whereClause.append(" and obj.id=invitee.id.id and
invitee.id.name='"
+ + InvitationImpl.InvitationFields.INVITEE + "' and
invitee.value='" + invitee
+ + "'");
+ }
+
+ int status = prototype.getStatus();
+ if (status != JoinRequestStatus.ANY) {
+ fromClause.append(", IntegerProperty as status");
+ whereClause.append(" and obj.id=status.id.id and
status.id.name='"
+ + InvitationImpl.InvitationFields.STATUS + "' and
status.value=" + status);
+ }
+
+ List roles = prototype.getRoles();
+ if (roles != null && roles.size() > 0) {
+ String role = (String) prototype.getRoles().get(0);
+ fromClause.append(", DBStringListProperty as roles join
roles.list as role");
+ whereClause.append(" and obj.id=roles.id.id and
roles.id.name='"
+ + InvitationImpl.InvitationFields.ROLES + "' and
instr(role.id, '" + role
+ + "')>0");
+ }
+
+ String inviter = prototype.getInviter();
+ if (inviter != null) {
+ fromClause.append(" StringProperty as inviter");
+ whereClause.append(" and obj.id=inviter.id.id and
inviter.id.name='"
+ + InvitationImpl.InvitationFields.INVITER + "' and
inviter.value='" + inviter
+ + "'");
+ }
+
+ String sql =
+ "select distinct doc " + fromClause.toString() + " " +
whereClause.toString();
+ return context.getWiki().getStore().search(sql, count, start,
context);
+ } catch (XWikiException e) {
+ e.printStackTrace();
+ return Collections.EMPTY_LIST;
+ }
}
/**
@@ -393,8 +455,69 @@
public List getMembershipRequests(MembershipRequest prototype, int start,
int count,
XWikiContext context)
{
- // TODO
- return Collections.EMPTY_LIST;
+ try {
+ String className =
getJoinRequestClassName(MembershipRequest.class);
+ StringBuffer fromClause =
+ new StringBuffer("from XWikiDocument as doc, BaseObject as
obj");
+ StringBuffer whereClause =
+ new StringBuffer("where doc.fullName=obj.name and
obj.className = '" + className
+ + "'");
+
+ String space = prototype.getSpace();
+ String requester = prototype.getRequester();
+ if (space != null && requester != null) {
+ MembershipRequest request = getMembershipRequest(space,
requester, context);
+ // find a better way of testing if the request is new
+ if (((XWikiDocument) request).isNew()) {
+ return Collections.EMPTY_LIST;
+ }
+ List list = new ArrayList();
+ list.add(request);
+ return list;
+ } else if (space != null) {
+ fromClause.append(", StringProperty as space");
+ whereClause.append(" and obj.id=space.id.id and
space.id.name='"
+ + MembershipRequestImpl.MembershipRequestFields.SPACE + "'
and space.value='"
+ + space + "'");
+ } else if (requester != null) {
+ fromClause.append(" StringProperty as requester");
+ whereClause.append(" and obj.id=requester.id.id and
requester.id.name='"
+ + MembershipRequestImpl.MembershipRequestFields.REQUESTER
+ + "' and requester.value='" + requester + "'");
+ }
+
+ int status = prototype.getStatus();
+ if (status != JoinRequestStatus.ANY) {
+ fromClause.append(", IntegerProperty as status");
+ whereClause.append(" and obj.id=status.id.id and
status.id.name='"
+ + MembershipRequestImpl.MembershipRequestFields.STATUS
+ + "' and status.value=" + status);
+ }
+
+ List roles = prototype.getRoles();
+ if (roles != null && roles.size() > 0) {
+ String role = (String) prototype.getRoles().get(0);
+ fromClause.append(", DBStringListProperty as roles join
roles.list as role");
+ whereClause.append(" and obj.id=roles.id.id and
roles.id.name='"
+ + MembershipRequestImpl.MembershipRequestFields.ROLES
+ + "' and instr(role.id, '" + role + "')>0");
+ }
+
+ String responder = prototype.getResponder();
+ if (responder != null) {
+ fromClause.append(" StringProperty as responder");
+ whereClause.append(" and obj.id=responder.id.id and
responder.id.name='"
+ + MembershipRequestImpl.MembershipRequestFields.RESPONDER
+ + "' and responder.value='" + responder + "'");
+ }
+
+ String sql =
+ "select distinct doc " + fromClause.toString() + " " +
whereClause.toString();
+ return context.getWiki().getStore().search(sql, count, start,
context);
+ } catch (XWikiException e) {
+ e.printStackTrace();
+ return Collections.EMPTY_LIST;
+ }
}
/**
@@ -856,9 +979,14 @@
toUser = membershipRequest.getRequester();
}
}
+ if (!isEmailAddress(fromUser)) {
+ fromUser = getEmailAddress(fromUser, context);
+ }
+ if (!isEmailAddress(toUser)) {
+ toUser = getEmailAddress(toUser, context);
+ }
MailSenderPlugin mailSender =
(MailSenderPlugin) context.getWiki().getPlugin("mailsender",
context);
- // TODO wikiName to e-mail address
mailSender.sendMailFromTemplate(templateDocFullName, fromUser, toUser,
"", "", context
.getLanguage(), vContext, context);
}
@@ -869,7 +997,7 @@
if (isEmailAddress(wikiNameOrMailAddress)) {
String email = wikiNameOrMailAddress;
String sql =
- "select distinct doc.name from XWikiDocument as doc,
BaseObject as obj, StringProperty typeprop where doc.fullName=obj.name and
obj.className = 'XWiki.XWikiUsers' and obj.id=typeprop.id.id and
typeprop.id.name='email' and typeprop.value='"
+ "select distinct doc.name from XWikiDocument as doc,
BaseObject as obj, StringProperty as prop where doc.fullName=obj.name and
obj.className = 'XWiki.XWikiUsers' and obj.id=prop.id.id and
prop.id.name='email' and prop.value='"
+ email + "'";
List userList = context.getWiki().getStore().search(sql, 1, 0,
context);
if (userList.size() > 0) {
@@ -892,6 +1020,13 @@
return str.contains("@");
}
+ private String getEmailAddress(String user, XWikiContext context) throws
XWikiException
+ {
+ user = findUser(user, context);
+ XWikiDocument userDoc = context.getWiki().getDocument(user, context);
+ return userDoc.getObject("XWiki.XWikiUsers").getStringValue("email");
+ }
+
// copy & paste from XWikiAuthServiceImpl#findUser(String, XWikiContext)
private String findUser(String username, XWikiContext context) throws
XWikiException
{
Modified:
xwiki-products/curriki/trunk/plugins/invitationmanager/src/test/java/org/xwiki/plugin/invitationmanager/impl/InvitationImplTest.java
===================================================================
---
xwiki-products/curriki/trunk/plugins/invitationmanager/src/test/java/org/xwiki/plugin/invitationmanager/impl/InvitationImplTest.java
2007-12-18 15:20:54 UTC (rev 6403)
+++
xwiki-products/curriki/trunk/plugins/invitationmanager/src/test/java/org/xwiki/plugin/invitationmanager/impl/InvitationImplTest.java
2007-12-18 15:24:28 UTC (rev 6404)
@@ -19,28 +19,78 @@
*/
package org.xwiki.plugin.invitationmanager.impl;
-import com.xpn.xwiki.XWikiContext;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import org.apache.commons.lang.RandomStringUtils;
+import org.xwiki.plugin.invitationmanager.api.Invitation;
+import org.xwiki.plugin.invitationmanager.api.JoinRequestStatus;
+
/**
* Unit tests for [EMAIL PROTECTED] InvitationImpl} class
*/
public class InvitationImplTest extends InvitationTest
{
- private XWikiContext context;
-
private InvitationManagerImpl manager;
protected void setUp() throws Exception
{
super.setUp();
- context = new XWikiContext();
manager = new InvitationManagerImpl();
joinRequest = new InvitationImpl(null, null, true, manager, context);
}
public void testSave()
{
- // TODO
+ try {
+ String invitee = "testInvitee";
+ String space = "testSpace";
+
+ Invitation expected = new InvitationImpl(invitee, space, true,
manager, context);
+ expected.setCode(RandomStringUtils.random(8));
+ expected.setInviter("testInviter");
+
+ Map map = new HashMap();
+ map.put("allowMailNotifications", "false");
+ map.put("notifyChanges", "true");
+ expected.setMap(map);
+
+ expected.setOpen(false);
+
+ SimpleDateFormat sdf = new SimpleDateFormat("yyyy.MM.dd");
+ expected.setRequestDate(sdf.parse("2006.09.25"));
+ expected.setResponseDate(new Date());
+
+ List roles = new ArrayList();
+ roles.add("developer");
+ roles.add("tester");
+ expected.setRoles(roles);
+
+ expected.setStatus(JoinRequestStatus.REFUSED);
+ expected.setText("testText");
+
+ expected.save();
+
+ Invitation actual = new InvitationImpl(invitee, space, false,
manager, context);
+
+ assertEquals(expected.isOpen(), actual.isOpen());
+ assertEquals(expected.getCode(), actual.getCode());
+ assertEquals(expected.getInvitee(), actual.getInvitee());
+ assertEquals(expected.getInviter(), actual.getInviter());
+ assertEquals(expected.getMap(), actual.getMap());
+ assertEquals(expected.getRequestDate(), actual.getRequestDate());
+ assertEquals(expected.getResponseDate(), actual.getResponseDate());
+ assertEquals(expected.getRoles(), actual.getRoles());
+ assertEquals(expected.getSpace(), actual.getSpace());
+ assertEquals(expected.getStatus(), actual.getStatus());
+ assertEquals(expected.getText(), actual.getText());
+ } catch (Exception e) {
+ assertTrue(false);
+ }
}
}
Modified:
xwiki-products/curriki/trunk/plugins/invitationmanager/src/test/java/org/xwiki/plugin/invitationmanager/impl/InvitationManagerTest.java
===================================================================
---
xwiki-products/curriki/trunk/plugins/invitationmanager/src/test/java/org/xwiki/plugin/invitationmanager/impl/InvitationManagerTest.java
2007-12-18 15:20:54 UTC (rev 6403)
+++
xwiki-products/curriki/trunk/plugins/invitationmanager/src/test/java/org/xwiki/plugin/invitationmanager/impl/InvitationManagerTest.java
2007-12-18 15:24:28 UTC (rev 6404)
@@ -19,9 +19,14 @@
*/
package org.xwiki.plugin.invitationmanager.impl;
+import java.util.HashMap;
import java.util.List;
+import java.util.Map;
+import org.jmock.Mock;
import org.jmock.cglib.MockObjectTestCase;
+import org.jmock.core.Invocation;
+import org.jmock.core.stub.CustomStub;
import org.xwiki.plugin.invitationmanager.api.Invitation;
import org.xwiki.plugin.invitationmanager.api.InvitationManager;
import org.xwiki.plugin.invitationmanager.api.JoinRequestStatus;
@@ -29,8 +34,13 @@
import org.xwiki.plugin.spacemanager.api.SpaceManager;
import org.xwiki.plugin.spacemanager.api.SpaceManagerException;
+import com.xpn.xwiki.XWiki;
+import com.xpn.xwiki.XWikiConfig;
import com.xpn.xwiki.XWikiContext;
import com.xpn.xwiki.XWikiException;
+import com.xpn.xwiki.doc.XWikiDocument;
+import com.xpn.xwiki.store.XWikiHibernateStore;
+import com.xpn.xwiki.store.XWikiStoreInterface;
/**
* Unit tests for classes implementing [EMAIL PROTECTED] InvitationManager}
interface
@@ -43,6 +53,12 @@
protected XWikiContext context;
+ protected XWiki xwiki;
+
+ protected Mock mockXWikiStore;
+
+ protected Map docs = new HashMap();
+
protected static final String SPACE = "MySpace";
protected static final String ADMIN = "MySpaceAdmin";
@@ -54,7 +70,52 @@
protected void setUp() throws Exception
{
super.setUp();
- // TODO: mock objects
+
+ context = new XWikiContext();
+ xwiki = new XWiki(new XWikiConfig(), context);
+ context.setWiki(xwiki);
+
+ mockXWikiStore =
+ mock(XWikiHibernateStore.class, new Class[] {XWiki.class,
XWikiContext.class},
+ new Object[] {xwiki, context});
+ mockXWikiStore.stubs().method("loadXWikiDoc").will(
+ new CustomStub("Implements XWikiStoreInterface.loadXWikiDoc")
+ {
+ public Object invoke(Invocation invocation) throws Throwable
+ {
+ XWikiDocument shallowDoc = (XWikiDocument)
invocation.parameterValues.get(0);
+
+ if (docs.containsKey(shallowDoc.getFullName())) {
+ return (XWikiDocument)
docs.get(shallowDoc.getFullName());
+ } else {
+ return shallowDoc;
+ }
+ }
+ });
+ this.mockXWikiStore.stubs().method("saveXWikiDoc").will(
+ new CustomStub("Implements XWikiStoreInterface.saveXWikiDoc")
+ {
+ public Object invoke(Invocation invocation) throws Throwable
+ {
+ XWikiDocument document = (XWikiDocument)
invocation.parameterValues.get(0);
+ document.setNew(false);
+ document.setStore((XWikiStoreInterface)
mockXWikiStore.proxy());
+ docs.put(document.getFullName(), document);
+ return null;
+ }
+ });
+ this.mockXWikiStore.stubs().method("exists").will(
+ new CustomStub("Implements XWikiStoreInterface.exists")
+ {
+ public Object invoke(Invocation invocation) throws Throwable
+ {
+ XWikiDocument document = (XWikiDocument)
invocation.parameterValues.get(0);
+ return (docs.get(document.getFullName()) == null) ?
Boolean.FALSE
+ : Boolean.TRUE;
+ }
+ });
+
+ xwiki.setStore((XWikiStoreInterface) mockXWikiStore.proxy());
}
public void testAcceptInvitation()
Modified:
xwiki-products/curriki/trunk/plugins/invitationmanager/src/test/java/org/xwiki/plugin/invitationmanager/impl/JoinRequestTest.java
===================================================================
---
xwiki-products/curriki/trunk/plugins/invitationmanager/src/test/java/org/xwiki/plugin/invitationmanager/impl/JoinRequestTest.java
2007-12-18 15:20:54 UTC (rev 6403)
+++
xwiki-products/curriki/trunk/plugins/invitationmanager/src/test/java/org/xwiki/plugin/invitationmanager/impl/JoinRequestTest.java
2007-12-18 15:24:28 UTC (rev 6404)
@@ -25,9 +25,20 @@
import java.util.List;
import java.util.Map;
+import org.jmock.Mock;
+import org.jmock.core.Invocation;
+import org.jmock.core.stub.CustomStub;
import org.xwiki.plugin.invitationmanager.api.JoinRequest;
import org.xwiki.plugin.invitationmanager.api.JoinRequestStatus;
+import com.xpn.xwiki.XWiki;
+import com.xpn.xwiki.XWikiConfig;
+import com.xpn.xwiki.XWikiContext;
+import com.xpn.xwiki.doc.XWikiDocument;
+import com.xpn.xwiki.store.XWikiHibernateStore;
+import com.xpn.xwiki.store.XWikiStoreInterface;
+import com.xpn.xwiki.user.api.XWikiRightService;
+
/**
* Unit tests for classes implementing [EMAIL PROTECTED] JoinRequest} interface
*/
@@ -35,14 +46,70 @@
{
protected JoinRequest joinRequest;
+ protected XWikiContext context;
+
+ protected XWiki xwiki;
+
+ protected Mock mockXWikiStore;
+
+ protected Mock mockXWikiRightService;
+
+ protected Map docs = new HashMap();
+
+ protected void setUp() throws Exception
+ {
+ super.setUp();
+
+ context = new XWikiContext();
+ xwiki = new XWiki(new XWikiConfig(), context);
+ context.setWiki(xwiki);
+
+ mockXWikiStore =
+ mock(XWikiHibernateStore.class, new Class[] {XWiki.class,
XWikiContext.class},
+ new Object[] {xwiki, context});
+ mockXWikiStore.stubs().method("loadXWikiDoc").will(
+ new CustomStub("Implements XWikiStoreInterface.loadXWikiDoc")
+ {
+ public Object invoke(Invocation invocation) throws Throwable
+ {
+ XWikiDocument shallowDoc = (XWikiDocument)
invocation.parameterValues.get(0);
+
+ if (docs.containsKey(shallowDoc.getFullName())) {
+ return (XWikiDocument)
docs.get(shallowDoc.getFullName());
+ } else {
+ return shallowDoc;
+ }
+ }
+ });
+ this.mockXWikiStore.stubs().method("saveXWikiDoc").will(
+ new CustomStub("Implements XWikiStoreInterface.saveXWikiDoc")
+ {
+ public Object invoke(Invocation invocation) throws Throwable
+ {
+ XWikiDocument document = (XWikiDocument)
invocation.parameterValues.get(0);
+ document.setNew(false);
+ document.setStore((XWikiStoreInterface)
mockXWikiStore.proxy());
+ docs.put(document.getFullName(), document);
+ return null;
+ }
+ });
+
+ mockXWikiRightService = mock(XWikiRightService.class, new Class[] {},
new Object[] {});
+
mockXWikiRightService.stubs().method("hasAccessLevel").withAnyArguments().will(
+ returnValue(true));
+
+ xwiki.setStore((XWikiStoreInterface) mockXWikiStore.proxy());
+ xwiki.setRightService((XWikiRightService)
mockXWikiRightService.proxy());
+ }
+
/**
* test for [EMAIL PROTECTED] JoinRequest#getMap()}
*/
public void testMap()
{
Map map = new HashMap();
- map.put("allowMailNotifications", Boolean.TRUE);
- map.put("notifyChanges", Boolean.FALSE);
+ map.put("allowMailNotifications", "true");
+ map.put("notifyChanges", "false");
joinRequest.setMap(map);
assertEquals(map, joinRequest.getMap());
}
Modified:
xwiki-products/curriki/trunk/plugins/invitationmanager/src/test/java/org/xwiki/plugin/invitationmanager/impl/MembershipRequestImplTest.java
===================================================================
---
xwiki-products/curriki/trunk/plugins/invitationmanager/src/test/java/org/xwiki/plugin/invitationmanager/impl/MembershipRequestImplTest.java
2007-12-18 15:20:54 UTC (rev 6403)
+++
xwiki-products/curriki/trunk/plugins/invitationmanager/src/test/java/org/xwiki/plugin/invitationmanager/impl/MembershipRequestImplTest.java
2007-12-18 15:24:28 UTC (rev 6404)
@@ -19,25 +19,74 @@
*/
package org.xwiki.plugin.invitationmanager.impl;
-import com.xpn.xwiki.XWikiContext;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import org.xwiki.plugin.invitationmanager.api.JoinRequestStatus;
+import org.xwiki.plugin.invitationmanager.api.MembershipRequest;
+
/**
* Unit tests for [EMAIL PROTECTED] MembershipRequestImpl} class
*/
public class MembershipRequestImplTest extends MembershipRequestTest
{
- private XWikiContext context;
-
private InvitationManagerImpl manager;
protected void setUp() throws Exception
{
super.setUp();
+
+ manager = new InvitationManagerImpl();
joinRequest = new MembershipRequestImpl(null, null, true, manager,
context);
}
public void testSave()
{
- // TODO
+ try {
+ String requester = "testRequester";
+ String space = "testSpace";
+
+ MembershipRequest expected =
+ new MembershipRequestImpl(requester, space, true, manager,
context);
+ expected.setResponder("testResponder");
+
+ Map map = new HashMap();
+ map.put("allowMailNotifications", "false");
+ map.put("notifyChanges", "true");
+ expected.setMap(map);
+
+ SimpleDateFormat sdf = new SimpleDateFormat("yyyy.MM.dd");
+ expected.setRequestDate(sdf.parse("2006.09.25"));
+ expected.setResponseDate(new Date());
+
+ List roles = new ArrayList();
+ roles.add("developer");
+ roles.add("tester");
+ expected.setRoles(roles);
+
+ expected.setStatus(JoinRequestStatus.REFUSED);
+ expected.setText("testText");
+
+ expected.save();
+
+ MembershipRequest actual =
+ new MembershipRequestImpl(requester, space, false, manager,
context);
+
+ assertEquals(expected.getRequester(), actual.getRequester());
+ assertEquals(expected.getResponder(), actual.getResponder());
+ assertEquals(expected.getMap(), actual.getMap());
+ assertEquals(expected.getRequestDate(), actual.getRequestDate());
+ assertEquals(expected.getResponseDate(), actual.getResponseDate());
+ assertEquals(expected.getRoles(), actual.getRoles());
+ assertEquals(expected.getSpace(), actual.getSpace());
+ assertEquals(expected.getStatus(), actual.getStatus());
+ assertEquals(expected.getText(), actual.getText());
+ } catch (Exception e) {
+ assertTrue(false);
+ }
}
}
_______________________________________________
notifications mailing list
[email protected]
http://lists.xwiki.org/mailman/listinfo/notifications