package com.pivotallabs.tracker;
import android.app.Activity;
import com.pivotallabs.Callbacks;
import com.pivotallabs.TestCallbacks;
import com.pivotallabs.TestResponses;
import com.pivotallabs.api.ApiRequest;
import com.pivotallabs.api.TestApiGateway;
import org.robolectric.RobolectricTestRunner;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import static org.hamcrest.CoreMatchers.equalTo;
import static org.junit.Assert.assertThat;
@RunWith(RobolectricTestRunner.class)
public class RecentActivitiesTest {
private TestApiGateway apiGateway;
private RecentActivities recentActivities;
@Before
public void setUp() throws Exception {
apiGateway = new TestApiGateway();
AuthenticationGateway authenticationGateway = new AuthenticationGateway(apiGateway, new Activity());
authenticationGateway.signIn("user", "pass", new Callbacks());
apiGateway.simulateResponse(200, TestResponses.AUTH_SUCCESS);
recentActivities = new RecentActivities(apiGateway, authenticationGateway);
}
@Test
public void update_shouldMakeRequest() throws Exception {
recentActivities.update(new TestCallbacks());
ApiRequest expectedRequest = new RecentActivityRequest("c93f12c");
assertThat(apiGateway.getLatestRequest(), equalTo(expectedRequest));
}
@Test
public void update_shouldCreateRecentActivityObjectsFromResponse() throws Exception {
recentActivities.update(new TestCallbacks());
apiGateway.simulateResponse(200, TestResponses.RECENT_ACTIVITY);
assertThat(recentActivities.size(), equalTo(2));
RecentActivity recentActivity0 = recentActivities.get(0);
assertThat(recentActivity0.getDescription(),
equalTo("I changed the 'request' for squidward. \"Add 'Buyout'\""));
RecentActivity recentActivity1 = recentActivities.get(1);
assertThat(recentActivity1.getDescription(),
equalTo("Spongebob Square edited \"Application tracks listing clicks\""));
}
@Test
public void update_shouldFireCallbacks_success() throws Exception {
TestCallbacks callbacks = new TestCallbacks();
recentActivities.update(callbacks);
assertThat(callbacks.startWasCalled, equalTo(true));
apiGateway.simulateResponse(200, TestResponses.RECENT_ACTIVITY);
assertThat(callbacks.successWasCalled, equalTo(true));
assertThat(callbacks.failureWasCalled, equalTo(false));
assertThat(callbacks.completeWasCalled, equalTo(true));
}
@Test
public void update_shouldFireCallbacks_failure() throws Exception {
TestCallbacks callbacks = new TestCallbacks();
recentActivities.update(callbacks);
assertThat(callbacks.startWasCalled, equalTo(true));
apiGateway.simulateResponse(500, "ERROR");
assertThat(callbacks.successWasCalled, equalTo(false));
assertThat(callbacks.failureWasCalled, equalTo(true));
assertThat(callbacks.completeWasCalled, equalTo(true));
}
@Test
public void update_shouldClearExitingItems() throws Exception {
recentActivities.update(new TestCallbacks());
apiGateway.simulateResponse(200, TestResponses.RECENT_ACTIVITY);
assertThat(recentActivities.size(), equalTo(2));
recentActivities.update(new TestCallbacks());
apiGateway.simulateResponse(200, TestResponses.RECENT_ACTIVITY);
assertThat(recentActivities.size(), equalTo(2));
}
}