package com.marverenic.music.viewmodel; import android.view.View; import com.marverenic.music.BuildConfig; import com.marverenic.music.RobolectricJockeyApplication; import com.marverenic.music.model.Song; import com.marverenic.music.player.PlayerController; import com.trello.rxlifecycle.components.support.RxFragmentActivity; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.robolectric.Robolectric; import org.robolectric.RobolectricTestRunner; import org.robolectric.annotation.Config; import java.util.ArrayList; import java.util.List; import java.util.concurrent.TimeUnit; import static junit.framework.Assert.assertEquals; import static junit.framework.Assert.assertSame; @RunWith(RobolectricTestRunner.class) @Config(sdk = 23, constants = BuildConfig.class, application = RobolectricJockeyApplication.class) public class SongViewModelTest { private RxFragmentActivity mActivity; private Song mModel; private Song mOtherModel; private List<Song> mSurroundingContents; private SongViewModel mSubject; @Before public void setup() { mActivity = Robolectric.buildActivity(RxFragmentActivity.class) .create() .start() .resume() .get(); mSurroundingContents = new ArrayList<>(); mModel = new Song.Builder() .setSongName("Song") .setSongId(1) .setArtistName("Artist") .setArtistId(5) .setAlbumName("Album") .setAlbumId(10) .setSongDuration(TimeUnit.MILLISECONDS.convert(3, TimeUnit.MINUTES)) .setYear(2016) .setDateAdded(System.currentTimeMillis()) .setTrackNumber(1) .setInLibrary(true) .build(); mOtherModel = new Song.Builder() .setSongName("Another Song") .setSongId(2) .setArtistName("Another Artist") .setArtistId(6) .setAlbumName("Another Album") .setAlbumId(11) .setSongDuration(TimeUnit.MILLISECONDS.convert(3, TimeUnit.MINUTES)) .setYear(2017) .setDateAdded(System.currentTimeMillis()) .setTrackNumber(6) .setInLibrary(true) .build(); mSubject = new SongViewModel(mActivity, mActivity.getSupportFragmentManager(), mActivity.bindToLifecycle(), mSurroundingContents); } @Test public void testCorrectText() { mSurroundingContents.add(mModel); mSubject.setIndex(0); assertEquals("Song", mSubject.getTitle()); assertEquals("Artist - Album", mSubject.getDetail()); } @Test public void testReferenceInSingletonList() { mSurroundingContents.add(mModel); mSubject.setIndex(0); assertEquals(0, mSubject.getIndex()); assertSame(mSurroundingContents, mSubject.getSongs()); assertEquals(mModel, mSubject.getReference()); } @Test public void testReferenceInGeneralList() { mSurroundingContents.add(null); mSurroundingContents.add(null); mSurroundingContents.add(null); mSurroundingContents.add(mModel); mSurroundingContents.add(null); mSubject.setIndex(3); assertEquals(3, mSubject.getIndex()); assertSame(mSurroundingContents, mSubject.getSongs()); assertEquals(mModel, mSubject.getReference()); } @Test public void testNowPlayingIndicatorWithEmptyQueue() { PlayerController playerController = mSubject.mPlayerController; playerController.clearQueue(); mSurroundingContents.add(null); mSurroundingContents.add(null); mSurroundingContents.add(null); mSurroundingContents.add(mModel); mSurroundingContents.add(null); mSubject.setIndex(3); assertEquals(View.GONE, mSubject.getNowPlayingIndicatorVisibility()); } @Test public void testNowPlayingIndicatorWithGeneralQueue() { PlayerController playerController = mSubject.mPlayerController; playerController.clearQueue(); mSurroundingContents.add(mOtherModel); mSurroundingContents.add(mOtherModel); mSurroundingContents.add(mOtherModel); mSurroundingContents.add(mModel); mSurroundingContents.add(mOtherModel); mSubject.setIndex(3); playerController.setQueue(mSurroundingContents, 3); assertEquals(View.VISIBLE, mSubject.getNowPlayingIndicatorVisibility()); playerController.changeSong(2); assertEquals(View.GONE, mSubject.getNowPlayingIndicatorVisibility()); } }