Skip to content

Commit dec08b6

Browse files
author
Craig Walls
committed
Add integration tests for Graph API
1 parent d21eab7 commit dec08b6

File tree

8 files changed

+447
-0
lines changed

8 files changed

+447
-0
lines changed
+30
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
apply plugin: 'eclipse'
2+
apply plugin: 'java'
3+
4+
buildscript {
5+
repositories {
6+
mavenCentral()
7+
}
8+
9+
dependencies {
10+
classpath 'org.gradle.api.plugins:gradle-tomcat-plugin:0.9.9'
11+
}
12+
}
13+
14+
dependencies {
15+
compile "org.springframework.social:spring-social-facebook:$springSocialFacebookVersion"
16+
testCompile "junit:junit-dep:$junitVersion"
17+
}
18+
19+
repositories {
20+
mavenLocal()
21+
maven { url 'http://maven.springframework.org/release' }
22+
maven { url 'http://maven.springframework.org/milestone' }
23+
maven { url 'http://maven.springframework.org/snapshot' }
24+
maven { url 'http://download.java.net/maven/2' }
25+
mavenCentral()
26+
}
27+
28+
task wrapper(type: Wrapper) {
29+
gradleVersion = '1.11'
30+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
springSocialFacebookVersion = 1.1.0.RELEASE
2+
junitVersion = 4.11
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
1+
package org.springframework.social.facebook.itest;
2+
3+
import org.junit.After;
4+
import org.junit.Before;
5+
import org.springframework.http.ResponseEntity;
6+
import org.springframework.social.facebook.api.Facebook;
7+
import org.springframework.social.facebook.api.impl.FacebookTemplate;
8+
import org.springframework.social.facebook.connect.FacebookServiceProvider;
9+
import org.springframework.social.oauth2.AccessGrant;
10+
import org.springframework.util.LinkedMultiValueMap;
11+
import org.springframework.util.MultiValueMap;
12+
13+
public abstract class AbstractFacebookITest {
14+
15+
public static final String USER_EXTENDED_PERMISSIONS = "user_about_me,user_activities,user_birthday,user_checkins,user_education_history,user_events,user_groups,user_hometown,user_interests,user_likes,user_location,user_notes,user_photos,user_questions,user_relationships,user_relationship_details,user_religion_politics,user_status,user_subscriptions,user_videos,user_website,user_work_history";
16+
public static final String FRIENDS_EXTENDED_PERMISSIONS = "friends_about_me,friends_activities,friends_birthday,friends_checkins,friends_education_history,friends_events,friends_groups,friends_hometown,friends_interests,friends_likes,friends_location,friends_notes,friends_photos,friends_questions,friends_relationships,friends_relationship_details,friends_religion_politics,friends_status,friends_subscriptions,friends_videos,friends_website,friends_work_history";
17+
public static final String EXTENDED_READ_PERMISSIONS = "read_friendlists,read_insights,read_mailbox,read_requests,read_stream,xmpp_login,user_online_presence,friends_online_presence";
18+
public static final String EXTENDED_PUBLISH_PERMISSIONS = "create_event,manage_friendlists,manage_notifications,publish_actions,publish_stream,rsvp_event";
19+
public static final String USER_OPEN_GRAPH_PERMISSIONS = "publish_actions,user_actions.music,user_actions.news,user_actions.video,user_games_activity";
20+
public static final String FRIENDS_OPEN_GRAPH_PERMISSIONS = "friends_actions.music,friends_actions.news,friends_actions.video,friends_games_activity";
21+
public static final String ALL_PERMISSIONS = "email" + "," + USER_EXTENDED_PERMISSIONS + "," + FRIENDS_EXTENDED_PERMISSIONS + "," + EXTENDED_READ_PERMISSIONS + "," + EXTENDED_PUBLISH_PERMISSIONS;
22+
23+
private Facebook CLIENT_FB;
24+
25+
protected abstract AppCredentials getAppCredentials();
26+
27+
protected TestUser testUser;
28+
29+
protected FacebookTemplate fb;
30+
31+
@Before
32+
public void setup() {
33+
AppCredentials app = getAppCredentials();
34+
FacebookServiceProvider sp = new FacebookServiceProvider(app.getAppId(), app.getAppSecret(), app.getAppNamespace());
35+
AccessGrant clientGrant = sp.getOAuthOperations().authenticateClient();
36+
this.CLIENT_FB = new FacebookTemplate(clientGrant.getAccessToken());
37+
this.testUser = createTestUser("Jack Diamond", ALL_PERMISSIONS);
38+
this.fb = new FacebookTemplate(this.testUser.getAccessToken());
39+
}
40+
41+
@After
42+
public void after() {
43+
deleteTestUser(testUser);
44+
}
45+
46+
protected TestUser createTestUser(String name, String permissions) {
47+
MultiValueMap<String, Object> req = new LinkedMultiValueMap<String, Object>();
48+
req.set("name", name);
49+
req.set("installed", "true");
50+
req.set("permissions", permissions);
51+
52+
ResponseEntity<TestUser> entity = CLIENT_FB.restOperations().postForEntity("https://graph.facebook.com/{appId}/accounts/test-users", req, TestUser.class, getAppCredentials().getAppId());
53+
return entity.getBody();
54+
}
55+
56+
protected void deleteTestUser(TestUser testUser) {
57+
CLIENT_FB.restOperations().delete("https://graph.facebook.com/{userId}", testUser.getId());
58+
}
59+
60+
static class AppCredentials {
61+
private final String appId;
62+
private final String appSecret;
63+
private final String appNamespace;
64+
65+
public AppCredentials(String appId, String appSecret, String appNamespace) {
66+
this.appId = appId;
67+
this.appSecret = appSecret;
68+
this.appNamespace = appNamespace;
69+
}
70+
71+
public String getAppId() {
72+
return appId;
73+
}
74+
75+
public String getAppSecret() {
76+
return appSecret;
77+
}
78+
79+
public String getAppNamespace() {
80+
return appNamespace;
81+
}
82+
83+
}
84+
85+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,90 @@
1+
package org.springframework.social.facebook.itest;
2+
3+
import static org.junit.Assert.*;
4+
5+
import java.util.ArrayList;
6+
import java.util.List;
7+
8+
import org.junit.Before;
9+
import org.junit.Test;
10+
import org.springframework.social.facebook.api.FacebookLink;
11+
import org.springframework.social.facebook.api.LinkPost;
12+
import org.springframework.social.facebook.api.NotePost;
13+
import org.springframework.social.facebook.api.PagedList;
14+
import org.springframework.social.facebook.api.Post;
15+
import org.springframework.social.facebook.api.Post.PostType;
16+
import org.springframework.social.facebook.api.StatusPost;
17+
18+
19+
public class FeedTemplateTest extends AbstractFacebookITest implements ShowcaseApp {
20+
21+
// TODO : Do deeper testing at some point. For now, it's enough to know that the API request didn't fail.
22+
23+
private List<String> feedIds;
24+
25+
@Before
26+
public void loadFeed() {
27+
feedIds = new ArrayList<String>();
28+
feedIds.add(fb.feedOperations().updateStatus("Hello Facebook"));
29+
feedIds.add(fb.feedOperations().updateStatus("How's it going?"));
30+
feedIds.add(fb.feedOperations().updateStatus("Okay, goodbye!"));
31+
feedIds.add(fb.feedOperations().postLink("Here's a link", new FacebookLink("http://spring.io", "Spring.io", "Spring", "The Spring Framework website")));
32+
}
33+
34+
@Test
35+
public void updateStatus_and_getFeed() {
36+
PagedList<Post> feed = fb.feedOperations().getFeed();
37+
assertEquals(feedIds.size(), feed.size());
38+
}
39+
40+
@Test
41+
public void deletePost() {
42+
PagedList<Post> feed = fb.feedOperations().getFeed();
43+
assertEquals(feedIds.size(), feed.size());
44+
fb.feedOperations().deletePost(feedIds.get(0));
45+
feed = fb.feedOperations().getFeed();
46+
assertEquals(feedIds.size() - 1, feed.size());
47+
}
48+
49+
@Test
50+
public void getHomeFeed() {
51+
PagedList<Post> feed = fb.feedOperations().getHomeFeed();
52+
assertEquals(feedIds.size(), feed.size());
53+
}
54+
55+
@Test
56+
public void getLinks() {
57+
PagedList<LinkPost> feed = fb.feedOperations().getLinks();
58+
assertEquals(1, feed.size());
59+
}
60+
61+
@Test
62+
public void getNotes() {
63+
PagedList<NotePost> notes = fb.feedOperations().getNotes();
64+
assertEquals(0, notes.size());
65+
}
66+
67+
@Test
68+
public void getPosts() {
69+
PagedList<Post> posts = fb.feedOperations().getPosts();
70+
assertEquals(4, posts.size());
71+
}
72+
73+
@Test
74+
public void getStatuses() {
75+
PagedList<StatusPost> posts = fb.feedOperations().getStatuses();
76+
assertEquals(3, posts.size());
77+
}
78+
79+
@Test
80+
public void getPost() {
81+
Post post = fb.feedOperations().getPost(feedIds.get(3));
82+
assertEquals(PostType.LINK, post.getType());
83+
}
84+
85+
@Override
86+
protected AppCredentials getAppCredentials() {
87+
return new AppCredentials(APP_ID, APP_SECRET, APP_NAMESPACE);
88+
}
89+
90+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
package org.springframework.social.facebook.itest;
2+
3+
import static org.junit.Assert.*;
4+
5+
import org.junit.Test;
6+
import org.springframework.social.facebook.api.PagedList;
7+
import org.springframework.social.facebook.api.Reference;
8+
9+
10+
public class FriendTemplateTest extends AbstractFacebookITest implements ShowcaseApp {
11+
12+
@Test
13+
public void createFriendList() {
14+
String friendListId = fb.friendOperations().createFriendList("My Good Friends");
15+
assertNotNull(friendListId);
16+
17+
PagedList<Reference> friendLists = fb.friendOperations().getFriendLists();
18+
assertEquals(1, friendLists.size());
19+
20+
Reference friendList = fb.friendOperations().getFriendList(friendListId);
21+
assertEquals(friendListId, friendList.getId());
22+
assertEquals("My Good Friends", friendList.getName());
23+
24+
fb.friendOperations().deleteFriendList(friendListId);
25+
friendLists = fb.friendOperations().getFriendLists();
26+
assertEquals(0, friendLists.size());
27+
}
28+
29+
30+
31+
@Override
32+
protected AppCredentials getAppCredentials() {
33+
return new AppCredentials(APP_ID, APP_SECRET, APP_NAMESPACE);
34+
}
35+
36+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package org.springframework.social.facebook.itest;
2+
3+
public interface ShowcaseApp {
4+
5+
public static final String APP_ID = "162886103757745";
6+
public static final String APP_SECRET = "fa8a9825f555a7a8949ec48fb93bda58";
7+
public static final String APP_NAMESPACE = "socialshowcase";
8+
9+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
package org.springframework.social.facebook.itest;
2+
3+
import com.fasterxml.jackson.annotation.JsonProperty;
4+
5+
public class TestUser {
6+
7+
private String id;
8+
9+
private String email;
10+
11+
@JsonProperty("access_token")
12+
private String accessToken;
13+
14+
@JsonProperty("login_url")
15+
private String loginUrl;
16+
17+
private String password;
18+
19+
public String getId() {
20+
return id;
21+
}
22+
23+
public void setId(String id) {
24+
this.id = id;
25+
}
26+
27+
public String getEmail() {
28+
return email;
29+
}
30+
31+
public void setEmail(String email) {
32+
this.email = email;
33+
}
34+
35+
public String getAccessToken() {
36+
return accessToken;
37+
}
38+
39+
public void setAccessToken(String accessToken) {
40+
this.accessToken = accessToken;
41+
}
42+
43+
public String getLoginUrl() {
44+
return loginUrl;
45+
}
46+
47+
public void setLoginUrl(String loginUrl) {
48+
this.loginUrl = loginUrl;
49+
}
50+
51+
public String getPassword() {
52+
return password;
53+
}
54+
55+
public void setPassword(String password) {
56+
this.password = password;
57+
}
58+
59+
}

0 commit comments

Comments
 (0)