Added: 
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/preload/SocialPreloaderTest.java
URL: 
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/preload/SocialPreloaderTest.java?rev=727098&view=auto
==============================================================================
--- 
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/preload/SocialPreloaderTest.java
 (added)
+++ 
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/preload/SocialPreloaderTest.java
 Tue Dec 16 09:44:54 2008
@@ -0,0 +1,145 @@
+/*
+ * 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.gadgets.preload;
+
+import com.google.common.collect.Lists;
+import org.apache.shindig.common.ContainerConfig;
+import org.apache.shindig.gadgets.http.ContentFetcherFactory;
+import org.apache.shindig.gadgets.http.HttpRequest;
+import org.apache.shindig.gadgets.http.HttpResponse;
+import org.apache.shindig.gadgets.http.HttpResponseBuilder;
+import org.apache.shindig.gadgets.spec.GadgetSpec;
+import org.apache.shindig.gadgets.spec.SocialData;
+import org.easymock.EasyMock;
+import org.json.JSONObject;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+import org.junit.Before;
+import org.junit.Test;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.Callable;
+
+/**
+ * Test for SocialPreloader.
+ */
+public class SocialPreloaderTest extends PreloaderTestFixture {
+  private ContainerConfig containerConfig;
+
+  private static final String XML = "<Module xmlns:os=\"" + 
SocialData.OPENSOCIAL_NAMESPACE + "\">"
+      + "<ModulePrefs title=\"Title\"/>"
+      + "<Content href=\"http://example.org/proxied.php\"; view=\"profile\">"
+      + "  <os:PeopleRequest key=\"p\" userIds=\"you\"/>"
+      + "  <os:PersonAppDataRequest key=\"a\" userId=\"she\"/>"
+      + "</Content></Module>";
+
+  @Before
+  public void createContainerConfig() {
+    containerConfig = EasyMock.createMock(ContainerConfig.class);
+    EasyMock.expect(containerConfig.get(CONTAINER, "gadgets.osDataUri"))
+        .andStubReturn("http://%host%/social/rpc";);
+    EasyMock.replay(containerConfig);
+  }
+
+  @Test
+  public void testSocialPreload() throws Exception {
+    GadgetSpec spec = new GadgetSpec(GADGET_URL, XML);
+
+    String socialResult = "[{id:'p', data:1}, {id:'a', data:2}]";
+    RecordingHttpFetcher fetcher = new RecordingHttpFetcher(socialResult);
+    SocialPreloader preloader = new SocialPreloader(fetcher, containerConfig);
+    view = "profile";
+    contextParams.put("st", "token");
+
+    Collection<Callable<PreloadedData>> tasks =
+        preloader.createPreloadTasks(context, spec, 
PreloaderService.PreloadPhase.PROXY_FETCH);
+    assertEquals(1, tasks.size());
+    // Nothing fetched yet
+    assertEquals(0, fetcher.requests.size());
+
+    Map<String, Object> result = tasks.iterator().next().call().toJson();
+    assertEquals(2, result.size());
+
+    JSONObject resultWithKeyP = new JSONObject("{id: 'p', data: 1}");
+    JSONObject resultWithKeyA = new JSONObject("{id: 'a', data: 2}");
+    assertEquals(resultWithKeyP.toString(), result.get("p").toString());
+    assertEquals(resultWithKeyA.toString(), result.get("a").toString());
+
+    // Should have only fetched one request
+    assertEquals(1, fetcher.requests.size());
+    HttpRequest request = fetcher.requests.get(0);
+
+    assertEquals("http://"; + context.getHost() + "/social/rpc?st=token",
+        request.getUri().toString());
+    assertEquals("POST", request.getMethod());
+    assertTrue(request.getContentType().startsWith("application/json"));
+  }
+
+  @Test
+  public void testSocialPreloadForOtherView() throws Exception {
+    GadgetSpec spec = new GadgetSpec(GADGET_URL, XML);
+
+    String socialResult = "[{id:'p', data:1}, {id:'a', data:2}]";
+    RecordingHttpFetcher fetcher = new RecordingHttpFetcher(socialResult);
+    SocialPreloader preloader = new SocialPreloader(fetcher, containerConfig);
+    view = "canvas";
+    contextParams.put("st", "token");
+
+    Collection<Callable<PreloadedData>> tasks =
+        preloader.createPreloadTasks(context, spec, 
PreloaderService.PreloadPhase.PROXY_FETCH);
+    assertTrue(tasks.isEmpty());
+  }
+
+  @Test
+  public void testSocialPreloadForHtmlRender() throws Exception {
+    GadgetSpec spec = new GadgetSpec(GADGET_URL, XML);
+
+    String socialResult = "[{id:'p', data:1}, {id:'a', data:2}]";
+    RecordingHttpFetcher fetcher = new RecordingHttpFetcher(socialResult);
+    SocialPreloader preloader = new SocialPreloader(fetcher, containerConfig);
+    view = "profile";
+    contextParams.put("st", "token");
+
+    Collection<Callable<PreloadedData>> tasks =
+        preloader.createPreloadTasks(context, spec, 
PreloaderService.PreloadPhase.HTML_RENDER);
+    assertTrue(tasks.isEmpty());
+  }
+
+  // TODO: test HttpPreloads
+
+  private static class RecordingHttpFetcher extends ContentFetcherFactory {
+    public final List<HttpRequest> requests = Lists.newArrayList();
+    private final String content;
+
+    public RecordingHttpFetcher(String content) {
+      super(null, null);
+      this.content = content;
+    }
+
+    @Override
+    public HttpResponse fetch(HttpRequest request) {
+      requests.add(request);
+      return new HttpResponseBuilder()
+          .setResponseString(content)
+          .create();
+    }
+  }
+}

