package fr.keemto.web;
import com.google.common.collect.Lists;
import fr.keemto.TestAccount;
import fr.keemto.core.*;
import fr.keemto.provider.social.SocialAccountRepository;
import org.codehaus.jackson.JsonNode;
import org.junit.Before;
import org.junit.Test;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.equalTo;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
public class RandomAccountControllerTest extends ControllerTestCase {
private RandomAccountController controller;
private UserRepository userRepository;
private SocialAccountRepository accountFactory;
private Account account;
private User user;
@Before
public void initBeforeTest() throws Exception {
accountFactory = mock(SocialAccountRepository.class);
userRepository = mock(UserRepository.class);
controller = new RandomAccountController(accountFactory, userRepository);
request.addHeader("Accept", "application/json");
request.setMethod("GET");
request.setRequestURI("/api/accounts/random");
user = new User("test");
account = new TestAccount(new AccountKey("provider", "id", user), "", "", "");
}
@Test
public void testGetRandomAccountForAUser() throws Exception {
when(userRepository.getAllUsers()).thenReturn(Lists.newArrayList(user));
when(accountFactory.getAccounts(user)).thenReturn(Lists.newArrayList(account));
controller.setMaxRandomAccount(1);
handlerAdapter.handle(request, response, controller);
assertThat(response.getStatus(), equalTo(200));
JsonNode jsonNode = toJsonNode(response.getContentAsString());
assertThat(jsonNode.size(), equalTo(1));
JsonNode connx = jsonNode.get(0);
JsonNode keyNode = connx.get("key");
assertThat(keyNode.get("providerId").getValueAsText(), equalTo("provider"));
}
@Test
public void testGetRandomAccountsForManyUsers() throws Exception {
when(userRepository.getAllUsers()).thenReturn(Lists.newArrayList(user, user, user));
when(accountFactory.getAccounts(user)).thenReturn(Lists.newArrayList(account, account, account));
controller.setMaxRandomAccount(2);
handlerAdapter.handle(request, response, controller);
assertThat(response.getStatus(), equalTo(200));
JsonNode jsonNode = toJsonNode(response.getContentAsString());
assertThat(jsonNode.size(), equalTo(2));
}
}