package org.edx.mobile.profiles;
import android.support.annotation.NonNull;
import android.support.v4.app.Fragment;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.view.ViewGroup;
import org.edx.mobile.test.BaseTestCase;
import org.edx.mobile.view.adapters.LoadingViewHolder;
import org.junit.Before;
import org.junit.Test;
import org.mockito.Mock;
import java.util.Arrays;
import java.util.Collections;
import static org.assertj.core.api.Java6Assertions.assertThat;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.verifyZeroInteractions;
public class AccomplishmentListAdapterTest extends BaseTestCase {
private AccomplishmentListAdapter adapter;
@Mock
View mockView;
@Mock
Fragment mockFragment;
@Mock
AccomplishmentListAdapter.Listener mockListener;
@Before
public void setUp() throws Exception {
adapter = new TestableAccomplishmentListAdapterTest("http://example.com/", mockListener);
}
@Test
public void getItemCount() {
adapter.setItems(Arrays.asList(new BadgeAssertion(), new BadgeAssertion(), new BadgeAssertion()));
adapter.setPageLoading(false);
assertThat(adapter.getItemCount()).isEqualTo(3);
adapter.setPageLoading(true);
assertThat(adapter.getItemCount()).isEqualTo(4);
}
@Test
public void getItemViewType() {
adapter.setItems(Collections.singletonList(new BadgeAssertion()));
adapter.setPageLoading(true);
assertThat(adapter.getItemViewType(0)).isEqualTo(AccomplishmentListAdapter.RowType.ITEM);
assertThat(adapter.getItemViewType(1)).isEqualTo(AccomplishmentListAdapter.RowType.PROGRESS);
}
@Test
public void onBindViewHolder_withPositionOfItem_calls_setContent() {
final BadgeAssertion badgeAssertion = new BadgeAssertion();
adapter.setItems(Collections.singletonList(badgeAssertion));
final AccomplishmentListAdapter.ItemViewHolder viewHolder = mock(AccomplishmentListAdapter.ItemViewHolder.class);
adapter.onBindViewHolder(viewHolder, 0);
verify(viewHolder).setContent(badgeAssertion, false);
}
@Test
public void onBindViewHolder_withPositionOfLoadingIndicator_doesNothing() {
adapter.setItems(Collections.<BadgeAssertion>emptyList());
adapter.setPageLoading(true);
final LoadingViewHolder viewHolder = mock(LoadingViewHolder.class);
adapter.onBindViewHolder(viewHolder, 0);
verifyZeroInteractions(viewHolder);
}
@Test
public void onCreateViewHolder_withItemViewType_returnsItemViewHolder() {
final BadgeAssertion badgeAssertion = new BadgeAssertion();
adapter.setItems(Collections.singletonList(badgeAssertion));
final RecyclerView.ViewHolder viewHolder = adapter.onCreateViewHolder(mock(ViewGroup.class), AccomplishmentListAdapter.RowType.ITEM);
assertThat(viewHolder).isInstanceOf(AccomplishmentListAdapter.ItemViewHolder.class);
}
@Test
public void onCreateViewHolder_withProgressViewType_returnsLoadingViewHolder() {
final RecyclerView.ViewHolder viewHolder = adapter.onCreateViewHolder(mock(ViewGroup.class), AccomplishmentListAdapter.RowType.PROGRESS);
assertThat(viewHolder).isInstanceOf(LoadingViewHolder.class);
}
static class TestableAccomplishmentListAdapterTest extends AccomplishmentListAdapter {
public TestableAccomplishmentListAdapterTest(@NonNull String imageUrlPrefix, @NonNull Listener listener) {
super(imageUrlPrefix, listener);
}
@NonNull
@Override
protected ItemViewHolder createItemViewHolder(@NonNull ViewGroup parent) {
return mock(ItemViewHolder.class);
}
@NonNull
@Override
protected LoadingViewHolder createProgressViewHolder(@NonNull ViewGroup parent) {
return mock(LoadingViewHolder.class);
}
}
}