package com.facebook.model;
import android.test.AndroidTestCase;
import android.test.suitebuilder.annotation.LargeTest;
import android.test.suitebuilder.annotation.MediumTest;
import android.test.suitebuilder.annotation.SmallTest;
import org.json.JSONException;
import org.json.JSONObject;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
public class OpenGraphActionTests extends AndroidTestCase {
private static String ACTION_JSON = "{" +
" \"id\": \"99\", " +
" \"from\": {" +
" \"name\": \"A User\", " +
" \"id\": \"42\"" +
" }, " +
" \"start_time\": \"2013-04-11T02:05:17+0000\", " +
" \"end_time\": \"2013-04-11T03:05:17+0000\", " +
" \"publish_time\": \"2013-04-11T02:05:17+0000\", " +
" \"ref\": \"hello!\", " +
" \"message\": \"a message!\", " +
" \"place\": {" +
" \"id\": \"9999\", " +
" \"name\": \"Some Place\", " +
" \"location\": {" +
" \"latitude\": 37.786130951058, " +
" \"longitude\": -122.40886171765, " +
" \"city\": \"San Francisco\", " +
" \"country\": \"United States\", " +
" \"id\": \"2421836\", " +
" \"zip\": \"94102-2118\", " +
" \"address\": \"5 Any Street\", " +
" \"region\": \"CA\"" +
" } " +
" }, " +
" \"tags\": [" +
" {" +
" \"id\": \"4321\", " +
" \"name\": \"Jim Bob\"" +
" }" +
" ], " +
" \"application\": {" +
" \"name\": \"Awesome App\", " +
" \"namespace\": \"awesome\", " +
" \"id\": \"55\"" +
" }, " +
" \"data\": {" +
" \"thing\": {" +
" \"id\": \"509\", " +
" \"url\": \"http://www.example.com/100\", " +
" \"type\": \"awesome:thing\", " +
" \"title\": \"A thing!\"" +
" }" +
" }, " +
" \"type\": \"awesome:action\", " +
" \"likes\": {" +
" \"count\": 7, " +
" \"can_like\": true, " +
" \"user_likes\": false" +
" }, " +
" \"comments\": {" +
" \"data\": [" +
" {" +
" \"id\": \"2_3\", " +
" \"from\": {" +
" \"name\": \"A Yooser\", " +
" \"id\": \"1001\"" +
" }, " +
" \"message\": \"Here's a comment.\", " +
" \"can_remove\": true, " +
" \"created_time\": \"2013-04-26T23:38:19+0000\", " +
" \"like_count\": 3, " +
" \"user_likes\": false" +
" }" +
" ], " +
" \"paging\": {" +
" \"cursors\": {" +
" \"after\": \"x\", " +
" \"before\": \"x\"" +
" }" +
" }, " +
" \"count\": 1, " +
" \"can_comment\": true, " +
" \"comment_order\": \"chronological\"" +
" }," +
" \"likes\": {" +
" \"data\": [" +
" {" +
" \"id\": \"422\", " +
" \"name\": \"Another User\"" +
" }" +
" ], " +
" \"paging\": {" +
" \"next\": \"https://graph.facebook.com/blah\"" +
" }, " +
" \"count\": 1, " +
" \"can_like\": true, " +
" \"user_likes\": true" +
" }" +
"}";
interface TestOpenGraphActionData extends GraphObject {
GraphObject getThing();
}
interface TestOpenGraphAction extends OpenGraphAction {
TestOpenGraphActionData getData();
}
private OpenGraphAction parsedAction;
public void setUp() throws JSONException {
JSONObject jsonObject = new JSONObject(ACTION_JSON);
parsedAction = GraphObject.Factory.create(jsonObject, OpenGraphAction.class);
}
@SmallTest
@MediumTest
@LargeTest
public void testParsedId() {
assertEquals("99", parsedAction.getId());
}
@SmallTest
@MediumTest
@LargeTest
public void testParsedType() {
assertEquals("awesome:action", parsedAction.getType());
}
@SmallTest
@MediumTest
@LargeTest
public void testParsedDates() {
assertEquals(new Date(1365645917000L), parsedAction.getStartTime());
assertEquals(new Date(1365649517000L), parsedAction.getEndTime());
assertEquals(new Date(1365645917000L), parsedAction.getPublishTime());
}
@SmallTest
@MediumTest
@LargeTest
public void testParsedRef() {
assertEquals("hello!", parsedAction.getRef());
}
@SmallTest
@MediumTest
@LargeTest
public void testParsedMessage() {
assertEquals("a message!", parsedAction.getMessage());
}
@SmallTest
@MediumTest
@LargeTest
public void testParsedPlace() {
GraphPlace place = parsedAction.getPlace();
assertEquals("9999", place.getId());
assertEquals("94102-2118", place.getLocation().getZip());
}
@SmallTest
@MediumTest
@LargeTest
public void testParsedTags() {
List<GraphObject> tags = parsedAction.getTags();
assertEquals(1, tags.size());
GraphUser tag = tags.get(0).cast(GraphUser.class);
assertEquals("4321", tag.getId());
assertEquals("Jim Bob", tag.getName());
}
@SmallTest
@MediumTest
@LargeTest
public void testParsedFrom() {
GraphUser from = parsedAction.getFrom();
assertEquals("42", from.getId());
assertEquals("A User", from.getName());
}
@SmallTest
@MediumTest
@LargeTest
public void testParsedLikes() {
JSONObject likes = parsedAction.getLikes();
assertEquals(1, likes.optInt("count"));
}
@SmallTest
@MediumTest
@LargeTest
public void testParsedApplication() {
GraphObject application = parsedAction.getApplication();
assertEquals("Awesome App", application.getProperty("name"));
}
@SmallTest
@MediumTest
@LargeTest
public void testParsedComments() {
JSONObject comments = parsedAction.getComments();
assertEquals(1, comments.optInt("count"));
}
@SmallTest
@MediumTest
@LargeTest
public void testParsedData() {
GraphObject data = parsedAction.getData();
assertNotNull(data);
GraphObject thing = data.getPropertyAs("thing", GraphObject.class);
assertNotNull(thing);
assertEquals("509", thing.getProperty("id"));
}
@SmallTest
@MediumTest
@LargeTest
public void testParsedTypedData() {
TestOpenGraphActionData data = parsedAction.getPropertyAs("data", TestOpenGraphActionData.class);
assertNotNull(data);
GraphObject thing = data.getThing();
assertNotNull(thing);
assertEquals("509", thing.getProperty("id"));
}
@SmallTest
@MediumTest
@LargeTest
public void testParsedDataWithTypedAction() {
TestOpenGraphAction typedAction = parsedAction.cast(TestOpenGraphAction.class);
TestOpenGraphActionData data = typedAction.getData();
assertNotNull(data);
GraphObject thing = data.getThing();
assertNotNull(thing);
assertEquals("509", thing.getProperty("id"));
}
public void testSetGetTags() {
OpenGraphAction action = OpenGraphAction.Factory.createForPost("foo");
GraphObject tag = GraphObject.Factory.create();
tag.setProperty("id", "123");
List<GraphObject> tags = new ArrayList<GraphObject>();
tags.add(tag);
action.setTags(tags);
GraphObjectList<GraphObject> retrievedTags = action.getTags();
assertNotNull(retrievedTags);
assertEquals(1, retrievedTags.size());
assertEquals("123", retrievedTags.get(0).getProperty("id"));
}
}