2017-08-16 10:51:20 +07:00
|
|
|
package io.spring.api;
|
|
|
|
|
2017-08-24 09:39:09 +07:00
|
|
|
import io.restassured.module.mockmvc.RestAssuredMockMvc;
|
|
|
|
import io.spring.JacksonCustomizations;
|
|
|
|
import io.spring.api.security.WebSecurityConfig;
|
2017-08-18 16:08:27 +07:00
|
|
|
import io.spring.application.ArticleQueryService;
|
2017-08-24 09:39:09 +07:00
|
|
|
import io.spring.application.data.ArticleData;
|
2017-08-18 16:08:27 +07:00
|
|
|
import io.spring.application.data.ProfileData;
|
2017-08-16 10:51:20 +07:00
|
|
|
import io.spring.core.article.Article;
|
|
|
|
import io.spring.core.article.ArticleRepository;
|
|
|
|
import io.spring.core.article.Tag;
|
2017-08-16 12:37:10 +07:00
|
|
|
import io.spring.core.favorite.ArticleFavorite;
|
2017-08-16 10:51:20 +07:00
|
|
|
import io.spring.core.favorite.ArticleFavoriteRepository;
|
|
|
|
import io.spring.core.user.User;
|
|
|
|
import org.junit.Before;
|
|
|
|
import org.junit.Test;
|
2017-08-24 09:39:09 +07:00
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
|
import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest;
|
2017-08-16 10:51:20 +07:00
|
|
|
import org.springframework.boot.test.mock.mockito.MockBean;
|
2017-08-24 09:39:09 +07:00
|
|
|
import org.springframework.context.annotation.Import;
|
|
|
|
import org.springframework.test.web.servlet.MockMvc;
|
2017-08-16 10:51:20 +07:00
|
|
|
|
|
|
|
import java.util.Optional;
|
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
2017-08-24 09:39:09 +07:00
|
|
|
import static io.restassured.module.mockmvc.RestAssuredMockMvc.given;
|
2017-08-16 10:51:20 +07:00
|
|
|
import static org.hamcrest.core.IsEqual.equalTo;
|
2017-08-16 12:37:10 +07:00
|
|
|
import static org.mockito.Matchers.any;
|
2017-08-16 10:51:20 +07:00
|
|
|
import static org.mockito.Matchers.eq;
|
2017-08-16 12:37:10 +07:00
|
|
|
import static org.mockito.Mockito.verify;
|
2017-08-16 10:51:20 +07:00
|
|
|
import static org.mockito.Mockito.when;
|
|
|
|
|
2017-08-24 09:39:09 +07:00
|
|
|
@WebMvcTest(ArticleFavoriteApi.class)
|
|
|
|
@Import({WebSecurityConfig.class, JacksonCustomizations.class})
|
2017-08-16 10:51:20 +07:00
|
|
|
public class ArticleFavoriteApiTest extends TestWithCurrentUser {
|
2017-08-24 09:39:09 +07:00
|
|
|
@Autowired
|
|
|
|
private MockMvc mvc;
|
|
|
|
|
2017-08-16 10:51:20 +07:00
|
|
|
@MockBean
|
|
|
|
private ArticleFavoriteRepository articleFavoriteRepository;
|
|
|
|
|
|
|
|
@MockBean
|
|
|
|
private ArticleRepository articleRepository;
|
|
|
|
|
|
|
|
@MockBean
|
|
|
|
private ArticleQueryService articleQueryService;
|
|
|
|
|
|
|
|
private Article article;
|
|
|
|
|
|
|
|
@Before
|
|
|
|
public void setUp() throws Exception {
|
2017-08-24 09:39:09 +07:00
|
|
|
super.setUp();
|
|
|
|
RestAssuredMockMvc.mockMvc(mvc);
|
2017-08-25 10:34:41 +07:00
|
|
|
User anotherUser = new User("other@test.com", "other", "123", "", "");
|
2017-08-16 10:51:20 +07:00
|
|
|
article = new Article("title", "desc", "body", new String[]{"java"}, anotherUser.getId());
|
|
|
|
when(articleRepository.findBySlug(eq(article.getSlug()))).thenReturn(Optional.of(article));
|
|
|
|
ArticleData articleData = new ArticleData(
|
|
|
|
article.getId(),
|
|
|
|
article.getSlug(),
|
|
|
|
article.getTitle(),
|
|
|
|
article.getDescription(),
|
|
|
|
article.getBody(),
|
|
|
|
true,
|
|
|
|
1,
|
|
|
|
article.getCreatedAt(),
|
|
|
|
article.getUpdatedAt(),
|
|
|
|
article.getTags().stream().map(Tag::getName).collect(Collectors.toList()),
|
|
|
|
new ProfileData(
|
|
|
|
anotherUser.getId(),
|
|
|
|
anotherUser.getUsername(),
|
|
|
|
anotherUser.getBio(),
|
|
|
|
anotherUser.getImage(),
|
|
|
|
false
|
|
|
|
));
|
|
|
|
when(articleQueryService.findBySlug(eq(articleData.getSlug()), eq(user))).thenReturn(Optional.of(articleData));
|
|
|
|
}
|
|
|
|
|
|
|
|
@Test
|
|
|
|
public void should_favorite_an_article_success() throws Exception {
|
|
|
|
given()
|
|
|
|
.header("Authorization", "Token " + token)
|
|
|
|
.when()
|
|
|
|
.post("/articles/{slug}/favorite", article.getSlug())
|
|
|
|
.prettyPeek()
|
|
|
|
.then()
|
2017-08-16 12:37:10 +07:00
|
|
|
.statusCode(200)
|
2017-08-16 10:51:20 +07:00
|
|
|
.body("article.id", equalTo(article.getId()));
|
2017-08-16 12:37:10 +07:00
|
|
|
|
|
|
|
verify(articleFavoriteRepository).save(any());
|
|
|
|
}
|
|
|
|
|
|
|
|
@Test
|
|
|
|
public void should_unfavorite_an_article_success() throws Exception {
|
|
|
|
when(articleFavoriteRepository.find(eq(article.getId()), eq(user.getId()))).thenReturn(Optional.of(new ArticleFavorite(article.getId(), user.getId())));
|
|
|
|
given()
|
|
|
|
.header("Authorization", "Token " + token)
|
|
|
|
.when()
|
|
|
|
.delete("/articles/{slug}/favorite", article.getSlug())
|
|
|
|
.prettyPeek()
|
|
|
|
.then()
|
|
|
|
.statusCode(200)
|
|
|
|
.body("article.id", equalTo(article.getId()));
|
|
|
|
verify(articleFavoriteRepository).remove(new ArticleFavorite(article.getId(), user.getId()));
|
2017-08-16 10:51:20 +07:00
|
|
|
}
|
|
|
|
}
|