Modified: 
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/render/HtmlRendererTest.java
URL: 
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/render/HtmlRendererTest.java?rev=727098&r1=727097&r2=727098&view=diff
==============================================================================
--- 
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/render/HtmlRendererTest.java
 (original)
+++ 
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/render/HtmlRendererTest.java
 Tue Dec 16 09:44:54 2008
@@ -18,6 +18,8 @@
  */
 package org.apache.shindig.gadgets.render;
 
+import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.Lists;
 import com.google.common.collect.Maps;
 import org.apache.shindig.auth.AnonymousSecurityToken;
 import org.apache.shindig.auth.SecurityToken;
@@ -30,18 +32,20 @@
 import org.apache.shindig.gadgets.http.ContentFetcherFactory;
 import org.apache.shindig.gadgets.http.HttpRequest;
 import org.apache.shindig.gadgets.http.HttpResponse;
+import org.apache.shindig.gadgets.preload.PreloadException;
+import org.apache.shindig.gadgets.preload.PreloadedData;
 import org.apache.shindig.gadgets.preload.PreloaderService;
 import org.apache.shindig.gadgets.preload.Preloads;
 import org.apache.shindig.gadgets.rewrite.ContentRewriterRegistry;
 import org.apache.shindig.gadgets.spec.GadgetSpec;
 import org.apache.shindig.gadgets.spec.View;
+import org.json.JSONArray;
+import org.json.JSONObject;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertTrue;
 import org.junit.Test;
 
