package org.springframework.social.instagram.api.impl;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import static org.springframework.http.HttpMethod.GET;
import static org.springframework.http.HttpMethod.POST;
import static org.springframework.social.test.client.RequestMatchers.body;
import static org.springframework.social.test.client.RequestMatchers.method;
import static org.springframework.social.test.client.RequestMatchers.requestTo;
import static org.springframework.social.test.client.ResponseCreators.withResponse;
import java.util.List;
import org.junit.Test;
import org.springframework.core.io.ClassPathResource;
import org.springframework.social.instagram.api.InstagramProfile;
import org.springframework.social.instagram.api.PagedMediaList;
import org.springframework.social.instagram.api.Relationship;
public class UserTemplateTest extends AbstractInstagramApiTest {
@Test
public void getUser() {
mockServer.expect(requestTo("https://api.instagram.com/v1/users/self/?access_token=ACCESS_TOKEN"))
.andExpect(method(GET))
.andRespond(withResponse(new ClassPathResource("testdata/user-profile.json", getClass()), responseHeaders));
InstagramProfile user = instagram.userOperations().getUser();
assertEquals("tomharman", user.getUsername());
mockServer.verify();
}
@Test
public void getSpecificUser() {
mockServer.expect(requestTo("https://api.instagram.com/v1/users/12345/?access_token=ACCESS_TOKEN"))
.andExpect(method(GET))
.andRespond(withResponse(new ClassPathResource("testdata/user-profile.json", getClass()), responseHeaders));
InstagramProfile user = instagram.userOperations().getUser(12345);
assertEquals("tomharman", user.getUsername());
mockServer.verify();
}
@Test
public void getFeed() {
mockServer.expect(requestTo("https://api.instagram.com/v1/users/self/feed/?access_token=ACCESS_TOKEN"))
.andExpect(method(GET))
.andRespond(withResponse(new ClassPathResource("testdata/recent-media.json", getClass()), responseHeaders));
PagedMediaList media = instagram.userOperations().getFeed();
assertPagedResults(media);
mockServer.verify();
}
@Test
public void getRecentMedia() {
mockServer.expect(requestTo("https://api.instagram.com/v1/users/12345/media/recent/?access_token=ACCESS_TOKEN"))
.andExpect(method(GET))
.andRespond(withResponse(new ClassPathResource("testdata/recent-media.json", getClass()), responseHeaders));
PagedMediaList media = instagram.userOperations().getRecentMedia(12345);
assertPagedResults(media);
mockServer.verify();
}
@Test
public void getFollowedBy() {
mockServer.expect(requestTo("https://api.instagram.com/v1/users/12345/followed-by/?access_token=ACCESS_TOKEN"))
.andExpect(method(GET))
.andRespond(withResponse(new ClassPathResource("testdata/user-list.json", getClass()), responseHeaders));
List<InstagramProfile> follows = instagram.userOperations().getFollowedBy(12345);
assertTrue(follows.size() > 0);
mockServer.verify();
}
@Test
public void getFollows() {
mockServer.expect(requestTo("https://api.instagram.com/v1/users/12345/follows/?access_token=ACCESS_TOKEN"))
.andExpect(method(GET))
.andRespond(withResponse(new ClassPathResource("testdata/user-list.json", getClass()), responseHeaders));
List<InstagramProfile> follows = instagram.userOperations().getFollows(12345);
assertTrue(follows.size() > 0);
mockServer.verify();
}
@Test
public void getRequestedBy() {
mockServer.expect(requestTo("https://api.instagram.com/v1/users/self/requested-by/?access_token=ACCESS_TOKEN"))
.andExpect(method(GET))
.andRespond(withResponse(new ClassPathResource("testdata/user-list.json", getClass()), responseHeaders));
List<InstagramProfile> follows = instagram.userOperations().getRequestedBy();
assertTrue(follows.size() > 0);
mockServer.verify();
}
@Test
public void getRelationship() {
mockServer.expect(requestTo("https://api.instagram.com/v1/users/12345/relationship/?access_token=ACCESS_TOKEN"))
.andExpect(method(GET))
.andRespond(withResponse(new ClassPathResource("testdata/relationship.json", getClass()), responseHeaders));
Relationship relationship = instagram.userOperations().getRelationship(12345);
assertNotNull(relationship.getIncomingStatus());
assertNotNull(relationship.getOutgoingStatus());
mockServer.verify();
}
@Test
public void followUser() {
mockServer.expect(requestTo("https://api.instagram.com/v1/users/12345/relationship/?access_token=ACCESS_TOKEN"))
.andExpect(method(POST))
.andExpect(body("action=follow"))
.andRespond(withResponse(new ClassPathResource("testdata/media-list.json", getClass()), responseHeaders));
instagram.userOperations().followUser(12345);
mockServer.verify();
}
@Test
public void unfollowUser() {
mockServer.expect(requestTo("https://api.instagram.com/v1/users/12345/relationship/?access_token=ACCESS_TOKEN"))
.andExpect(method(POST))
.andExpect(body("action=unfollow"))
.andRespond(withResponse(new ClassPathResource("testdata/ok-response.json", getClass()), responseHeaders));
instagram.userOperations().unfollowUser(12345);
mockServer.verify();
}
@Test
public void blockUser() {
mockServer.expect(requestTo("https://api.instagram.com/v1/users/12345/relationship/?access_token=ACCESS_TOKEN"))
.andExpect(method(POST))
.andExpect(body("action=block"))
.andRespond(withResponse(new ClassPathResource("testdata/ok-response.json", getClass()), responseHeaders));
instagram.userOperations().blockUser(12345);
mockServer.verify();
}
@Test
public void unblockUser() {
mockServer.expect(requestTo("https://api.instagram.com/v1/users/12345/relationship/?access_token=ACCESS_TOKEN"))
.andExpect(method(POST))
.andExpect(body("action=unblock"))
.andRespond(withResponse(new ClassPathResource("testdata/ok-response.json", getClass()), responseHeaders));
instagram.userOperations().unblockUser(12345);
mockServer.verify();
}
@Test
public void approveUser() {
mockServer.expect(requestTo("https://api.instagram.com/v1/users/12345/relationship/?access_token=ACCESS_TOKEN"))
.andExpect(method(POST))
.andExpect(body("action=approve"))
.andRespond(withResponse(new ClassPathResource("testdata/ok-response.json", getClass()), responseHeaders));
instagram.userOperations().approveUser(12345);
mockServer.verify();
}
@Test
public void denyUser() {
mockServer.expect(requestTo("https://api.instagram.com/v1/users/12345/relationship/?access_token=ACCESS_TOKEN"))
.andExpect(method(POST))
.andExpect(body("action=deny"))
.andRespond(withResponse(new ClassPathResource("testdata/ok-response.json", getClass()), responseHeaders));
instagram.userOperations().denyUser(12345);
mockServer.verify();
}
}