package com.nilhcem.bblfr.ui; import android.os.Build; import android.view.ViewGroup; import android.widget.FrameLayout; import com.nilhcem.bblfr.BuildConfig; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.MockitoAnnotations; import org.mockito.Spy; import org.robolectric.RobolectricTestRunner; import org.robolectric.RuntimeEnvironment; import org.robolectric.annotation.Config; import java.util.Arrays; import java.util.Collections; import static com.google.common.truth.Truth.assertThat; import static org.mockito.Matchers.any; import static org.mockito.Matchers.anyInt; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; @RunWith(RobolectricTestRunner.class) @Config(constants = BuildConfig.class, sdk = Build.VERSION_CODES.M) public class BaseHeaderAdapterTest { @Spy TestBaseHeaderAdapter adapter; @Mock TestBaseRecyclerViewHolder holder; @Before public void setup() { MockitoAnnotations.initMocks(this); adapter.updateItems(Arrays.asList(1, 2, 3, 4), 0); } @Test public void should_create_item_viewholder() { // Given int viewType = BaseHeaderAdapter.TYPE_ITEM; ViewGroup parent = new FrameLayout(RuntimeEnvironment.application); // When adapter.onCreateViewHolder(parent, viewType); // Then verify(adapter, times(1)).onCreateItemView(parent); verify(adapter, times(0)).onCreateHeaderView(parent); } @Test public void should_create_header_viewholder() { // Given int viewType = BaseHeaderAdapter.TYPE_HEADER; ViewGroup parent = new FrameLayout(RuntimeEnvironment.application); // When adapter.onCreateViewHolder(parent, viewType); // Then verify(adapter, times(0)).onCreateItemView(parent); verify(adapter, times(1)).onCreateHeaderView(parent); } @Test public void should_bind_item_viewholder_with_no_header() { // Given adapter.mHasHeader = false; // When adapter.onBindViewHolder(holder, 1); // Then verify(adapter, times(1)).onBindItemView(holder, 2); verify(adapter, times(0)).onBindHeaderView(any(), anyInt()); } @Test public void should_bind_item_viewholder_with_header() { // Given adapter.mHasHeader = true; // When adapter.onBindViewHolder(holder, 1); // Then verify(adapter, times(1)).onBindItemView(holder, 1); verify(adapter, times(0)).onBindHeaderView(any(), anyInt()); } @Test public void should_bind_header_viewholder() { // Given adapter.mHasHeader = true; // When adapter.onBindViewHolder(holder, 0); // Then verify(adapter, times(0)).onBindItemView(any(), anyInt()); verify(adapter, times(1)).onBindHeaderView(holder, 0); } @Test public void should_return_items_count_0_if_no_item() { // Given adapter.mItems = Collections.emptyList(); // When int itemCount = adapter.getItemCount(); // Then assertThat(itemCount).isEqualTo(0); } @Test public void should_return_items_count_plus_one_header_if_any() { // Given adapter.mHasHeader = true; // When int itemCount = adapter.getItemCount(); // Then assertThat(itemCount).isEqualTo(5); } @Test public void should_return_items_count_without_header_if_none() { // Given adapter.mHasHeader = false; // When int itemCount = adapter.getItemCount(); // Then assertThat(itemCount).isEqualTo(4); } @Test public void should_return_viewtype_header_if_so() { // Given adapter.mHasHeader = true; // When int viewType = adapter.getItemViewType(0); // Then assertThat(viewType).isEqualTo(BaseHeaderAdapter.TYPE_HEADER); } @Test public void should_return_viewtype_item_if_so() { // Given adapter.mHasHeader = false; // When int viewType = adapter.getItemViewType(0); // Then assertThat(viewType).isEqualTo(BaseHeaderAdapter.TYPE_ITEM); } static class TestBaseHeaderAdapter extends BaseHeaderAdapter<Integer, Integer, TestBaseRecyclerViewHolder, TestBaseRecyclerViewHolder> { @Override protected TestBaseRecyclerViewHolder onCreateItemView(ViewGroup parent) { return null; } } static class TestBaseRecyclerViewHolder extends BaseRecyclerViewHolder<Integer> { public TestBaseRecyclerViewHolder() { super(null, 0, false); } } }