-import java.util.Arrays;
-import java.util.Locale;
-import java.util.Map;
+import java.util.*;
 
 /**
  * Tests for HtmlRenderer
@@ -135,6 +139,55 @@
   }
 
   @Test
+  public void renderProxiedWithPreload() throws Exception {
+    JSONObject prefetchedJson = new JSONObject("{id: 'foo', data: 'bar'}");
+
+    preloaderService.preloads = new FakePreloads(
+        ImmutableMap.of("key", (Object) prefetchedJson));
+    
+    fetcher.plainResponses.put(EXPECTED_PROXIED_HTML_HREF, new 
HttpResponse(PROXIED_HTML_CONTENT));
+    String content = renderer.render(makeHrefGadget("none"));
+    assertEquals(PROXIED_HTML_CONTENT, content);
+
+    HttpRequest lastHttpRequest = fetcher.getLastHttpRequest();
+    assertEquals("POST", lastHttpRequest.getMethod());
+    assertEquals("GET", lastHttpRequest.getHeader("X-Method-Override"));
+    String postBody = lastHttpRequest.getPostBodyAsString();
+    JSONArray actualJson = new JSONArray(postBody);
+
+    assertEquals(1, actualJson.length());
+    assertEquals(prefetchedJson.toString(), 
actualJson.getJSONObject(0).toString());
+  }
+
+  @Test
+  public void renderProxiedWithFailedPreload() throws Exception {
+    JSONObject prefetchedJson = new JSONObject("{id: 'foo', data: 'bar'}");
+
+    preloaderService.preloads = new Preloads() {
+      public Collection<PreloadedData> getData() {
+        PreloadedData preloadedData = new PreloadedData() {
+          public Map<String, Object> toJson() throws PreloadException {
+            throw new PreloadException("test");
+          }
+        };
+        return Lists.newArrayList(preloadedData);
+      }
+    };
+
+    fetcher.plainResponses.put(EXPECTED_PROXIED_HTML_HREF, new 
HttpResponse(PROXIED_HTML_CONTENT));
+    String content = renderer.render(makeHrefGadget("none"));
+    assertEquals(PROXIED_HTML_CONTENT, content);
+
+    HttpRequest lastHttpRequest = fetcher.getLastHttpRequest();
+    assertEquals("POST", lastHttpRequest.getMethod());
+    assertEquals("GET", lastHttpRequest.getHeader("X-Method-Override"));
+    String postBody = lastHttpRequest.getPostBodyAsString();
+    JSONArray actualJson = new JSONArray(postBody);
+
+    assertEquals(0, actualJson.length());
+  }
+
+  @Test
   public void doPreloading() throws Exception {
     renderer.render(makeGadget(BASIC_HTML_CONTENT));
     assertTrue("Preloading not performed.", preloaderService.wasPreloaded);
@@ -150,6 +203,7 @@
     private final Map<Uri, HttpResponse> plainResponses = Maps.newHashMap();
     private final Map<Uri, HttpResponse> signedResponses = Maps.newHashMap();
     private final Map<Uri, HttpResponse> oauthResponses = Maps.newHashMap();
+    private HttpRequest lastHttpRequest;
 
     public FakeContentFetcherFactory() {
       super(null, null);
@@ -157,6 +211,8 @@
 
     @Override
     public HttpResponse fetch(HttpRequest request) throws GadgetException {
+      lastHttpRequest = request;
+
       if (request.getGadget() == null) {
         throw new 
GadgetException(GadgetException.Code.FAILED_TO_RETRIEVE_CONTENT,
             "No gadget associated with rendering request.");
@@ -198,16 +254,38 @@
       }
       return response;
     }
+
+    public HttpRequest getLastHttpRequest() {
+      return lastHttpRequest;
+    }
   }
 
   private static class FakePreloaderService implements PreloaderService {
     private boolean wasPreloaded;
-    public Preloads preload(GadgetContext context, GadgetSpec gadget) {
+    Preloads preloads;
+
+    public Preloads preload(GadgetContext context, GadgetSpec gadget, 
PreloadPhase phase) {
       wasPreloaded = true;
-      return null;
+      return preloads;
     }
   }
 
+  private static class FakePreloads implements Preloads {
+    private final PreloadedData preloadedData;
+
+    public Collection<PreloadedData> getData() {
+      return Collections.singletonList(preloadedData);
+    }
+
+    public FakePreloads(final Map<String, Object> preloadData) {
+      this.preloadedData = new PreloadedData() {
+        public Map<String, Object> toJson() throws PreloadException {
+          return preloadData;
+        }
+      };
+    }
+  }
+  
   private static class FakeContentRewriterRegistry implements 
ContentRewriterRegistry {
     private boolean wasRewritten = false;
 

Modified: 
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/render/RenderingContentRewriterTest.java
URL: 
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/render/RenderingContentRewriterTest.java?rev=727098&r1=727097&r2=727098&view=diff
==============================================================================
--- 
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/render/RenderingContentRewriterTest.java
 (original)
+++ 
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/render/RenderingContentRewriterTest.java
 Tue Dec 16 09:44:54 2008
@@ -18,6 +18,13 @@
  */
 package org.apache.shindig.gadgets.render;
 
