package com.sleazyweasel.applescriptifier;
import org.junit.Test;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import static junit.framework.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
public class SpotifySupportTest {
@SuppressWarnings({"unchecked"})
@Test
public void testGetStatus_notRunning() throws Exception {
AppleScriptTemplate appleScriptTemplate = mock(AppleScriptTemplate.class);
when(appleScriptTemplate.isRunning(Application.SPOTIFY())).thenReturn(false);
SpotifySupport testClass = new SpotifySupport(appleScriptTemplate);
Map<String, Object> status = testClass.getStatus();
assertNotNull(status);
}
@SuppressWarnings({"unchecked"})
@Test
public void testGetStatus_running() throws Exception {
//setup
AppleScriptTemplate appleScriptTemplate = mock(AppleScriptTemplate.class);
when(appleScriptTemplate.isRunning(Application.SPOTIFY())).thenReturn(true);
List<Object> playerInfo = new ArrayList<Object>();
playerInfo.add("playing");
playerInfo.add(64);
playerInfo.add(3.5);
when(appleScriptTemplate.execute(Application.SPOTIFY(), "[get player state as string, get sound volume, get player position]")).thenReturn(playerInfo);
when(appleScriptTemplate.execute(Application.SPOTIFY(), "get [name, artist, album, duration, spotify url] of current track")).thenReturn(Arrays.asList("New Song", "The Who", "Who Are You", 3.333, "lemons"));
SpotifySupport testClass = new SpotifySupport(appleScriptTemplate);
//when
Map<String, Object> status = testClass.getStatus();
//then
assertNotNull(status);
Map<String, Object> playerState = (Map<String, Object>) status.get("playerState");
assertNotNull(playerState);
assertEquals("YES", playerState.get("playing"));
assertEquals(64, playerState.get("volume"));
assertEquals(3.5, playerState.get("playerPosition"));
Map<String, Object> currentTrack = (Map<String, Object>) status.get("currentTrack");
assertEquals("New Song", currentTrack.get("title"));
assertEquals("Who Are You", currentTrack.get("album"));
assertEquals("The Who", currentTrack.get("artist"));
assertEquals("lemons", currentTrack.get("spotifyUrl"));
assertEquals(3.333, currentTrack.get("duration"));
}
@SuppressWarnings({"unchecked"})
@Test
public void testGetStatus_noTrack() throws Exception {
//setup
AppleScriptTemplate appleScriptTemplate = mock(AppleScriptTemplate.class);
when(appleScriptTemplate.isRunning(Application.SPOTIFY())).thenReturn(true);
List<Object> playerInfo = new ArrayList<Object>();
playerInfo.add("stopped");
playerInfo.add(64);
playerInfo.add(3.5);
when(appleScriptTemplate.execute(Application.SPOTIFY(), "[get player state as string, get sound volume, get player position]")).thenReturn(playerInfo);
when(appleScriptTemplate.execute(Application.SPOTIFY(), "get [name, artist, album, duration, spotify url] of current track")).thenThrow(new AppleScriptException(new Exception()));
SpotifySupport testClass = new SpotifySupport(appleScriptTemplate);
//when
Map<String, Object> status = testClass.getStatus();
//then
assertNotNull(status);
assertNotNull(status);
Map<String, Object> playerState = (Map<String, Object>) status.get("playerState");
assertNotNull(playerState);
assertEquals("NO", playerState.get("playing"));
assertEquals(64, playerState.get("volume"));
assertEquals(3.5, playerState.get("playerPosition"));
Map<String, Object> currentTrack = (Map<String, Object>) status.get("currentTrack");
assertEquals("", currentTrack.get("title"));
assertEquals("", currentTrack.get("album"));
assertEquals("", currentTrack.get("artist"));
assertEquals("", currentTrack.get("spotifyUrl"));
assertEquals("", currentTrack.get("duration"));
}
}