/*
* Copyright 2012, Ryan J. McDonough
*
* Licensed 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 com.damnhandy.uri.template.examples;
import java.util.ArrayList;
import java.util.List;
import org.junit.Assert;
import org.junit.Assume;
import org.junit.BeforeClass;
import org.junit.Ignore;
import org.junit.Test;
import com.damnhandy.uri.template.UriTemplate;
import com.ning.http.client.Request;
import com.ning.http.client.RequestBuilder;
/**
* A collection of tests that demonstrate how URI Templates can be used to
* interact with the Facebook Graph API. These tests use some of the examples
* found on the Facebook Graph API reference:
*
* https://developers.facebook.com/docs/reference/api/
*
* You will need your Facebook access token in a System property:
* <pre>
* -Dfb.access_token=<your facebook access_token>
* </pre>
*
*
* @author <a href="ryan@damnhandy.com">Ryan J. McDonough</a>
* @version $Revision: 1.1 $
*/
@Ignore
public class TestFacebookGraphApi extends AbstractExampleTest
{
private static final String GRAPH_API_EXPRESSION =
"https://graph.facebook.com{/id*}{?q,ids,fields,type,center,distance,limit,offset,until,since,access_token}";
/**
* Checks assumptions that the Facebook Access token is set.
*
*/
@BeforeClass
public static void setUp()
{
Assume.assumeNotNull(System.getProperty("fb.access_token"));
}
@Test
public void facebookGraphApiFQL() throws Exception
{
String uri = UriTemplate.fromTemplate(GRAPH_API_EXPRESSION)
.set("id","fql")
.set("q", "SELECT uid2 FROM friend WHERE uid1=me()")
.set("access_token", System.getProperty("fb.access_token"))
.expand();
System.out.println(uri);
Assert.assertEquals("https://graph.facebook.com/fql?q=SELECT%20uid2%20FROM%20friend%20WHERE%20uid1%3Dme%28%29&access_token="+System.getProperty("fb.access_token"), uri);
RequestBuilder builder = new RequestBuilder("GET");
Request request = builder.setUrl(uri).build();
executeRequest(createClient(), request);
}
@Test
public void facebookGraphApiAllFields() throws Exception
{
String uri = UriTemplate.fromTemplate(GRAPH_API_EXPRESSION)
.set("id", "bgolub")
.set("access_token", System.getProperty("fb.access_token"))
.expand();
Assert.assertEquals("https://graph.facebook.com/bgolub?access_token="+System.getProperty("fb.access_token"), uri);
RequestBuilder builder = new RequestBuilder("GET");
Request request = builder.setUrl(uri).build();
executeRequest(createClient(), request);
}
@Test
public void facebookGraphApiGetSubResource() throws Exception
{
String uri = UriTemplate.fromTemplate(GRAPH_API_EXPRESSION)
.set("id", new String[] {"bgolub","albums"})
.set("access_token", System.getProperty("fb.access_token"))
.expand();
Assert.assertEquals("https://graph.facebook.com/bgolub/albums?access_token="+System.getProperty("fb.access_token"), uri);
RequestBuilder builder = new RequestBuilder("GET");
Request request = builder.setUrl(uri).build();
executeRequest(createClient(), request);
}
/**
*
*
* @throws Exception
*/
@Test
public void facebookGraphApiSelectiveFields() throws Exception
{
String uri = UriTemplate.fromTemplate(GRAPH_API_EXPRESSION)
.set("id", "bgolub")
.set("fields", new String[] {"id", "name", "picture"})
.set("access_token", System.getProperty("fb.access_token"))
.expand();
Assert.assertEquals("https://graph.facebook.com/bgolub?fields=id,name,picture&access_token="+System.getProperty("fb.access_token"), uri);
RequestBuilder builder = new RequestBuilder("GET");
Request request = builder.setUrl(uri).build();
executeRequest(createClient(), request);
}
/**
* Same as the previous test, but demonstrates how a {@link List} can be used
* rather than an array.
*
* @throws Exception
*/
@Test
public void facebookGraphApiSelectiveFieldsWithListWithAlbums() throws Exception
{
List<String> fields = new ArrayList<String>(3);
fields.add("id");
fields.add("name");
fields.add("count");
String uri = UriTemplate.fromTemplate(GRAPH_API_EXPRESSION)
.set("id", new String[] {"bgolub","albums"})
.set("fields", fields)
.set("access_token", System.getProperty("fb.access_token"))
.expand();
System.out.println(uri);
Assert.assertEquals("https://graph.facebook.com/bgolub/albums?fields=id,name,count&access_token="+System.getProperty("fb.access_token"), uri);
RequestBuilder builder = new RequestBuilder("GET");
Request request = builder.setUrl(uri).build();
executeRequest(createClient(), request);
}
@Test
public void facebookGraphApiSelectiveFieldsWithList() throws Exception
{
List<String> fields = new ArrayList<String>(3);
fields.add("id");
fields.add("name");
fields.add("picture");
String uri = UriTemplate.fromTemplate(GRAPH_API_EXPRESSION)
.set("id", "bgolub")
.set("fields", fields)
.set("access_token", System.getProperty("fb.access_token"))
.expand();
Assert.assertEquals("https://graph.facebook.com/bgolub?fields=id,name,picture&access_token="+System.getProperty("fb.access_token"), uri);
RequestBuilder builder = new RequestBuilder("GET");
Request request = builder.setUrl(uri).build();
executeRequest(createClient(), request);
}
/**
*
*
* @throws Exception
*/
@Test
public void facebookGraphApiPlacesSearch() throws Exception
{
String uri = UriTemplate.fromTemplate(GRAPH_API_EXPRESSION)
.set("id","search")
.set("q", "coffee")
.set("type","place")
.set("center", new float[] {37.76f,-122.427f})
.set("distance", 1000)
.set("limit", 5)
.set("offset", 10)
.set("access_token", System.getProperty("fb.access_token"))
.expand();
Assert.assertEquals(
"https://graph.facebook.com/search?q=coffee&type=place¢er=37.76,-122.427&distance=1000&limit=5&offset=10&access_token="
+ System.getProperty("fb.access_token"), uri);
RequestBuilder builder = new RequestBuilder("GET");
Request request =
builder.setUrl(UriTemplate.fromTemplate(GRAPH_API_EXPRESSION)
.set("id","search")
.set("q", "coffee")
.set("type","place")
.set("center", new float[] {37.76f,-122.427f})
.set("distance", 1000)
.set("limit", 5)
.set("offset", 10)
.set("access_token", System.getProperty("fb.access_token"))
.expand()).build();
executeRequest(createClient(), request);
}
}