Added: 
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/preload/PreloaderTestFixture.java
URL: 
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/preload/PreloaderTestFixture.java?rev=727123&view=auto
==============================================================================
--- 
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/preload/PreloaderTestFixture.java
 (added)
+++ 
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/preload/PreloaderTestFixture.java
 Tue Dec 16 11:16:44 2008
@@ -0,0 +1,71 @@
+/*
+ * 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.Maps;
+import org.apache.shindig.auth.SecurityToken;
+import org.apache.shindig.common.testing.FakeGadgetToken;
+import org.apache.shindig.common.uri.Uri;
+import org.apache.shindig.gadgets.GadgetContext;
+
+import java.net.URI;
+import java.util.Map;
+
+/**
+ * Base code for the preloader tests.
+ */
+public class PreloaderTestFixture {
+  protected static final Uri GADGET_URL = 
Uri.parse("http://example.org/gadget.xml";);
+  protected static final String CONTAINER = "some-container";
+  protected static final String HOST = "example.org";
+  protected String view = "default";
+  public Map<String, String> contextParams = Maps.newHashMap();
+
+  public final GadgetContext context = new GadgetContext() {
+    @Override
+    public SecurityToken getToken() {
+      return new FakeGadgetToken();
+    }
+
+    @Override
+    public String getView() {
+      return view;
+    }
+
+    @Override
+    public String getContainer() {
+      return CONTAINER;
+    }
+
+    @Override
+    public URI getUrl() {
+      return GADGET_URL.toJavaUri();
+    }
+
+    @Override
+    public String getHost() {
+      return HOST;
+    }
+
+    @Override
+    public String getParameter(String name) {
+      return contextParams.get(name);
+    }
+  };
+}

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=727123&r1=727122&r2=727123&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 11:16:44 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=727123&r1=727122&r2=727123&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 11:16:44 2008
@@ -600,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);
       }
     };
 
@@ -628,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/PipelinedDataTest.java
URL: 
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/spec/PipelinedDataTest.java?rev=727123&view=auto
==============================================================================
--- 
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/spec/PipelinedDataTest.java
 (added)
+++ 
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/spec/PipelinedDataTest.java
 Tue Dec 16 11:16:44 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 PipelinedDataTest {
+  //TODO: test os:MakeRequest
+
+  @Test
+  public void testPeopleRequest() throws Exception {
+    String xml = "<Content><PeopleRequest xmlns=\"" + 
PipelinedData.OPENSOCIAL_NAMESPACE + "\" "
+        + " key=\"key\""
+        + " groupId=\"group\""
+        + " userId=\"first,second\""
+        + " startIndex=\"20\""
+        + " count=\"10\""
+        + " fields=\"name,id\""
+        + "/></Content>";
+
+    PipelinedData socialData = new PipelinedData(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=\"" + 
PipelinedData.OPENSOCIAL_NAMESPACE + "\" "
+        + " key=\"key\""
+        + " fields=\"name,id\""
+        + "/></Content>";
+
+    PipelinedData socialData = new PipelinedData(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=\"" + 
PipelinedData.OPENSOCIAL_NAMESPACE + "\" "
+        + " key=\"key\""
+        + " fields=\"name,id\""
+        + "/></Content>";
+
+    PipelinedData socialData = new PipelinedData(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=\"" + 
PipelinedData.OPENSOCIAL_NAMESPACE + "\" "
+        + " key=\"key\""
+        + " userId=\"@viewer\""
+        + " fields=\"foo,bar\""
+        + "/></Content>";
+
+    PipelinedData socialData = new PipelinedData(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=\"" + 
PipelinedData.OPENSOCIAL_NAMESPACE + "\" "
+        + " key=\"key\""
+        + " userId=\"@owner,@viewer\""
+        + " fields=\"foo,bar\""
+        + "/></Content>";
+
+    PipelinedData socialData = new PipelinedData(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>";
+
+    PipelinedData socialData = new PipelinedData(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=\"" + 
PipelinedData.OPENSOCIAL_NAMESPACE + "\" "
+        + "/></Content>";
+
+    new PipelinedData(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=727123&r1=727122&r2=727123&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 11:16:44 2008
@@ -195,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=\"" + PipelinedData.OPENSOCIAL_NAMESPACE + "\" "
+        + " key=\"key\""
+        + " fields=\"name,id\""
+        + "/></Content>";
+    View view = new View("test", Arrays.asList(XmlUtil.parse(xml)), SPEC_URL);
+    assertEquals(1, view.getPipelinedData().getSocialPreloads().size());
+    assertTrue(view.getPipelinedData().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=\"" + PipelinedData.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=\"" + PipelinedData.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=\"" + PipelinedData.OPENSOCIAL_NAMESPACE + "\" 
"
+        + " key=\"key\""
+        + " fields=\"name,id\""
+        + "/></Content>";
+    new View("test", Arrays.asList(XmlUtil.parse(xml)), SPEC_URL);
+  }
 }


Reply via email to