package io.kaif.web.api;
import static org.mockito.Mockito.*;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
import org.junit.Test;
import org.mockito.Mockito;
import org.springframework.dao.DuplicateKeyException;
import org.springframework.http.MediaType;
import com.fasterxml.jackson.databind.ObjectMapper;
import io.kaif.flake.FlakeId;
import io.kaif.model.account.Account;
import io.kaif.model.account.AccountAccessToken;
import io.kaif.model.account.Authorization;
import io.kaif.model.vote.VoteState;
import io.kaif.test.MvcIntegrationTests;
public class VoteResourceTest extends MvcIntegrationTests {
@Test
public void ignoreDuplicateVote() throws Exception {
Account account = accountCitizen("foo");
String token = prepareAccessToken(account);
VoteResource.VoteArticle voteArticle = new VoteResource.VoteArticle();
voteArticle.articleId = FlakeId.fromString("a");
voteArticle.newState = VoteState.DOWN;
voteArticle.previousCount = 100L;
voteArticle.previousState = VoteState.EMPTY;
Mockito.doThrow(new DuplicateKeyException("vote dup"))
.when(voteService)
.voteArticle(eq(VoteState.DOWN),
eq(FlakeId.fromString("a")),
isA(Authorization.class),
eq(VoteState.EMPTY),
eq(100L));
mockMvc.perform(post("/api/vote/article").header(AccountAccessToken.HEADER_KEY, token)
.contentType(MediaType.APPLICATION_JSON)
.content(new ObjectMapper().writeValueAsBytes(voteArticle))).andExpect(status().isOk());
}
}