package org.whispersystems.bithub.tests.controllers;
import com.coinbase.api.ObjectMapperProvider;
import com.coinbase.api.entity.TransactionsResponse;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.sun.jersey.api.client.ClientResponse;
import org.junit.ClassRule;
import org.junit.Test;
import org.whispersystems.bithub.client.CoinbaseClient;
import org.whispersystems.bithub.client.GithubClient;
import org.whispersystems.bithub.config.RepositoryConfiguration;
import org.whispersystems.bithub.controllers.StatusController;
import org.whispersystems.bithub.storage.CacheManager;
import javax.ws.rs.core.MediaType;
import java.math.BigDecimal;
import java.util.LinkedList;
import io.dropwizard.testing.junit.ResourceTestRule;
import static org.fest.assertions.api.Assertions.assertThat;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
public class StatusControllerTest {
private static final BigDecimal PAYOUT_RATE = new BigDecimal(0.02 );
private static final BigDecimal BALANCE = new BigDecimal(10.01);
private static final BigDecimal EXCHANGE_RATE = new BigDecimal(1.0 );
private static final CoinbaseClient coinbaseClient = mock(CoinbaseClient.class);
private static final GithubClient githubClient = mock(GithubClient.class );
@ClassRule
public static ResourceTestRule resources;
static {
try {
ObjectMapper objectMapper = ObjectMapperProvider.createDefaultMapper();
TransactionsResponse transactionsResponse = objectMapper.readValue(StatusControllerTest.class.getResourceAsStream("/payloads/transactions.json"), TransactionsResponse.class);
when(coinbaseClient.getRecentTransactions()).thenReturn(transactionsResponse.getTransactions());
when(coinbaseClient.getAccountBalance()).thenReturn(BALANCE);
when(coinbaseClient.getExchangeRate()).thenReturn(EXCHANGE_RATE);
CacheManager coinbaseManager = new CacheManager(coinbaseClient, githubClient,
new LinkedList<RepositoryConfiguration>(),
PAYOUT_RATE);
coinbaseManager.start();
resources = ResourceTestRule.builder()
.addResource(new StatusController(coinbaseManager, null))
.build();
} catch (Exception e) {
throw new AssertionError(e);
}
}
// @Before
// public void setup() throws Exception {
// when(coinbaseClient.getRecentTransactions()).thenReturn(fromJson(jsonFixture("payloads/transactions.json"), RecentTransactionsResponse.class).getTransactions());
// when(coinbaseClient.getAccountBalance()).thenReturn(BALANCE);
// when(coinbaseClient.getExchangeRate()).thenReturn(EXCHANGE_RATE);
//
// }
// @Test
// public void testTransactionsHtml() throws Exception {
// ClientResponse response = resources.client().resource("/v1/status/transactions/")
// .get(ClientResponse.class);
//
// assertThat(response.getStatus()).isEqualTo(200);
// assertThat(response.getType()).isEqualTo(MediaType.TEXT_HTML_TYPE);
// }
@Test
public void testTransactionsJson() throws Exception {
ClientResponse response = resources.client().resource("/v1/status/transactions/?format=json").accept(MediaType.APPLICATION_JSON_TYPE)
.get(ClientResponse.class);
assertThat(response.getStatus()).isEqualTo(200);
assertThat(response.getType()).isEqualTo(MediaType.APPLICATION_JSON_TYPE);
}
}