package com.example.features.dashboard.view;
import android.support.test.rule.ActivityTestRule;
import com.example.R;
import com.example.util.EspressoTestHelper;
import com.example.util.HttpCodes;
import com.example.util.MockWebServerHelper;
import okhttp3.mockwebserver.MockWebServer;
import org.junit.After;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import java.io.IOException;
import java.util.Collection;
@RunWith(Parameterized.class)
public class MainActivityErrorCodesEspressoTest extends EspressoTestHelper {
@Rule public ActivityTestRule<MainActivity> activityTestRule = new ActivityTestRule(MainActivity.class, false, false);
private final int errorCode;
private MockWebServer mockWebServer;
private final MockWebServerHelper mockWebServerHelper = new MockWebServerHelper();
public MainActivityErrorCodesEspressoTest(int errorCode) {
this.errorCode = errorCode;
}
@Before
public void beforeEveryTest() throws IOException {
mockWebServer = mockWebServerHelper.initMockWebServer();
}
@After
public void afterEveryTest() throws IOException {
mockWebServer.shutdown();
}
/**
* Run the test for all http error codes.
*/
@Parameterized.Parameters
public static Collection<Integer> data() {
return HttpCodes.clientAndServerSideErrorCodes();
}
@Test
public void shot_request_failure_for_all_failure_response_codes() {
// Arrange
mockWebServerHelper.enqueueErrorResponseForMockWebServer(mockWebServer, errorCode);
// Act
activityTestRule.launchActivity(NO_INTENT);
// Assert
checkViewIsVisible(R.id.activity_main_shots_loading_failed__container);
}
}