package io.kaif.web.v1;
import static java.util.Arrays.asList;
import static org.hamcrest.Matchers.is;
import static org.mockito.Matchers.isA;
import static org.mockito.Matchers.isNull;
import static org.mockito.Mockito.*;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
import java.time.Instant;
import org.junit.Before;
import org.junit.Test;
import io.kaif.flake.FlakeId;
import io.kaif.model.account.Account;
import io.kaif.model.article.Article;
import io.kaif.model.clientapp.ClientAppUserAccessToken;
import io.kaif.model.debate.Debate;
import io.kaif.model.feed.FeedAsset;
import io.kaif.model.zone.ZoneInfo;
import io.kaif.test.MvcIntegrationTests;
public class V1FeedResourceTest extends MvcIntegrationTests {
private Account user;
private Debate debate1;
private Debate debate2;
private FeedAsset asset1;
private FeedAsset asset2;
@Before
public void setUp() throws Exception {
user = accountCitizen("user1");
ZoneInfo zone = zoneDefault("fun");
Article article = article(zone.getZone(), "art1");
debate1 = debate(article, "deb1", null);
debate2 = debate(article, "deb2", debate1);
asset1 = FeedAsset.createReply(debate1.getDebateId(), user.getAccountId(), Instant.now());
asset2 = FeedAsset.createReply(debate2.getDebateId(), user.getAccountId(), Instant.now());
}
@Test
public void news() throws Exception {
when(feedService.listFeeds(isA(ClientAppUserAccessToken.class),
isNull(FlakeId.class))).thenReturn(asList(asset1, asset2));
when(articleService.listDebatesByIdWithCache(asList(debate1.getDebateId(),
debate2.getDebateId()))).thenReturn(asList(debate1, debate2));
oauthPerform(user, get("/v1/feed/news")).andExpect(status().isOk())
.andExpect(jsonPath("$.data[0].assetType", is("DEBATE_FROM_REPLY")))
.andExpect(jsonPath("$.data[0].debate.content", is("deb1")));
}
@Test
public void acknowledge() throws Exception {
oauthPerform(user, post("/v1/feed/acknowledge").content(q("{'assetId':'foo123'}"))).andExpect(
status().isOk());
verify(feedService).acknowledge(isA(ClientAppUserAccessToken.class),
eq(FlakeId.fromString("foo123")));
}
@Test
public void newsUnreadCount() throws Exception {
when(feedService.countUnread(isA(ClientAppUserAccessToken.class))).thenReturn(11);
oauthPerform(user, get("/v1/feed/news-unread-count")).andExpect(status().isOk())
.andExpect(jsonPath("$.data", is(11)));
}
}