package com.example.features.dashboard.view;
import android.content.res.Configuration;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ProgressBar;
import com.example.R;
import com.example.features.dashboard.presenter.MainPresenter;
import com.example.util.PreconfiguredRobolectricTestRunner;
import com.example.util.dummy.DummyDataProvider;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mockito;
import org.robolectric.Robolectric;
import org.robolectric.util.ActivityController;
import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.Mockito.verify;
@RunWith(PreconfiguredRobolectricTestRunner.class)
public class MainActivityTest {
private ProgressBar progressBar;
private ViewGroup shotsFailedActionContainer;
private MainActivity mainActivity;
private final DummyDataProvider dummyDataProvider = new DummyDataProvider();
@Before
public void setUp() {
mainActivity = Robolectric.setupActivity(MainActivity.class);
progressBar = (ProgressBar) mainActivity.findViewById(R.id.main_activity_progress_bar);
shotsFailedActionContainer = (ViewGroup) mainActivity.findViewById(R.id.activity_main_shots_loading_failed__container);
}
@Test
public void activity_not_null() {
assertThat(mainActivity).isNotNull();
}
@Test
public void display_shots() {
// Act
mainActivity.showLoadingFailureError();
// Assert
assertThat(progressBar.getVisibility()).isEqualTo(View.GONE);
assertThat(shotsFailedActionContainer.getVisibility()).isEqualTo(View.VISIBLE);
}
@Test
public void display_shots_list() {
// Act
mainActivity.displayShotsList(dummyDataProvider.shots().getShotList());
// Assert
assertThat(progressBar.getVisibility()).isEqualTo(View.GONE);
assertThat(shotsFailedActionContainer.getVisibility()).isEqualTo(View.GONE);
}
@Test
public void configuration_change_does_not_fetch_shots_again() {
// Arrange
ActivityController<MainActivity> activityController = Robolectric.buildActivity(MainActivity.class);
MainActivity mainActivity = activityController.get();
MainPresenter mockMainPresenter = Mockito.mock(MainPresenter.class);
mainActivity.setPresenter(mockMainPresenter);
activityController.setup();
// Act
Configuration configuration = new Configuration();
configuration.orientation = Configuration.ORIENTATION_LANDSCAPE;
activityController.configurationChange(configuration);
// Assert
verify(mockMainPresenter).fetchShots();
}
}