package org.springframework.social.instagram.api.impl;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.assertEquals;
import static org.springframework.http.HttpMethod.GET;
import static org.springframework.http.HttpMethod.POST;
import static org.springframework.http.HttpMethod.DELETE;
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.Comment;
import org.springframework.social.instagram.api.InstagramProfile;
import org.springframework.social.instagram.api.Media;
public class MediaTemplateTest extends AbstractInstagramApiTest {
@Test
public void getMedia() {
mockServer.expect(requestTo("https://api.instagram.com/v1/media/48904105/?access_token=ACCESS_TOKEN"))
.andExpect(method(GET))
.andRespond(withResponse(new ClassPathResource("testdata/media.json", getClass()), responseHeaders));
Media media = instagram.mediaOperations().getMedia(48904105);
assertEquals(48904105, media.getId());
assertTrue(media.getTags().contains("cat") && media.getTags().contains("food"));
mockServer.verify();
}
@Test
public void getPopular() {
mockServer.expect(requestTo("https://api.instagram.com/v1/media/popular/?access_token=ACCESS_TOKEN"))
.andExpect(method(GET))
.andRespond(withResponse(new ClassPathResource("testdata/media-list.json", getClass()), responseHeaders));
List<Media> media = instagram.mediaOperations().getPopular();
assertTrue(media.size() > 0);
mockServer.verify();
}
@Test
public void search() {
mockServer.expect(requestTo("https://api.instagram.com/v1/media/search/?access_token=ACCESS_TOKEN&lng=200.0&lat=100.0"))
.andExpect(method(GET))
.andRespond(withResponse(new ClassPathResource("testdata/media-list.json", getClass()), responseHeaders));
List<Media> media = instagram.mediaOperations().search(100d, 200d);
assertTrue(media.size() > 0);
mockServer.verify();
}
@Test
public void searchMoreParams() {
mockServer.expect(requestTo("https://api.instagram.com/v1/media/search/?access_token=ACCESS_TOKEN&distance=1000&lng=200.0&lat=100.0"))
.andExpect(method(GET))
.andRespond(withResponse(new ClassPathResource("testdata/media-list.json", getClass()), responseHeaders));
List<Media> media = instagram.mediaOperations().search(100d, 200d, 1000);
assertTrue(media.size() > 0);
mockServer.verify();
}
@Test
public void searchEvenMoreParams() {
mockServer.expect(requestTo("https://api.instagram.com/v1/media/search/?access_token=ACCESS_TOKEN&distance=1000&max_timestamp=1000&lng=200.0&min_timestamp=2000&lat=100.0"))
.andExpect(method(GET))
.andRespond(withResponse(new ClassPathResource("testdata/media-list.json", getClass()), responseHeaders));
List<Media> media = instagram.mediaOperations().search(100d, 200d, 1000l, 2000l, 1000);
assertTrue(media.size() > 0);
mockServer.verify();
}
@Test
public void getLikes() {
mockServer.expect(requestTo("https://api.instagram.com/v1/media/12345/likes/?access_token=ACCESS_TOKEN"))
.andExpect(method(GET))
.andRespond(withResponse(new ClassPathResource("testdata/user-list.json", getClass()), responseHeaders));
List<InstagramProfile> likes = instagram.mediaOperations().getLikes(12345);
assertTrue(likes.size() > 0);
mockServer.verify();
}
@Test
public void getComments() {
mockServer.expect(requestTo("https://api.instagram.com/v1/media/12345/comments/?access_token=ACCESS_TOKEN"))
.andExpect(method(GET))
.andRespond(withResponse(new ClassPathResource("testdata/comment-list.json", getClass()), responseHeaders));
List<Comment> comments = instagram.mediaOperations().getComments(12345);
assertTrue(comments.size() > 0);
mockServer.verify();
}
@Test
public void addComment() {
mockServer.expect(requestTo("https://api.instagram.com/v1/media/12345/comments/?access_token=ACCESS_TOKEN"))
.andExpect(method(POST))
.andExpect(body("text=Awesome%21"))
.andRespond(withResponse(new ClassPathResource("testdata/ok-response.json", getClass()), responseHeaders));
instagram.mediaOperations().addComment(12345, "Awesome!");
mockServer.verify();
}
@Test
public void addLike() {
mockServer.expect(requestTo("https://api.instagram.com/v1/media/12345/likes/?access_token=ACCESS_TOKEN"))
.andExpect(method(POST))
.andRespond(withResponse(new ClassPathResource("testdata/ok-response.json", getClass()), responseHeaders));
instagram.mediaOperations().addLike(12345);
mockServer.verify();
}
@Test
public void deleteComment() {
mockServer.expect(requestTo("https://api.instagram.com/v1/media/12345/comments/54321/?access_token=ACCESS_TOKEN"))
.andExpect(method(DELETE))
.andRespond(withResponse(new ClassPathResource("testdata/ok-response.json", getClass()), responseHeaders));
instagram.mediaOperations().deleteComment(12345, 54321);
mockServer.verify();
}
@Test
public void deleteLike() {
mockServer.expect(requestTo("https://api.instagram.com/v1/media/12345/likes/?access_token=ACCESS_TOKEN"))
.andExpect(method(DELETE))
.andRespond(withResponse(new ClassPathResource("testdata/ok-response.json", getClass()), responseHeaders));
instagram.mediaOperations().deleteLike(12345);
mockServer.verify();
}
}