package com.fernandocejas.android10.sample.test.viewmodel; import android.app.Activity; import android.app.Instrumentation; import android.content.Intent; import android.support.test.espresso.intent.rule.IntentsTestRule; import android.support.test.runner.AndroidJUnit4; import android.test.suitebuilder.annotation.LargeTest; import com.fernandocejas.android10.sample.data.dto.User; import com.fernandocejas.android10.sample.presentation.AndroidApplication; import com.fernandocejas.android10.sample.presentation.R; import com.fernandocejas.android10.sample.presentation.mapper.UserModelDataMapper; import com.fernandocejas.android10.sample.presentation.model.UserModel; import com.fernandocejas.android10.sample.presentation.navigation.ActivityNavigator; import com.fernandocejas.android10.sample.presentation.view.activity.UserDetailsActivity; import com.fernandocejas.android10.sample.presentation.view.activity.UserListActivity; import com.fernandocejas.android10.sample.presentation.view.adapter.UsersAdapter; import com.fernandocejas.android10.sample.presentation.view.fragment.UserListFragment; import com.fernandocejas.android10.sample.presentation.viewmodel.UserListViewModel; import org.junit.Before; import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; import java.util.ArrayList; import java.util.Collection; import java.util.List; import static android.support.test.espresso.Espresso.onView; import static android.support.test.espresso.action.ViewActions.click; import static android.support.test.espresso.assertion.ViewAssertions.matches; import static android.support.test.espresso.intent.Intents.intended; import static android.support.test.espresso.intent.Intents.intending; import static android.support.test.espresso.intent.matcher.IntentMatchers.hasData; import static android.support.test.espresso.intent.matcher.IntentMatchers.hasExtra; import static android.support.test.espresso.intent.matcher.IntentMatchers.isInternal; import static android.support.test.espresso.matcher.ViewMatchers.isDisplayed; import static android.support.test.espresso.matcher.ViewMatchers.withText; import static junit.framework.Assert.assertEquals; import static org.hamcrest.Matchers.not; import static org.hamcrest.core.AllOf.allOf; /** * Created by rocko on 15-11-6. */ @RunWith(AndroidJUnit4.class) @LargeTest public class UserListViewModelTest { private UserModelDataMapper userModelDataMapper; private List<User> fakeUsersList; private UserListFragment userListFragment; private UserListViewModel userListViewModel; private UsersAdapter usersAdapter; @Rule public IntentsTestRule<UserListActivity> mActivityRule = new IntentsTestRule<>( UserListActivity.class); @Before public void setUp() { // intending(not(isInternal())).respondWith(new Instrumentation.ActivityResult(Activity.RESULT_OK, null)); userModelDataMapper = new UserModelDataMapper(); fakeUsersList = makeFakeUsers(); userListFragment = (UserListFragment) mActivityRule.getActivity().getFragmentManager().findFragmentById(R.id.fragmentUserList); userListViewModel = userListFragment.getViewModel(); Collection<UserModel> userModelsCollection = userModelDataMapper.transformUsers(fakeUsersList); usersAdapter = new UsersAdapter(mActivityRule.getActivity(), userModelsCollection); usersAdapter.setOnItemClickListener(userListViewModel.onUserItemClick()); userListViewModel.showContentList(usersAdapter); } @Test public void testShowContentList() throws Exception { assertEquals(fakeUsersList.size(), usersAdapter.getItemCount()); User user = fakeUsersList.get(0); onView(withText(user.getFullName())).check(matches(isDisplayed())); } @Test public void testOnUserItemClick() throws Exception { User user = fakeUsersList.get(1); onView(withText(user.getFullName())).perform(click()); intending(hasExtra(UserDetailsActivity.INTENT_EXTRA_PARAM_USER_ID, user.getUserId() + "")); } private List<User> makeFakeUsers() { List<User> fakeUsersList = new ArrayList<>(); for (int i = 0; i < 15; i++) { User user = new User(i); user.setFullName("NAME: " + i); user.setEmail(i + "@fake.com"); user.setFollowers(i); user.setDescription("Description: " + i); fakeUsersList.add(user); } return fakeUsersList; } }