package org.libresonic.player.dao;
import org.junit.Before;
import org.junit.Test;
import org.libresonic.player.domain.PlayQueue;
import org.libresonic.player.domain.Player;
import org.libresonic.player.domain.PlayerTechnology;
import org.libresonic.player.domain.TranscodeScheme;
import org.springframework.beans.factory.annotation.Autowired;
import java.util.Date;
import java.util.List;
import static org.junit.Assert.*;
/**
* Unit test of {@link PlayerDao}.
*
* @author Sindre Mehus
*/
public class PlayerDaoTestCase extends DaoTestCaseBean2 {
@Autowired
PlayerDao playerDao;
@Before
public void setUp() throws Exception {
getJdbcTemplate().execute("delete from player");
}
@Test
public void testCreatePlayer() {
Player player = new Player();
player.setName("name");
player.setType("type");
player.setUsername("username");
player.setIpAddress("ipaddress");
player.setDynamicIp(false);
player.setAutoControlEnabled(false);
player.setTechnology(PlayerTechnology.EXTERNAL_WITH_PLAYLIST);
player.setClientId("android");
player.setLastSeen(new Date());
player.setTranscodeScheme(TranscodeScheme.MAX_160);
playerDao.createPlayer(player);
Player newPlayer = playerDao.getAllPlayers().get(0);
assertPlayerEquals(player, newPlayer);
Player newPlayer2 = playerDao.getPlayerById(newPlayer.getId());
assertPlayerEquals(player, newPlayer2);
}
@Test
public void testDefaultValues() {
playerDao.createPlayer(new Player());
Player player = playerDao.getAllPlayers().get(0);
assertTrue("Player should have dynamic IP by default.", player.isDynamicIp());
assertTrue("Player should be auto-controlled by default.", player.isAutoControlEnabled());
assertNull("Player client ID should be null by default.", player.getClientId());
}
@Test
public void testIdentity() {
Player player = new Player();
playerDao.createPlayer(player);
assertEquals("Wrong ID", "1", player.getId());
assertEquals("Wrong number of players.", 1, playerDao.getAllPlayers().size());
playerDao.createPlayer(player);
assertEquals("Wrong ID", "2", player.getId());
assertEquals("Wrong number of players.", 2, playerDao.getAllPlayers().size());
playerDao.createPlayer(player);
assertEquals("Wrong ID", "3", player.getId());
assertEquals("Wrong number of players.", 3, playerDao.getAllPlayers().size());
playerDao.deletePlayer("3");
playerDao.createPlayer(player);
assertEquals("Wrong ID", "3", player.getId());
assertEquals("Wrong number of players.", 3, playerDao.getAllPlayers().size());
playerDao.deletePlayer("2");
playerDao.createPlayer(player);
assertEquals("Wrong ID", "4", player.getId());
assertEquals("Wrong number of players.", 3, playerDao.getAllPlayers().size());
}
@Test
public void testPlaylist() {
Player player = new Player();
playerDao.createPlayer(player);
PlayQueue playQueue = player.getPlayQueue();
assertNotNull("Missing playlist.", playQueue);
playerDao.deletePlayer(player.getId());
playerDao.createPlayer(player);
assertNotSame("Wrong playlist.", playQueue, player.getPlayQueue());
}
@Test
public void testGetPlayersForUserAndClientId() {
Player player = new Player();
player.setUsername("sindre");
playerDao.createPlayer(player);
player = playerDao.getAllPlayers().get(0);
List<Player> players = playerDao.getPlayersForUserAndClientId("sindre", null);
assertFalse("Error in getPlayersForUserAndClientId().", players.isEmpty());
assertPlayerEquals(player, players.get(0));
assertTrue("Error in getPlayersForUserAndClientId().", playerDao.getPlayersForUserAndClientId("sindre", "foo").isEmpty());
player.setClientId("foo");
playerDao.updatePlayer(player);
players = playerDao.getPlayersForUserAndClientId("sindre", null);
assertTrue("Error in getPlayersForUserAndClientId().", players.isEmpty());
players = playerDao.getPlayersForUserAndClientId("sindre", "foo");
assertFalse("Error in getPlayersForUserAndClientId().", players.isEmpty());
assertPlayerEquals(player, players.get(0));
}
@Test
public void testUpdatePlayer() {
Player player = new Player();
playerDao.createPlayer(player);
assertPlayerEquals(player, playerDao.getAllPlayers().get(0));
player.setName("name");
player.setType("Winamp");
player.setTechnology(PlayerTechnology.WEB);
player.setClientId("foo");
player.setUsername("username");
player.setIpAddress("ipaddress");
player.setDynamicIp(true);
player.setAutoControlEnabled(false);
player.setLastSeen(new Date());
player.setTranscodeScheme(TranscodeScheme.MAX_160);
playerDao.updatePlayer(player);
Player newPlayer = playerDao.getAllPlayers().get(0);
assertPlayerEquals(player, newPlayer);
}
@Test
public void testDeletePlayer() {
assertEquals("Wrong number of players.", 0, playerDao.getAllPlayers().size());
playerDao.createPlayer(new Player());
assertEquals("Wrong number of players.", 1, playerDao.getAllPlayers().size());
playerDao.createPlayer(new Player());
assertEquals("Wrong number of players.", 2, playerDao.getAllPlayers().size());
playerDao.deletePlayer("1");
assertEquals("Wrong number of players.", 1, playerDao.getAllPlayers().size());
playerDao.deletePlayer("2");
assertEquals("Wrong number of players.", 0, playerDao.getAllPlayers().size());
}
private void assertPlayerEquals(Player expected, Player actual) {
assertEquals("Wrong ID.", expected.getId(), actual.getId());
assertEquals("Wrong name.", expected.getName(), actual.getName());
assertEquals("Wrong technology.", expected.getTechnology(), actual.getTechnology());
assertEquals("Wrong client ID.", expected.getClientId(), actual.getClientId());
assertEquals("Wrong type.", expected.getType(), actual.getType());
assertEquals("Wrong username.", expected.getUsername(), actual.getUsername());
assertEquals("Wrong IP address.", expected.getIpAddress(), actual.getIpAddress());
assertEquals("Wrong dynamic IP.", expected.isDynamicIp(), actual.isDynamicIp());
assertEquals("Wrong auto control enabled.", expected.isAutoControlEnabled(), actual.isAutoControlEnabled());
assertEquals("Wrong last seen.", expected.getLastSeen(), actual.getLastSeen());
assertEquals("Wrong transcode scheme.", expected.getTranscodeScheme(), actual.getTranscodeScheme());
}
}