package com.marverenic.music.viewmodel; import android.content.Intent; import android.support.v4.app.FragmentActivity; import android.view.View; import com.marverenic.music.BuildConfig; import com.marverenic.music.RobolectricJockeyApplication; import com.marverenic.music.activity.instance.AutoPlaylistActivity; import com.marverenic.music.activity.instance.PlaylistActivity; import com.marverenic.music.model.AutoPlaylist; import com.marverenic.music.model.Playlist; import com.marverenic.music.model.playlistrules.AutoPlaylistRule; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.robolectric.Robolectric; import org.robolectric.RobolectricTestRunner; import org.robolectric.Shadows; import org.robolectric.annotation.Config; import static com.marverenic.music.utils.AssertUtils.assertBundlesEqual; import static junit.framework.Assert.assertTrue; import static org.junit.Assert.assertEquals; @RunWith(RobolectricTestRunner.class) @Config(sdk = 23, constants = BuildConfig.class, application = RobolectricJockeyApplication.class) public class PlaylistViewModelTest { private FragmentActivity mActivity; private Playlist mModel; private AutoPlaylist mAutoModel; private PlaylistViewModel mSubject; @Before public void setup() { mActivity = Robolectric.buildActivity(FragmentActivity.class) .create() .start() .resume() .get(); mModel = new Playlist.Builder() .setPlaylistId(5) .setPlaylistName("A Playlist") .build(); mAutoModel = new AutoPlaylist.Builder() .setName("A smart playlist") .setId(4) .setMatchAllRules(true) .setMaximumEntries(25) .setRules( new AutoPlaylistRule.Factory() .setType(AutoPlaylistRule.SONG) .setField(AutoPlaylistRule.PLAY_COUNT) .setMatch(AutoPlaylistRule.GREATER_THAN) .setValue("0") .build()) .setSortAscending(true) .setSortMethod(AutoPlaylistRule.PLAY_COUNT) .build(); mSubject = new PlaylistViewModel(mActivity); } @Test public void testCorrectText() { mSubject.setPlaylist(mModel); assertEquals("A Playlist", mSubject.getName()); mSubject.setPlaylist(mAutoModel); assertEquals("A smart playlist", mSubject.getName()); } @Test public void testAutoPlaylistShowsIndicator() { mSubject.setPlaylist(mAutoModel); assertEquals(View.VISIBLE, mSubject.getSmartIndicatorVisibility()); } @Test public void testPlaylistHidesIndicator() { mSubject.setPlaylist(mModel); assertEquals(View.GONE, mSubject.getSmartIndicatorVisibility()); } @Test public void testPlaylistClick() { mSubject.setPlaylist(mModel); mSubject.onClickPlaylist().onClick(null); Intent expected = PlaylistActivity.newIntent(mActivity, mModel); Intent actual = Shadows.shadowOf(mActivity).getNextStartedActivity(); assertTrue(expected.filterEquals(actual)); assertBundlesEqual(expected.getExtras(), actual.getExtras()); } @Test public void testAutoPlaylistClick() { mSubject.setPlaylist(mAutoModel); mSubject.onClickPlaylist().onClick(null); Intent expected = AutoPlaylistActivity.newIntent(mActivity, mAutoModel); Intent actual = Shadows.shadowOf(mActivity).getNextStartedActivity(); assertTrue(expected.filterEquals(actual)); assertBundlesEqual(expected.getExtras(), actual.getExtras()); } }