+import com.google.caja.util.Join;
+import com.google.common.collect.ImmutableSortedSet;
+import com.google.common.collect.Lists;
+import com.google.common.collect.Maps;
+import com.google.common.collect.Sets;
+import com.google.inject.Guice;
+import com.google.inject.Injector;
 import org.apache.shindig.common.ContainerConfig;
 import org.apache.shindig.common.PropertiesModule;
 import org.apache.shindig.common.uri.Uri;
@@ -35,14 +42,6 @@
 import org.apache.shindig.gadgets.spec.LocaleSpec;
 import org.apache.shindig.gadgets.spec.MessageBundle;
 import org.apache.shindig.gadgets.spec.View;
-
-import com.google.caja.util.Join;
-import com.google.common.collect.ImmutableSortedSet;
-import com.google.common.collect.Lists;
-import com.google.common.collect.Maps;
-import com.google.common.collect.Sets;
-import com.google.inject.Guice;
-import com.google.inject.Injector;
 import static org.easymock.EasyMock.expect;
 import org.easymock.classextension.EasyMock;
 import org.easymock.classextension.IMocksControl;
@@ -601,17 +600,14 @@
     // implementing equals.
 
     Preloads preloads = new Preloads() {
-
-      public PreloadedData getData(final String key) {
-        return new PreloadedData() {
-          public Object toJson() {
-            return preloadData.get(key);
+      public Collection<PreloadedData> getData() {
+        PreloadedData preloadedData = new PreloadedData() {
+          public Map<String, Object> toJson() throws PreloadException {
+            return preloadData;
           }
         };
-      }
 
-      public Set<String> getKeys() {
-        return preloadData.keySet();
+        return Lists.newArrayList(preloadedData);
       }
     };
 
@@ -629,11 +625,14 @@
   @Test
   public void failedPreloadHandledGracefully() throws Exception {
     Preloads preloads = new Preloads() {
-      public PreloadedData getData(final String key) throws PreloadException {
-        throw new PreloadException("broken");
-      }
-      public Set<String> getKeys() {
-        return ImmutableSortedSet.of("foo");
+      public Collection<PreloadedData> getData() {
+        PreloadedData preloadedData = new PreloadedData() {
+          public Map<String, Object> toJson() throws PreloadException {
+            throw new PreloadException("test");
+          }
+        };
+
+        return Lists.newArrayList(preloadedData);
       }
     };
 

Added: 
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/spec/SocialDataTest.java
URL: 
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/spec/SocialDataTest.java?rev=727098&view=auto
==============================================================================
--- 
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/spec/SocialDataTest.java
 (added)
+++ 
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/spec/SocialDataTest.java
 Tue Dec 16 09:44:54 2008
@@ -0,0 +1,160 @@
+/*
+ * 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.gadgets.spec;
+
+import org.apache.shindig.common.xml.XmlUtil;
+import org.json.JSONObject;
+import static org.junit.Assert.*;
+import org.junit.Test;
+
+public class SocialDataTest {
+  //TODO: test os:MakeRequest
+
+  @Test
+  public void testPeopleRequest() throws Exception {
+    String xml = "<Content><PeopleRequest xmlns=\"" + 
SocialData.OPENSOCIAL_NAMESPACE + "\" "
+        + " key=\"key\""
+        + " groupId=\"group\""
+        + " userId=\"first,second\""
+        + " startIndex=\"20\""
+        + " count=\"10\""
+        + " fields=\"name,id\""
+        + "/></Content>";
+
+    SocialData socialData = new SocialData(XmlUtil.parse(xml), null);
+    assertFalse(socialData.needsOwner());
+    assertFalse(socialData.needsViewer());
+
+    JSONObject expected = new JSONObject("{method: 'people.get', id: 'key', 
params:"
+        + "{groupId: 'group',"
+        + "userId: ['first','second'],"
+        + "startIndex: 20,"
+        + "count: 10,"
+        + "fields: ['name','id']"
+        + "}}");
+
+    assertEquals(1, socialData.getSocialPreloads().size());
+    assertEquals(expected.toString(), 
socialData.getSocialPreloads().get("key").toString());
+  }
+
+  @Test
+  public void testViewerRequest() throws Exception {
+    String xml = "<Content><ViewerRequest xmlns=\"" + 
SocialData.OPENSOCIAL_NAMESPACE + "\" "
+        + " key=\"key\""
+        + " fields=\"name,id\""
+        + "/></Content>";
+
+    SocialData socialData = new SocialData(XmlUtil.parse(xml), null);
+    assertFalse(socialData.needsOwner());
+    assertTrue(socialData.needsViewer());
+
+    JSONObject expected = new JSONObject("{method: 'people.get', id: 'key', 
params:"
+        + "{userId: ['@viewer'],"
+        + "fields: ['name','id']"
+        + "}}");
+
+    assertEquals(1, socialData.getSocialPreloads().size());
+    assertEquals(expected.toString(), 
socialData.getSocialPreloads().get("key").toString());
+  }
+
+  @Test
+  public void testOwnerRequest() throws Exception {
+    String xml = "<Content><OwnerRequest xmlns=\"" + 
SocialData.OPENSOCIAL_NAMESPACE + "\" "
+        + " key=\"key\""
+        + " fields=\"name,id\""
+        + "/></Content>";
+
+    SocialData socialData = new SocialData(XmlUtil.parse(xml), null);
+    assertTrue(socialData.needsOwner());
+    assertFalse(socialData.needsViewer());
+
+    JSONObject expected = new JSONObject("{method: 'people.get', id: 'key', 
params:"
+        + "{userId: ['@owner'],"
+        + "fields: ['name','id']"
+        + "}}");
+
+    assertEquals(1, socialData.getSocialPreloads().size());
+    assertEquals(expected.toString(), 
socialData.getSocialPreloads().get("key").toString());
+  }
+
+  @Test
+  public void testPersonAppData() throws Exception {
+    String xml = "<Content><PersonAppDataRequest xmlns=\"" + 
SocialData.OPENSOCIAL_NAMESPACE + "\" "
+        + " key=\"key\""
+        + " userId=\"@viewer\""
+        + " fields=\"foo,bar\""
+        + "/></Content>";
+
+    SocialData socialData = new SocialData(XmlUtil.parse(xml), null);
+    assertFalse(socialData.needsOwner());
+    assertTrue(socialData.needsViewer());
+
+    JSONObject expected = new JSONObject("{method: 'appdata.get', id: 'key', 
params:"
+        + "{userId: ['@viewer'],"
+        + "fields: ['foo','bar']"
+        + "}}");
+
+    assertEquals(1, socialData.getSocialPreloads().size());
+    assertEquals(expected.toString(), 
socialData.getSocialPreloads().get("key").toString());
+  }
+
+  @Test
+  public void testActivitiesRequest() throws Exception {
+    String xml = "<Content><ActivitiesRequest xmlns=\"" + 
SocialData.OPENSOCIAL_NAMESPACE + "\" "
+        + " key=\"key\""
+        + " userId=\"@owner,@viewer\""
+        + " fields=\"foo,bar\""
+        + "/></Content>";
+
+    SocialData socialData = new SocialData(XmlUtil.parse(xml), null);
+    assertTrue(socialData.needsOwner());
+    assertTrue(socialData.needsViewer());
+
+    JSONObject expected = new JSONObject("{method: 'activities.get', id: 
'key', params:"
+        + "{userId: ['@owner','@viewer'],"
+        + "fields: ['foo','bar']"
+        + "}}");
+
+    assertEquals(1, socialData.getSocialPreloads().size());
+    assertEquals(expected.toString(), 
socialData.getSocialPreloads().get("key").toString());
+  }
+
+  @Test
+  public void testIgnoreNoNamespace() throws Exception {
+    String xml = "<Content><PersonRequest"
+        + " key=\"key\""
+        + " userId=\"@owner\""
+        + " fields=\"name,id\""
+        + "/></Content>";
+
+    SocialData socialData = new SocialData(XmlUtil.parse(xml), null);
+    assertFalse(socialData.needsOwner());
+
+    assertTrue(socialData.getSocialPreloads().isEmpty());
+  }
+
+  @Test(expected = SpecParserException.class)
+  public void testErrorOnUnknownOpensocialElement() throws Exception {
+    String xml = "<Content><NotARealElement xmlns=\"" + 
SocialData.OPENSOCIAL_NAMESPACE + "\" "
+        + "/></Content>";
+
+    new SocialData(XmlUtil.parse(xml), null);
+  }
+}

Modified: 
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/spec/ViewTest.java
URL: 
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/spec/ViewTest.java?rev=727098&r1=727097&r2=727098&view=diff
==============================================================================
--- 
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/spec/ViewTest.java
 (original)
+++ 
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/spec/ViewTest.java
 Tue Dec 16 09:44:54 2008
@@ -19,15 +19,11 @@
 
 package org.apache.shindig.gadgets.spec;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
-
 import org.apache.shindig.common.uri.Uri;
 import org.apache.shindig.common.xml.XmlUtil;
 import org.apache.shindig.gadgets.variables.Substitutions;
 import org.apache.shindig.gadgets.variables.Substitutions.Type;
-
+import static org.junit.Assert.*;
 import org.junit.Test;
 
 import java.util.Arrays;
@@ -199,4 +195,53 @@
     assertFalse("sign_owner parsed incorrectly.", view.isSignOwner());
     assertFalse("sign_viewer parsed incorrectly.", view.isSignViewer());
   }
+
+  @Test
+  public void testSocialPreload() throws Exception {
+    String xml = "<Content href=\"http://example.org/proxied.php\"; "
+        + "authz=\"SIGNED\">"
+        + "<OwnerRequest xmlns=\"" + SocialData.OPENSOCIAL_NAMESPACE + "\" "
+        + " key=\"key\""
+        + " fields=\"name,id\""
+        + "/></Content>";
+    View view = new View("test", Arrays.asList(XmlUtil.parse(xml)), SPEC_URL);
+    assertEquals(1, view.getSocialData().getSocialPreloads().size());
+    assertTrue(view.getSocialData().getSocialPreloads().containsKey("key"));
+  }
+
+  @Test(expected = SpecParserException.class)
+  public void testSocialPreloadWithoutAuth() throws Exception {
+    // Not signed, so a parse exception will result
+    String xml = "<Content href=\"http://example.org/proxied.php\"; "
+        + "sign_owner=\"true\">"
+        + "<OwnerRequest xmlns=\"" + SocialData.OPENSOCIAL_NAMESPACE + "\" "
+        + " key=\"key\""
+        + " fields=\"name,id\""
+        + "/></Content>";
+    new View("test", Arrays.asList(XmlUtil.parse(xml)), SPEC_URL);
+  }
+
+  @Test(expected = SpecParserException.class)
+  public void testSocialPreloadWithoutSignOwner() throws Exception {
+    // Signed, but not by owner when owner data is fetched
+    String xml = "<Content href=\"http://example.org/proxied.php\"; "
+        + "authz=\"SIGNED\" sign_owner=\"false\">"
+        + "<OwnerRequest xmlns=\"" + SocialData.OPENSOCIAL_NAMESPACE + "\" "
+        + " key=\"key\""
+        + " fields=\"name,id\""
+        + "/></Content>";
+    new View("test", Arrays.asList(XmlUtil.parse(xml)), SPEC_URL);
+  }
+
+  @Test(expected = SpecParserException.class)
+  public void testSocialPreloadWithoutSignViewer() throws Exception {
+    // Signed, but not by viewer when viewer data is fetched
+    String xml = "<Content href=\"http://example.org/proxied.php\"; "
+        + "authz=\"SIGNED\" sign_viewer=\"false\">"
+        + "<ViewerRequest xmlns=\"" + SocialData.OPENSOCIAL_NAMESPACE + "\" "
+        + " key=\"key\""
+        + " fields=\"name,id\""
+        + "/></Content>";
+    new View("test", Arrays.asList(XmlUtil.parse(xml)), SPEC_URL);
+  }
 }


Reply via email to