Added: shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/dataservice/integration/RestfulXmlActivityEntryTest.java URL: http://svn.apache.org/viewvc/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/dataservice/integration/RestfulXmlActivityEntryTest.java?rev=1060032&view=auto ============================================================================== --- shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/dataservice/integration/RestfulXmlActivityEntryTest.java (added) +++ shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/dataservice/integration/RestfulXmlActivityEntryTest.java Mon Jan 17 18:05:04 2011 @@ -0,0 +1,457 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ +package org.apache.shindig.social.dataservice.integration; + +import java.io.StringReader; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import javax.xml.parsers.DocumentBuilder; +import javax.xml.parsers.DocumentBuilderFactory; +import javax.xml.xpath.XPath; +import javax.xml.xpath.XPathConstants; +import javax.xml.xpath.XPathExpressionException; +import javax.xml.xpath.XPathFactory; + +import org.apache.shindig.social.core.model.ActionLinkImpl; +import org.apache.shindig.social.core.model.ActivityEntryImpl; +import org.apache.shindig.social.core.model.ActivityObjectImpl; +import org.apache.shindig.social.core.model.MediaLinkImpl; +import org.apache.shindig.social.core.model.StandardLinkImpl; +import org.apache.shindig.social.opensocial.model.ActionLink; +import org.apache.shindig.social.opensocial.model.ActivityEntry; +import org.apache.shindig.social.opensocial.model.ActivityObject; +import org.apache.shindig.social.opensocial.model.MediaLink; +import org.apache.shindig.social.opensocial.model.StandardLink; +import org.junit.Before; +import org.junit.Test; +import org.w3c.dom.Document; +import org.w3c.dom.Node; +import org.w3c.dom.NodeList; +import org.xml.sax.InputSource; + +public class RestfulXmlActivityEntryTest extends AbstractLargeRestfulTests { + + private static XPath xpath = XPathFactory.newInstance().newXPath(); + + private ActivityEntry johnsEntry1; + private ActivityEntry johnsEntry2; + + + @Before + public void restfulXmlActivityEntryTestBefore() throws Exception { + johnsEntry1 = generateEntry1(); + johnsEntry2 = generateEntry2(); + } + + protected static ActivityEntry generateEntry1() { + ActivityObject actor = new ActivityObjectImpl(); + actor.setId("john.doe"); + actor.setDisplayName("John Doe"); + + MediaLink image = new MediaLinkImpl(); + image.setUrl("https://docs.google.com/uc?id=0B-zwcqgujo7CMTRmZTg3Y2UtZGZlYS00MTY4LWFjOTItNDRiNmY3MzRmYzQ5&export=download&hl=en"); + image.setType("http://activitystrea.ms/schema/1.0/picture"); + image.setWidth(400); + image.setHeight(300); + image.setDuration(93); + + ActionLink actionLink1 = new ActionLinkImpl(); + actionLink1.setCaption("Frozen at the top of the German Alps"); + actionLink1.setTarget("http://johnsalbums/germany123/mediaItem3"); + ActionLink actionLink2 = new ActionLinkImpl(); + actionLink2.setCaption("Sign of Garmisch-Partenkirchen"); + actionLink2.setTarget("http://johnsalbums/germany123/mediaItem6"); + List<ActionLink> actionLinks = new ArrayList<ActionLink>(); + actionLinks.add(actionLink1); + actionLinks.add(actionLink2); + + StandardLink standardLink1 = new StandardLinkImpl(); + standardLink1.setHref("www.mypics.com/1"); + standardLink1.setType("image/jpg"); + StandardLink standardLink2 = new StandardLinkImpl(); + standardLink2.setHref("www.mypics.com/2"); + standardLink2.setType("image/jpg"); + StandardLink standardLink3 = new StandardLinkImpl(); + standardLink3.setHref("www.mypics.com/3"); + standardLink3.setType("image/jpg"); + StandardLink standardLink4 = new StandardLinkImpl(); + standardLink4.setHref("www.mypics.com/4"); + standardLink4.setType("image/jpg"); + List<StandardLink> standardLinksList1 = new ArrayList<StandardLink>(); + standardLinksList1.add(standardLink1); + standardLinksList1.add(standardLink2); + List<StandardLink> standardLinksList2 = new ArrayList<StandardLink>(); + standardLinksList2.add(standardLink3); + standardLinksList2.add(standardLink4); + Map<String, List<StandardLink>> standardLinks = new HashMap<String, List<StandardLink>>(); + standardLinks.put("myRel1", standardLinksList1); + standardLinks.put("myRel2", standardLinksList2); + + ActivityObject johnsObject = new ActivityObjectImpl(); + johnsObject.setId("object1"); + johnsObject.setDisplayName("Frozen Eric"); + johnsObject.setLink("http://www.johnsalbums/germany123"); + johnsObject.setObjectType("picture"); + johnsObject.setImage(image); + johnsObject.setActionLinks(actionLinks); + + List<String> to = new ArrayList<String>(); + to.add("jane.doe"); + to.add("canonical"); + List<String> cc = new ArrayList<String>(); + cc.add("george.doe"); + + ActivityEntry entry = new ActivityEntryImpl(); + entry.setTitle("John posted a photo"); + entry.setBody("John Doe posted a photo to the album Germany 2009"); + entry.setPostedTime("2010-04-27T06:02:36+0000"); + entry.setActor(actor); + entry.setVerb("post"); + entry.setObject(johnsObject); + entry.setStandardLinks(standardLinks); + entry.setTo(to); + entry.setCc(cc); + return entry; + } + + protected static ActivityEntry generateEntry2() { + ActivityObject actor = new ActivityObjectImpl(); + actor.setId("john.doe"); + actor.setDisplayName("John Doe"); + + ActivityObject johnsObject = new ActivityObjectImpl(); + johnsObject.setId("object2"); + johnsObject.setDisplayName("Super simple ActivityObject"); + johnsObject.setObjectType("article"); + + ActivityEntry entry = new ActivityEntryImpl(); + entry.setTitle("Super simple ActivityEntry"); + entry.setPostedTime("2010-04-27T06:02:36+0000"); + entry.setActor(actor); + entry.setVerb("post"); + entry.setObject(johnsObject); + return entry; + } + + /** + * Tests GET for a single ActivityEntry. + * + * @throws Exception if test encounters an error + */ + @Test + public void testGetActivityEntryXml() throws Exception { + String resp = getResponse("/activitystreams/john.doe/@self/@app/object1", "GET", "xml", "application/xml"); + + // TODO: Uncomment this if ActivityEntry added to opensocial.xsd + //XSDValidator.validateOpenSocial(resp); + + // Build XML Document + DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); + DocumentBuilder db = dbf.newDocumentBuilder(); + Document doc = db.parse(new InputSource(new StringReader(resp))); + + // Test ActivityEntry + Node entryNode = (Node)xpath.evaluate("/response/activityEntry", doc, XPathConstants.NODE); + assertNotNull("ActivityEntry should not be null", entryNode); + assertActivityEntriesEqual(johnsEntry1, entryNode); + } + + /** + * Tests GET for a list of ActivityEntries. + * + * @throws Exception if test encounters an error + */ + @Test + public void testGetActivityEntriesXml() throws Exception { + String resp = getResponse("/activitystreams/john.doe/@self", "GET", "xml", "application/xml"); + + // TODO: Uncomment this if ActivityEntry added to opensocial.xsd + //XSDValidator.validateOpenSocial(resp); + + // Build XML Document + DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); + DocumentBuilder db = dbf.newDocumentBuilder(); + Document doc = db.parse(new InputSource(new StringReader(resp))); + + // Test ActivityEntries + NodeList entries = (NodeList)xpath.evaluate("/response/entry/activityEntry", doc, XPathConstants.NODESET); + assertEquals(2, entries.getLength()); + if (johnsEntry1.getObject().getId().equals(xpath.evaluate("object/id", entries.item(0)))) { + assertActivityEntriesEqual(johnsEntry1, entries.item(0)); + assertActivityEntriesEqual(johnsEntry2, entries.item(1)); + } else { + assertActivityEntriesEqual(johnsEntry2, entries.item(0)); + assertActivityEntriesEqual(johnsEntry1, entries.item(1)); + } + } + + @Test + public void testCreateActivityEntryXml() throws Exception { + // TODO: REST POST with format = XML or ATOM doens't work; mapping with List or Map doesn't work + } + + // ------------------------ ACTIVITYENTRY EQUALITY TESTS -------------------------- + /** + * Utility to determine if two ActivityEntries are equal. Tests the + * structure of the XML. + * + * @param entry is an ActivityEntry to compare + * @param entryNode is an XML node containing the other ActivityEntry + * + * @throws XPathExpressionException if something goes wrong + */ + protected static void assertActivityEntriesEqual(ActivityEntry entry, Node entryNode) throws XPathExpressionException { + if (entry != null) { + // Test single level items + assertEqualsOrNull(entry.getTitle(), xpath.evaluate("title", entryNode)); + assertEqualsOrNull(entry.getBody(), xpath.evaluate("body", entryNode)); + assertEqualsOrNull(entry.getPostedTime(), xpath.evaluate("postedTime", entryNode)); + assertEqualsOrNull(entry.getVerb(), xpath.evaluate("verb", entryNode)); + + // Test ActivityEntry's ActivityObjects + assertActivityObjectsEqual(entry.getActor(), (Node)xpath.evaluate("actor", entryNode, XPathConstants.NODE)); + assertActivityObjectsEqual(entry.getObject(), (Node)xpath.evaluate("object", entryNode, XPathConstants.NODE)); + assertActivityObjectsEqual(entry.getTarget(), (Node)xpath.evaluate("target", entryNode, XPathConstants.NODE)); + assertActivityObjectsEqual(entry.getGenerator(), (Node)xpath.evaluate("generator", entryNode, XPathConstants.NODE)); + assertActivityObjectsEqual(entry.getProvider(), (Node)xpath.evaluate("provider", entryNode, XPathConstants.NODE)); + + // Test ActivityEntry's List<String> + assertListsStringEqual(entry.getTo(), (NodeList)xpath.evaluate("to", entryNode, XPathConstants.NODESET)); + assertListsStringEqual(entry.getCc(), (NodeList)xpath.evaluate("cc", entryNode, XPathConstants.NODESET)); + assertListsStringEqual(entry.getBcc(), (NodeList)xpath.evaluate("bcc", entryNode, XPathConstants.NODESET)); + + // Test ActivityEntry's Map<String, List<StandardLink>> + assertStandardLinkMapsEqual(entry.getStandardLinks(), (Node)xpath.evaluate("standardLinks", entryNode, XPathConstants.NODE)); + } else { + assertNull("EntryNode should be null", entryNode); + } + } + + /** + * Asserts that two ActivityObjects are equal. + * + * @param object is an ActivityObject to compare with an XML node + * @param objectNode is the XML node to compare with the ActivityObject + * @throws XPathExpressionException + */ + private static void assertActivityObjectsEqual(ActivityObject object, Node objectNode) throws XPathExpressionException { + if (object != null) { + // Test single level items + assertEqualsOrNull(object.getId(), xpath.evaluate("id", objectNode)); + assertEqualsOrNull(object.getDisplayName(), xpath.evaluate("displayName", objectNode)); + assertEqualsOrNull(object.getLink(), xpath.evaluate("link", objectNode)); + assertEqualsOrNull(object.getObjectType(), xpath.evaluate("objectType", objectNode)); + + // Test ActivityObject's image + assertMediaLinksEqual(object.getImage(), (Node)xpath.evaluate("image", objectNode, XPathConstants.NODE)); + + // Test ActivityObject's inReplyTo + assertActivityObjectsEqual(object.getInReplyTo(), (Node)xpath.evaluate("inReplyTo", objectNode, XPathConstants.NODE)); + + // Test ActivityObject's Map<String, List<StandardLink>> standardLinks + assertStandardLinkMapsEqual(object.getStandardLinks(), (Node)xpath.evaluate("standardLinks", objectNode, XPathConstants.NODE)); + + // Test ActivityObject's List<ActivityObject> elements + assertListsActivityObjectEqual(object.getAttachedObjects(), (NodeList)xpath.evaluate("attachedObjects", objectNode, XPathConstants.NODESET)); + assertListsActivityObjectEqual(object.getReplies(), (NodeList)xpath.evaluate("repies", objectNode, XPathConstants.NODESET)); + assertListsActivityObjectEqual(object.getReactions(), (NodeList)xpath.evaluate("reactions", objectNode, XPathConstants.NODESET)); + + // Test ActivityObject's actionLinks + assertListsActionLinkEqual(object.getActionLinks(), (NodeList)xpath.evaluate("actionLinks/actionLink", objectNode, XPathConstants.NODESET)); + } else { + assertNull("ActivityObject should be null", objectNode); + } + } + + /** + * Asserts that a Map<String, List<StandardLink>> is equal its XML NodeList equivalent. + * + * @param map is the map object to compare to the XML node + * @param mapNode is the XML node to compare to the map object + * + * @throws XPathExpressionException if something goes wrong :) + */ + private static void assertStandardLinkMapsEqual(Map<String, List<StandardLink>> map, Node mapNode) throws XPathExpressionException { + if (map != null) { + NodeList entries = (NodeList)xpath.evaluate("entry", mapNode, XPathConstants.NODESET); + assertEquals(map.size(), entries.getLength()); + for (String rel : map.keySet()) { + Node relNode = findNode("key", rel, entries); + assertNotNull("'" + rel + "' rel not found", relNode); + NodeList standardLinkNodes = (NodeList)xpath.evaluate("value/standardLink", relNode, XPathConstants.NODESET); + List<StandardLink> standardLinks = map.get(rel); + assertListsStandardLinkEqual(standardLinks, standardLinkNodes); + } + } else { + assertNull("mapNode should be null", mapNode); + } + } + + /** + * Asserts that a List<String> is equal to its XML node equivalent. + * + * @param list is the list to compare to an XML node + * @param nodeList is the XML node to compare to the list + * + * @throws XPathExpressionException if something goes wrong :) + */ + private static void assertListsStringEqual(List<String> list, NodeList nodeList) throws XPathExpressionException { + if (list != null) { + assertEquals(list.size(), nodeList.getLength()); + for (String value : list) { + assertNotNull("'" + value + "' was not found in nodeList", findNode(".", value, nodeList)); + } + } else { + assertEquals(0, nodeList.getLength()); + } + } + + /** + * Asserts that a List<ActivityObject> is equal to its XML node equivalent. + * + * @param list is the list to compare to an XML node + * @param nodeList is the XML node to compare to the list + * + * @throws XPathExpressionException if something goes wrong :) + */ + private static void assertListsActivityObjectEqual(List<ActivityObject> list, NodeList nodeList) throws XPathExpressionException { + if (list != null) { + assertEquals(list.size(), nodeList.getLength()); + for (ActivityObject object : list) { + Node objectNode = findNode("id", object.getId(), nodeList); + assertNotNull("node with id '" + object.getId() + "' not found", objectNode); + assertActivityObjectsEqual(object, objectNode); + } + } else { + assertEquals(0, nodeList.getLength()); + } + } + + /** + * Asserts that a List<ActionLink> is equal to its XML node equivalent. + * + * @param list is the list to compare to an XML node + * @param nodeList is the XML node to compare to the list + * + * @throws XPathExpressionException if something goes wrong :) + */ + private static void assertListsActionLinkEqual(List<ActionLink> list, NodeList nodeList) throws XPathExpressionException { + if (list != null) { + assertEquals(list.size(), nodeList.getLength()); + for (ActionLink actionLink : list) { + Node actionLinkNode = findNode("target", actionLink.getTarget(), nodeList); + assertNotNull("node with target '" + actionLink.getTarget() + "' not found", actionLinkNode); + assertActionLinksEqual(actionLink, actionLinkNode); + } + } else { + assertEquals(0, nodeList.getLength()); + } + } + + /** + * Asserts that a List<StandardLink> is equal to its XML node equivalent. + * + * @param list is the list to compare to an XML node + * @param nodeList is the XML node to compare to the list + * + * @throws XPathExpressionException if something goes wrong :) + */ + private static void assertListsStandardLinkEqual(List<StandardLink> list, NodeList nodeList) throws XPathExpressionException { + if (list != null) { + assertEquals(list.size(), nodeList.getLength()); + for (StandardLink standardLink : list) { + Node standardLinkNode = findNode("href", standardLink.getHref(), nodeList); + assertNotNull("node with href '" + standardLink.getHref() + "' not found", standardLinkNode); + assertStandardLinksEqual(standardLink, standardLinkNode); + } + } else { + assertEquals(0, nodeList.getLength()); + } + } + + /** + * Asserts that two MediaLinks are equal. + * + * @param media is the MediaLink object to compare with the XML node + * @param mediaNode mediaNode is the XML node to compare with the MediaLink object + * @throws XPathExpressionException + */ + private static void assertMediaLinksEqual(MediaLink media, Node mediaNode) throws XPathExpressionException { + if (media != null) { + assertEqualsOrNull(media.getDuration().toString(), xpath.evaluate("duration", mediaNode)); + assertEqualsOrNull(media.getHeight().toString(), xpath.evaluate("height", mediaNode)); + assertEqualsOrNull(media.getWidth().toString(), xpath.evaluate("width", mediaNode)); + assertEqualsOrNull(media.getType(), xpath.evaluate("type", mediaNode)); + assertEqualsOrNull(media.getUrl(), xpath.evaluate("url", mediaNode)); + } else { + assertNull("Image should be null", mediaNode); + } + } + + /** + * Asserts an ActionLink to its XML node equivalent + * + * @param actionLink is the ActionLink to compare to the XML node + * @param actionLinkNode is the XML node to compare to the ActionLink + * @throws XPathExpressionException + */ + private static void assertActionLinksEqual(ActionLink actionLink, Node actionLinkNode) throws XPathExpressionException { + assertEqualsOrNull(actionLink.getTarget(), xpath.evaluate("target", actionLinkNode)); + assertEqualsOrNull(actionLink.getCaption(), xpath.evaluate("caption", actionLinkNode)); + } + + /** + * Asserts that two StandardLinks are equal. + * + * @throws XPathExpressionException if something goes wrong :) + */ + private static void assertStandardLinksEqual(StandardLink standardLink, Node standardLinkNode) throws XPathExpressionException { + assertEqualsOrNull(standardLink.getHref(), xpath.evaluate("href", standardLinkNode)); + assertEqualsOrNull(standardLink.getType(), xpath.evaluate("type", standardLinkNode)); + assertEqualsOrNull(standardLink.getInline(), xpath.evaluate("inline", standardLinkNode)); + } + + /** + * Finds a Node within a NodeList with the given key at the given path. + * + * @param path is the path to the key + * @param key is the key that identifies the node to find + * @param nodeList is the list of nodes to search through + * + * @return Node is the found node if located, null otherwise + */ + private static Node findNode(String path, String key, NodeList nodeList) throws XPathExpressionException { + for (int i = 0; i < nodeList.getLength(); i++) { + if (key.equals(xpath.evaluate(path, nodeList.item(i)))) + return nodeList.item(i); + } + return null; + } + + /** + * Asserts that two objects are equal. Null and "" are considered equal. + */ + protected static void assertEqualsOrNull(Object obj1, Object obj2) { + if (obj1 == null) obj1 = ""; + if (obj2 == null) obj2 = ""; + assertEquals(obj1, obj2); + } +}
Copied: shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/opensocial/service/ActivityStreamHandlerTest.java (from r1059997, shindig/trunk/extras/src/test/java/org/apache/shindig/extras/as/opensocial/service/ActivityStreamsHandlerTest.java) URL: http://svn.apache.org/viewvc/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/opensocial/service/ActivityStreamHandlerTest.java?p2=shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/opensocial/service/ActivityStreamHandlerTest.java&p1=shindig/trunk/extras/src/test/java/org/apache/shindig/extras/as/opensocial/service/ActivityStreamsHandlerTest.java&r1=1059997&r2=1060032&rev=1060032&view=diff ============================================================================== --- shindig/trunk/extras/src/test/java/org/apache/shindig/extras/as/opensocial/service/ActivityStreamsHandlerTest.java (original) +++ shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/opensocial/service/ActivityStreamHandlerTest.java Mon Jan 17 18:05:04 2011 @@ -15,7 +15,7 @@ * KIND, either express or implied. See the License for the * specific language governing permissions and limitations under the License. */ -package org.apache.shindig.extras.as.opensocial.service; +package org.apache.shindig.social.opensocial.service; import static org.easymock.EasyMock.eq; import static org.easymock.EasyMock.isNull; @@ -31,9 +31,6 @@ import org.apache.shindig.common.util.Im import org.apache.shindig.config.ContainerConfig; import org.apache.shindig.config.JsonContainerConfig; import org.apache.shindig.expressions.Expressions; -import org.apache.shindig.extras.as.core.model.ActivityEntryImpl; -import org.apache.shindig.extras.as.opensocial.model.ActivityEntry; -import org.apache.shindig.extras.as.opensocial.spi.ActivityStreamService; import org.apache.shindig.protocol.DefaultHandlerRegistry; import org.apache.shindig.protocol.HandlerExecutionListener; import org.apache.shindig.protocol.HandlerRegistry; @@ -41,6 +38,9 @@ import org.apache.shindig.protocol.Proto import org.apache.shindig.protocol.RestHandler; import org.apache.shindig.protocol.RestfulCollection; import org.apache.shindig.protocol.conversion.BeanJsonConverter; +import org.apache.shindig.social.core.model.ActivityEntryImpl; +import org.apache.shindig.social.opensocial.model.ActivityEntry; +import org.apache.shindig.social.opensocial.spi.ActivityStreamService; import org.apache.shindig.social.opensocial.spi.CollectionOptions; import org.apache.shindig.social.opensocial.spi.GroupId; import org.apache.shindig.social.opensocial.spi.UserId; @@ -56,13 +56,13 @@ import com.google.common.collect.Sets; /** * Tests the ActivityStreamsHandler. */ -public class ActivityStreamsHandlerTest extends EasyMockTestCase { +public class ActivityStreamHandlerTest extends EasyMockTestCase { private BeanJsonConverter converter; private ActivityStreamService service; - private ActivityStreamsHandler handler; // TODO: Rename to ActivityStreamHandler + private ActivityStreamHandler handler; // TODO: Rename to ActivityStreamHandler private FakeGadgetToken token; @@ -87,7 +87,7 @@ public class ActivityStreamsHandlerTest "}}}"); containerConfig = new JsonContainerConfig(config, Expressions.forTesting()); - handler = new ActivityStreamsHandler(service, containerConfig); + handler = new ActivityStreamHandler(service, containerConfig); registry = new DefaultHandlerRegistry(null, converter, new HandlerExecutionListener.NoOpHandler()); registry.addHandlers(ImmutableSet.<Object>of(handler)); Modified: shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/sample/spi/JsonDbOpensocialServiceTest.java URL: http://svn.apache.org/viewvc/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/sample/spi/JsonDbOpensocialServiceTest.java?rev=1060032&r1=1060031&r2=1060032&view=diff ============================================================================== --- shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/sample/spi/JsonDbOpensocialServiceTest.java (original) +++ shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/sample/spi/JsonDbOpensocialServiceTest.java Mon Jan 17 18:05:04 2011 @@ -18,6 +18,10 @@ */ package org.apache.shindig.social.sample.spi; +import java.util.Collections; + +import javax.servlet.http.HttpServletResponse; + import org.apache.shindig.auth.SecurityToken; import org.apache.shindig.common.testing.FakeGadgetToken; import org.apache.shindig.protocol.DataCollection; @@ -27,23 +31,20 @@ import org.apache.shindig.protocol.model import org.apache.shindig.protocol.model.SortOrder; import org.apache.shindig.social.SocialApiTestsGuiceModule; import org.apache.shindig.social.opensocial.model.Activity; +import org.apache.shindig.social.opensocial.model.ActivityEntry; import org.apache.shindig.social.opensocial.model.Person; import org.apache.shindig.social.opensocial.spi.CollectionOptions; import org.apache.shindig.social.opensocial.spi.GroupId; import org.apache.shindig.social.opensocial.spi.PersonService; import org.apache.shindig.social.opensocial.spi.UserId; - -import java.util.Collections; - -import javax.servlet.http.HttpServletResponse; +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableSet; import com.google.inject.Guice; import com.google.inject.Injector; -import org.junit.Assert; -import org.junit.Before; -import org.junit.Test; /** * Test the JSONOpensocialService @@ -274,4 +275,46 @@ public class JsonDbOpensocialServiceTest assertTrue(responseItem.getEntry().get(CANONICAL_USER_ID).containsKey("newvalue")); assertEquals("20", responseItem.getEntry().get(CANONICAL_USER_ID).get("newvalue")); } + + @Test + public void testGetExpectedActivityEntries() throws Exception { + RestfulCollection<ActivityEntry> responseItem = db.getActivityEntries( + ImmutableSet.of(JOHN_DOE), SELF_GROUP, APP_ID, Collections.<String>emptySet(), null, + new FakeGadgetToken()).get(); + assertSame(2, responseItem.getTotalResults()); + } + + @Test + public void testGetExpectedActivityEntriesForPlural() throws Exception { + RestfulCollection<ActivityEntry> responseItem = db.getActivityEntries( + ImmutableSet.of(CANON_USER, JOHN_DOE), SELF_GROUP, APP_ID, Collections.<String>emptySet(), null, + new FakeGadgetToken()).get(); + assertSame(2, responseItem.getTotalResults()); + } + + @Test + public void testGetExpectedActivityEntry() throws Exception { + ActivityEntry entry = db.getActivityEntry(JOHN_DOE, SELF_GROUP, APP_ID, + ImmutableSet.of("body"), "object1", new FakeGadgetToken()).get(); + assertNotNull(entry); + // Check that some fields are fetched and others are not + assertNotNull(entry.getBody()); + assertNull(entry.getPostedTime()); + } + + @Test + public void testDeleteExpectedActivityEntry() throws Exception { + db.deleteActivityEntries(JOHN_DOE, SELF_GROUP, APP_ID, ImmutableSet.of(APP_ID), + new FakeGadgetToken()); + + // Try to fetch the activity + try { + db.getActivityEntry( + JOHN_DOE, SELF_GROUP, APP_ID, + ImmutableSet.of("body"), APP_ID, new FakeGadgetToken()).get(); + fail(); + } catch (ProtocolException sse) { + assertEquals(HttpServletResponse.SC_BAD_REQUEST, sse.getCode()); + } + } }
