aboutsummaryrefslogtreecommitdiff
path: root/subsonic-main/src/test/java/net/sourceforge/subsonic/dao
diff options
context:
space:
mode:
Diffstat (limited to 'subsonic-main/src/test/java/net/sourceforge/subsonic/dao')
-rw-r--r--subsonic-main/src/test/java/net/sourceforge/subsonic/dao/DaoTestCaseBase.java83
-rw-r--r--subsonic-main/src/test/java/net/sourceforge/subsonic/dao/InternetRadioDaoTestCase.java67
-rw-r--r--subsonic-main/src/test/java/net/sourceforge/subsonic/dao/MusicFolderDaoTestCase.java85
-rw-r--r--subsonic-main/src/test/java/net/sourceforge/subsonic/dao/PlayerDaoTestCase.java165
-rw-r--r--subsonic-main/src/test/java/net/sourceforge/subsonic/dao/PodcastDaoTestCase.java214
-rw-r--r--subsonic-main/src/test/java/net/sourceforge/subsonic/dao/TranscodingDaoTestCase.java133
-rw-r--r--subsonic-main/src/test/java/net/sourceforge/subsonic/dao/UserDaoTestCase.java230
7 files changed, 977 insertions, 0 deletions
diff --git a/subsonic-main/src/test/java/net/sourceforge/subsonic/dao/DaoTestCaseBase.java b/subsonic-main/src/test/java/net/sourceforge/subsonic/dao/DaoTestCaseBase.java
new file mode 100644
index 00000000..8d3a7f88
--- /dev/null
+++ b/subsonic-main/src/test/java/net/sourceforge/subsonic/dao/DaoTestCaseBase.java
@@ -0,0 +1,83 @@
+package net.sourceforge.subsonic.dao;
+
+import junit.framework.TestCase;
+import net.sourceforge.subsonic.util.FileUtil;
+import org.springframework.jdbc.core.JdbcTemplate;
+
+import java.io.File;
+
+/**
+ * Superclass for all DAO test cases.
+ * Creates and configures the DAO's, and resets the test database.
+ *
+ * @author Sindre Mehus
+ */
+public abstract class DaoTestCaseBase extends TestCase {
+
+ /** Do not re-create database if it is less than one hour old. */
+ private static final long MAX_DB_AGE_MILLIS = 60L * 60 * 1000;
+
+ static {
+ deleteDatabase();
+ }
+
+ private DaoHelper daoHelper;
+ protected PlayerDao playerDao;
+ protected InternetRadioDao internetRadioDao;
+ protected RatingDao ratingDao;
+ protected MusicFolderDao musicFolderDao;
+ protected UserDao userDao;
+ protected TranscodingDao transcodingDao;
+ protected PodcastDao podcastDao;
+
+ protected DaoTestCaseBase() {
+ daoHelper = new DaoHelper();
+
+ playerDao = new PlayerDao();
+ internetRadioDao = new InternetRadioDao();
+ ratingDao = new RatingDao();
+ musicFolderDao = new MusicFolderDao();
+ userDao = new UserDao();
+ transcodingDao = new TranscodingDao();
+ podcastDao = new PodcastDao();
+
+ playerDao.setDaoHelper(daoHelper);
+ internetRadioDao.setDaoHelper(daoHelper);
+ ratingDao.setDaoHelper(daoHelper);
+ musicFolderDao.setDaoHelper(daoHelper);
+ userDao.setDaoHelper(daoHelper);
+ transcodingDao.setDaoHelper(daoHelper);
+ podcastDao.setDaoHelper(daoHelper);
+ }
+
+ @Override
+ protected void tearDown() throws Exception {
+ super.tearDown();
+ getJdbcTemplate().execute("shutdown");
+ }
+
+ protected JdbcTemplate getJdbcTemplate() {
+ return daoHelper.getJdbcTemplate();
+ }
+
+ private static void deleteDatabase() {
+ File subsonicHome = new File("/tmp/subsonic");
+ File dbHome = new File(subsonicHome, "db");
+ System.setProperty("subsonic.home", subsonicHome.getPath());
+
+ long now = System.currentTimeMillis();
+ if (now - dbHome.lastModified() > MAX_DB_AGE_MILLIS) {
+ System.out.println("Resetting test database: " + dbHome);
+ delete(dbHome);
+ }
+ }
+
+ private static void delete(File file) {
+ if (file.isDirectory()) {
+ for (File child : FileUtil.listFiles(file)) {
+ delete(child);
+ }
+ }
+ file.delete();
+ }
+}
diff --git a/subsonic-main/src/test/java/net/sourceforge/subsonic/dao/InternetRadioDaoTestCase.java b/subsonic-main/src/test/java/net/sourceforge/subsonic/dao/InternetRadioDaoTestCase.java
new file mode 100644
index 00000000..5e5c64e7
--- /dev/null
+++ b/subsonic-main/src/test/java/net/sourceforge/subsonic/dao/InternetRadioDaoTestCase.java
@@ -0,0 +1,67 @@
+package net.sourceforge.subsonic.dao;
+
+import java.util.Date;
+
+import net.sourceforge.subsonic.domain.InternetRadio;
+
+/**
+ * Unit test of {@link InternetRadioDao}.
+ *
+ * @author Sindre Mehus
+ */
+public class InternetRadioDaoTestCase extends DaoTestCaseBase {
+
+ protected void setUp() throws Exception {
+ getJdbcTemplate().execute("delete from internet_radio");
+ }
+
+ public void testCreateInternetRadio() {
+ InternetRadio radio = new InternetRadio("name", "streamUrl", "homePageUrl", true, new Date());
+ internetRadioDao.createInternetRadio(radio);
+
+ InternetRadio newRadio = internetRadioDao.getAllInternetRadios().get(0);
+ assertInternetRadioEquals(radio, newRadio);
+ }
+
+ public void testUpdateInternetRadio() {
+ InternetRadio radio = new InternetRadio("name", "streamUrl", "homePageUrl", true, new Date());
+ internetRadioDao.createInternetRadio(radio);
+ radio = internetRadioDao.getAllInternetRadios().get(0);
+
+ radio.setName("newName");
+ radio.setStreamUrl("newStreamUrl");
+ radio.setHomepageUrl("newHomePageUrl");
+ radio.setEnabled(false);
+ radio.setChanged(new Date(234234L));
+ internetRadioDao.updateInternetRadio(radio);
+
+ InternetRadio newRadio = internetRadioDao.getAllInternetRadios().get(0);
+ assertInternetRadioEquals(radio, newRadio);
+ }
+
+ public void testDeleteInternetRadio() {
+ assertEquals("Wrong number of radios.", 0, internetRadioDao.getAllInternetRadios().size());
+
+ internetRadioDao.createInternetRadio(new InternetRadio("name", "streamUrl", "homePageUrl", true, new Date()));
+ assertEquals("Wrong number of radios.", 1, internetRadioDao.getAllInternetRadios().size());
+
+ internetRadioDao.createInternetRadio(new InternetRadio("name", "streamUrl", "homePageUrl", true, new Date()));
+ assertEquals("Wrong number of radios.", 2, internetRadioDao.getAllInternetRadios().size());
+
+ internetRadioDao.deleteInternetRadio(internetRadioDao.getAllInternetRadios().get(0).getId());
+ assertEquals("Wrong number of radios.", 1, internetRadioDao.getAllInternetRadios().size());
+
+ internetRadioDao.deleteInternetRadio(internetRadioDao.getAllInternetRadios().get(0).getId());
+ assertEquals("Wrong number of radios.", 0, internetRadioDao.getAllInternetRadios().size());
+ }
+
+ private void assertInternetRadioEquals(InternetRadio expected, InternetRadio actual) {
+ assertEquals("Wrong name.", expected.getName(), actual.getName());
+ assertEquals("Wrong stream url.", expected.getStreamUrl(), actual.getStreamUrl());
+ assertEquals("Wrong home page url.", expected.getHomepageUrl(), actual.getHomepageUrl());
+ assertEquals("Wrong enabled state.", expected.isEnabled(), actual.isEnabled());
+ assertEquals("Wrong changed date.", expected.getChanged(), actual.getChanged());
+ }
+
+
+} \ No newline at end of file
diff --git a/subsonic-main/src/test/java/net/sourceforge/subsonic/dao/MusicFolderDaoTestCase.java b/subsonic-main/src/test/java/net/sourceforge/subsonic/dao/MusicFolderDaoTestCase.java
new file mode 100644
index 00000000..b65e8b17
--- /dev/null
+++ b/subsonic-main/src/test/java/net/sourceforge/subsonic/dao/MusicFolderDaoTestCase.java
@@ -0,0 +1,85 @@
+/*
+ This file is part of Subsonic.
+
+ Subsonic is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ Subsonic is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Subsonic. If not, see <http://www.gnu.org/licenses/>.
+
+ Copyright 2009 (C) Sindre Mehus
+ */
+package net.sourceforge.subsonic.dao;
+
+import java.io.File;
+import java.util.Date;
+
+import net.sourceforge.subsonic.domain.MusicFolder;
+
+/**
+ * Unit test of {@link MusicFolderDao}.
+ *
+ * @author Sindre Mehus
+ */
+public class MusicFolderDaoTestCase extends DaoTestCaseBase {
+
+ @Override
+ protected void setUp() throws Exception {
+ getJdbcTemplate().execute("delete from music_folder");
+ }
+
+ public void testCreateMusicFolder() {
+ MusicFolder musicFolder = new MusicFolder(new File("path"), "name", true, new Date());
+ musicFolderDao.createMusicFolder(musicFolder);
+
+ MusicFolder newMusicFolder = musicFolderDao.getAllMusicFolders().get(0);
+ assertMusicFolderEquals(musicFolder, newMusicFolder);
+ }
+
+ public void testUpdateMusicFolder() {
+ MusicFolder musicFolder = new MusicFolder(new File("path"), "name", true, new Date());
+ musicFolderDao.createMusicFolder(musicFolder);
+ musicFolder = musicFolderDao.getAllMusicFolders().get(0);
+
+ musicFolder.setPath(new File("newPath"));
+ musicFolder.setName("newName");
+ musicFolder.setEnabled(false);
+ musicFolder.setChanged(new Date(234234L));
+ musicFolderDao.updateMusicFolder(musicFolder);
+
+ MusicFolder newMusicFolder = musicFolderDao.getAllMusicFolders().get(0);
+ assertMusicFolderEquals(musicFolder, newMusicFolder);
+ }
+
+ public void testDeleteMusicFolder() {
+ assertEquals("Wrong number of music folders.", 0, musicFolderDao.getAllMusicFolders().size());
+
+ musicFolderDao.createMusicFolder(new MusicFolder(new File("path"), "name", true, new Date()));
+ assertEquals("Wrong number of music folders.", 1, musicFolderDao.getAllMusicFolders().size());
+
+ musicFolderDao.createMusicFolder(new MusicFolder(new File("path"), "name", true, new Date()));
+ assertEquals("Wrong number of music folders.", 2, musicFolderDao.getAllMusicFolders().size());
+
+ musicFolderDao.deleteMusicFolder(musicFolderDao.getAllMusicFolders().get(0).getId());
+ assertEquals("Wrong number of music folders.", 1, musicFolderDao.getAllMusicFolders().size());
+
+ musicFolderDao.deleteMusicFolder(musicFolderDao.getAllMusicFolders().get(0).getId());
+ assertEquals("Wrong number of music folders.", 0, musicFolderDao.getAllMusicFolders().size());
+ }
+
+ private void assertMusicFolderEquals(MusicFolder expected, MusicFolder actual) {
+ assertEquals("Wrong name.", expected.getName(), actual.getName());
+ assertEquals("Wrong path.", expected.getPath(), actual.getPath());
+ assertEquals("Wrong enabled state.", expected.isEnabled(), actual.isEnabled());
+ assertEquals("Wrong changed date.", expected.getChanged(), actual.getChanged());
+ }
+
+
+} \ No newline at end of file
diff --git a/subsonic-main/src/test/java/net/sourceforge/subsonic/dao/PlayerDaoTestCase.java b/subsonic-main/src/test/java/net/sourceforge/subsonic/dao/PlayerDaoTestCase.java
new file mode 100644
index 00000000..9bf949f5
--- /dev/null
+++ b/subsonic-main/src/test/java/net/sourceforge/subsonic/dao/PlayerDaoTestCase.java
@@ -0,0 +1,165 @@
+package net.sourceforge.subsonic.dao;
+
+import java.util.Date;
+import java.util.List;
+
+import net.sourceforge.subsonic.domain.CoverArtScheme;
+import net.sourceforge.subsonic.domain.Player;
+import net.sourceforge.subsonic.domain.PlayerTechnology;
+import net.sourceforge.subsonic.domain.PlayQueue;
+import net.sourceforge.subsonic.domain.TranscodeScheme;
+
+/**
+ * Unit test of {@link PlayerDao}.
+ *
+ * @author Sindre Mehus
+ */
+public class PlayerDaoTestCase extends DaoTestCaseBase {
+
+ @Override
+ protected void setUp() throws Exception {
+ getJdbcTemplate().execute("delete from player");
+ }
+
+ 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.setCoverArtScheme(CoverArtScheme.LARGE);
+ 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);
+ }
+
+ 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());
+ }
+
+ 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());
+ }
+
+ 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());
+ }
+
+ 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));
+ }
+
+ 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.setCoverArtScheme(CoverArtScheme.LARGE);
+ player.setTranscodeScheme(TranscodeScheme.MAX_160);
+
+ playerDao.updatePlayer(player);
+ Player newPlayer = playerDao.getAllPlayers().get(0);
+ assertPlayerEquals(player, newPlayer);
+ }
+
+ 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 cover art scheme.", expected.getCoverArtScheme(), actual.getCoverArtScheme());
+ assertEquals("Wrong transcode scheme.", expected.getTranscodeScheme(), actual.getTranscodeScheme());
+ }
+} \ No newline at end of file
diff --git a/subsonic-main/src/test/java/net/sourceforge/subsonic/dao/PodcastDaoTestCase.java b/subsonic-main/src/test/java/net/sourceforge/subsonic/dao/PodcastDaoTestCase.java
new file mode 100644
index 00000000..f5952c3e
--- /dev/null
+++ b/subsonic-main/src/test/java/net/sourceforge/subsonic/dao/PodcastDaoTestCase.java
@@ -0,0 +1,214 @@
+package net.sourceforge.subsonic.dao;
+
+import java.util.Date;
+import java.util.List;
+
+import net.sourceforge.subsonic.domain.PodcastChannel;
+import net.sourceforge.subsonic.domain.PodcastEpisode;
+import net.sourceforge.subsonic.domain.PodcastStatus;
+
+/**
+ * Unit test of {@link PodcastDao}.
+ *
+ * @author Sindre Mehus
+ */
+public class PodcastDaoTestCase extends DaoTestCaseBase {
+
+ @Override
+ protected void setUp() throws Exception {
+ getJdbcTemplate().execute("delete from podcast_channel");
+ }
+
+ public void testCreateChannel() {
+ PodcastChannel channel = new PodcastChannel("http://foo");
+ podcastDao.createChannel(channel);
+
+ PodcastChannel newChannel = podcastDao.getAllChannels().get(0);
+ assertNotNull("Wrong ID.", newChannel.getId());
+ assertChannelEquals(channel, newChannel);
+ }
+
+ public void testChannelId() {
+ int channelId = podcastDao.createChannel(new PodcastChannel("http://foo"));
+
+ assertEquals("Error in createChannel.", channelId + 1, podcastDao.createChannel(new PodcastChannel("http://foo")));
+ assertEquals("Error in createChannel.", channelId + 2, podcastDao.createChannel(new PodcastChannel("http://foo")));
+ assertEquals("Error in createChannel.", channelId + 3, podcastDao.createChannel(new PodcastChannel("http://foo")));
+
+ podcastDao.deleteChannel(channelId + 1);
+ assertEquals("Error in createChannel.", channelId + 4, podcastDao.createChannel(new PodcastChannel("http://foo")));
+
+ podcastDao.deleteChannel(channelId + 4);
+ assertEquals("Error in createChannel.", channelId + 5, podcastDao.createChannel(new PodcastChannel("http://foo")));
+ }
+
+ public void testUpdateChannel() {
+ PodcastChannel channel = new PodcastChannel("http://foo");
+ podcastDao.createChannel(channel);
+ channel = podcastDao.getAllChannels().get(0);
+
+ channel.setUrl("http://bar");
+ channel.setTitle("Title");
+ channel.setDescription("Description");
+ channel.setStatus(PodcastStatus.ERROR);
+ channel.setErrorMessage("Something went terribly wrong.");
+
+ podcastDao.updateChannel(channel);
+ PodcastChannel newChannel = podcastDao.getAllChannels().get(0);
+
+ assertEquals("Wrong ID.", channel.getId(), newChannel.getId());
+ assertChannelEquals(channel, newChannel);
+ }
+
+ public void testDeleteChannel() {
+ assertEquals("Wrong number of channels.", 0, podcastDao.getAllChannels().size());
+
+ PodcastChannel channel = new PodcastChannel("http://foo");
+ podcastDao.createChannel(channel);
+ assertEquals("Wrong number of channels.", 1, podcastDao.getAllChannels().size());
+
+ podcastDao.createChannel(channel);
+ assertEquals("Wrong number of channels.", 2, podcastDao.getAllChannels().size());
+
+ podcastDao.deleteChannel(podcastDao.getAllChannels().get(0).getId());
+ assertEquals("Wrong number of channels.", 1, podcastDao.getAllChannels().size());
+
+ podcastDao.deleteChannel(podcastDao.getAllChannels().get(0).getId());
+ assertEquals("Wrong number of channels.", 0, podcastDao.getAllChannels().size());
+ }
+
+ public void testCreateEpisode() {
+ int channelId = createChannel();
+ PodcastEpisode episode = new PodcastEpisode(null, channelId, "http://bar", "path", "title", "description",
+ new Date(), "12:34", null, null, PodcastStatus.NEW, null);
+ podcastDao.createEpisode(episode);
+
+ PodcastEpisode newEpisode = podcastDao.getEpisodes(channelId).get(0);
+ assertNotNull("Wrong ID.", newEpisode.getId());
+ assertEpisodeEquals(episode, newEpisode);
+ }
+
+ public void testGetEpisode() {
+ assertNull("Error in getEpisode()", podcastDao.getEpisode(23));
+
+ int channelId = createChannel();
+ PodcastEpisode episode = new PodcastEpisode(null, channelId, "http://bar", "path", "title", "description",
+ new Date(), "12:34", 3276213L, 2341234L, PodcastStatus.NEW, "error");
+ podcastDao.createEpisode(episode);
+
+ int episodeId = podcastDao.getEpisodes(channelId).get(0).getId();
+ PodcastEpisode newEpisode = podcastDao.getEpisode(episodeId);
+ assertEpisodeEquals(episode, newEpisode);
+ }
+
+ public void testGetEpisodes() {
+ int channelId = createChannel();
+ PodcastEpisode a = new PodcastEpisode(null, channelId, "a", null, null, null,
+ new Date(3000), null, null, null, PodcastStatus.NEW, null);
+ PodcastEpisode b = new PodcastEpisode(null, channelId, "b", null, null, null,
+ new Date(1000), null, null, null, PodcastStatus.NEW, "error");
+ PodcastEpisode c = new PodcastEpisode(null, channelId, "c", null, null, null,
+ new Date(2000), null, null, null, PodcastStatus.NEW, null);
+ PodcastEpisode d = new PodcastEpisode(null, channelId, "c", null, null, null,
+ null, null, null, null, PodcastStatus.NEW, "");
+ podcastDao.createEpisode(a);
+ podcastDao.createEpisode(b);
+ podcastDao.createEpisode(c);
+ podcastDao.createEpisode(d);
+
+ List<PodcastEpisode> episodes = podcastDao.getEpisodes(channelId);
+ assertEquals("Error in getEpisodes().", 4, episodes.size());
+ assertEpisodeEquals(a, episodes.get(0));
+ assertEpisodeEquals(c, episodes.get(1));
+ assertEpisodeEquals(b, episodes.get(2));
+ assertEpisodeEquals(d, episodes.get(3));
+ }
+
+
+ public void testUpdateEpisode() {
+ int channelId = createChannel();
+ PodcastEpisode episode = new PodcastEpisode(null, channelId, "http://bar", null, null, null,
+ null, null, null, null, PodcastStatus.NEW, null);
+ podcastDao.createEpisode(episode);
+ episode = podcastDao.getEpisodes(channelId).get(0);
+
+ episode.setUrl("http://bar");
+ episode.setPath("c:/tmp");
+ episode.setTitle("Title");
+ episode.setDescription("Description");
+ episode.setPublishDate(new Date());
+ episode.setDuration("1:20");
+ episode.setBytesTotal(87628374612L);
+ episode.setBytesDownloaded(9086L);
+ episode.setStatus(PodcastStatus.DOWNLOADING);
+ episode.setErrorMessage("Some error");
+
+ podcastDao.updateEpisode(episode);
+ PodcastEpisode newEpisode = podcastDao.getEpisodes(channelId).get(0);
+ assertEquals("Wrong ID.", episode.getId(), newEpisode.getId());
+ assertEpisodeEquals(episode, newEpisode);
+ }
+
+ public void testDeleteEpisode() {
+ int channelId = createChannel();
+
+ assertEquals("Wrong number of episodes.", 0, podcastDao.getEpisodes(channelId).size());
+
+ PodcastEpisode episode = new PodcastEpisode(null, channelId, "http://bar", null, null, null,
+ null, null, null, null, PodcastStatus.NEW, null);
+
+ podcastDao.createEpisode(episode);
+ assertEquals("Wrong number of episodes.", 1, podcastDao.getEpisodes(channelId).size());
+
+ podcastDao.createEpisode(episode);
+ assertEquals("Wrong number of episodes.", 2, podcastDao.getEpisodes(channelId).size());
+
+ podcastDao.deleteEpisode(podcastDao.getEpisodes(channelId).get(0).getId());
+ assertEquals("Wrong number of episodes.", 1, podcastDao.getEpisodes(channelId).size());
+
+ podcastDao.deleteEpisode(podcastDao.getEpisodes(channelId).get(0).getId());
+ assertEquals("Wrong number of episodes.", 0, podcastDao.getEpisodes(channelId).size());
+ }
+
+
+ public void testCascadingDelete() {
+ int channelId = createChannel();
+ PodcastEpisode episode = new PodcastEpisode(null, channelId, "http://bar", null, null, null,
+ null, null, null, null, PodcastStatus.NEW, null);
+ podcastDao.createEpisode(episode);
+ podcastDao.createEpisode(episode);
+ assertEquals("Wrong number of episodes.", 2, podcastDao.getEpisodes(channelId).size());
+
+ podcastDao.deleteChannel(channelId);
+ assertEquals("Wrong number of episodes.", 0, podcastDao.getEpisodes(channelId).size());
+ }
+
+ private int createChannel() {
+ PodcastChannel channel = new PodcastChannel("http://foo");
+ podcastDao.createChannel(channel);
+ channel = podcastDao.getAllChannels().get(0);
+ return channel.getId();
+ }
+
+ private void assertChannelEquals(PodcastChannel expected, PodcastChannel actual) {
+ assertEquals("Wrong URL.", expected.getUrl(), actual.getUrl());
+ assertEquals("Wrong title.", expected.getTitle(), actual.getTitle());
+ assertEquals("Wrong description.", expected.getDescription(), actual.getDescription());
+ assertSame("Wrong status.", expected.getStatus(), actual.getStatus());
+ assertEquals("Wrong error message.", expected.getErrorMessage(), actual.getErrorMessage());
+ }
+
+ private void assertEpisodeEquals(PodcastEpisode expected, PodcastEpisode actual) {
+ assertEquals("Wrong URL.", expected.getUrl(), actual.getUrl());
+ assertEquals("Wrong path.", expected.getPath(), actual.getPath());
+ assertEquals("Wrong title.", expected.getTitle(), actual.getTitle());
+ assertEquals("Wrong description.", expected.getDescription(), actual.getDescription());
+ assertEquals("Wrong date.", expected.getPublishDate(), actual.getPublishDate());
+ assertEquals("Wrong duration.", expected.getDuration(), actual.getDuration());
+ assertEquals("Wrong bytes total.", expected.getBytesTotal(), actual.getBytesTotal());
+ assertEquals("Wrong bytes downloaded.", expected.getBytesDownloaded(), actual.getBytesDownloaded());
+ assertSame("Wrong status.", expected.getStatus(), actual.getStatus());
+ assertEquals("Wrong error message.", expected.getErrorMessage(), actual.getErrorMessage());
+ }
+
+}
diff --git a/subsonic-main/src/test/java/net/sourceforge/subsonic/dao/TranscodingDaoTestCase.java b/subsonic-main/src/test/java/net/sourceforge/subsonic/dao/TranscodingDaoTestCase.java
new file mode 100644
index 00000000..9cf4441b
--- /dev/null
+++ b/subsonic-main/src/test/java/net/sourceforge/subsonic/dao/TranscodingDaoTestCase.java
@@ -0,0 +1,133 @@
+package net.sourceforge.subsonic.dao;
+
+import java.util.List;
+
+import net.sourceforge.subsonic.domain.Player;
+import net.sourceforge.subsonic.domain.Transcoding;
+
+/**
+ * Unit test of {@link TranscodingDao}.
+ *
+ * @author Sindre Mehus
+ */
+public class TranscodingDaoTestCase extends DaoTestCaseBase {
+
+ @Override
+ protected void setUp() throws Exception {
+ getJdbcTemplate().execute("delete from transcoding2");
+ }
+
+ public void testCreateTranscoding() {
+ Transcoding transcoding = new Transcoding(null, "name", "sourceFormats", "targetFormat", "step1", "step2", "step3", false);
+ transcodingDao.createTranscoding(transcoding);
+
+ Transcoding newTranscoding = transcodingDao.getAllTranscodings().get(0);
+ assertTranscodingEquals(transcoding, newTranscoding);
+ }
+
+ public void testUpdateTranscoding() {
+ Transcoding transcoding = new Transcoding(null, "name", "sourceFormats", "targetFormat", "step1", "step2", "step3", false);
+ transcodingDao.createTranscoding(transcoding);
+ transcoding = transcodingDao.getAllTranscodings().get(0);
+
+ transcoding.setName("newName");
+ transcoding.setSourceFormats("newSourceFormats");
+ transcoding.setTargetFormat("newTargetFormats");
+ transcoding.setStep1("newStep1");
+ transcoding.setStep2("newStep2");
+ transcoding.setStep3("newStep3");
+ transcoding.setDefaultActive(true);
+ transcodingDao.updateTranscoding(transcoding);
+
+ Transcoding newTranscoding = transcodingDao.getAllTranscodings().get(0);
+ assertTranscodingEquals(transcoding, newTranscoding);
+ }
+
+ public void testDeleteTranscoding() {
+ assertEquals("Wrong number of transcodings.", 0, transcodingDao.getAllTranscodings().size());
+
+ transcodingDao.createTranscoding(new Transcoding(null, "name", "sourceFormats", "targetFormat", "step1", "step2", "step3", true));
+ assertEquals("Wrong number of transcodings.", 1, transcodingDao.getAllTranscodings().size());
+
+ transcodingDao.createTranscoding(new Transcoding(null, "name", "sourceFormats", "targetFormat", "step1", "step2", "step3", true));
+ assertEquals("Wrong number of transcodings.", 2, transcodingDao.getAllTranscodings().size());
+
+ transcodingDao.deleteTranscoding(transcodingDao.getAllTranscodings().get(0).getId());
+ assertEquals("Wrong number of transcodings.", 1, transcodingDao.getAllTranscodings().size());
+
+ transcodingDao.deleteTranscoding(transcodingDao.getAllTranscodings().get(0).getId());
+ assertEquals("Wrong number of transcodings.", 0, transcodingDao.getAllTranscodings().size());
+ }
+
+ public void testPlayerTranscoding() {
+ Player player = new Player();
+ playerDao.createPlayer(player);
+
+ transcodingDao.createTranscoding(new Transcoding(null, "name", "sourceFormats", "targetFormat", "step1", "step2", "step3", false));
+ transcodingDao.createTranscoding(new Transcoding(null, "name", "sourceFormats", "targetFormat", "step1", "step2", "step3", false));
+ transcodingDao.createTranscoding(new Transcoding(null, "name", "sourceFormats", "targetFormat", "step1", "step2", "step3", false));
+ Transcoding transcodingA = transcodingDao.getAllTranscodings().get(0);
+ Transcoding transcodingB = transcodingDao.getAllTranscodings().get(1);
+ Transcoding transcodingC = transcodingDao.getAllTranscodings().get(2);
+
+ List<Transcoding> activeTranscodings = transcodingDao.getTranscodingsForPlayer(player.getId());
+ assertEquals("Wrong number of transcodings.", 0, activeTranscodings.size());
+
+ transcodingDao.setTranscodingsForPlayer(player.getId(), new int[]{transcodingA.getId()});
+ activeTranscodings = transcodingDao.getTranscodingsForPlayer(player.getId());
+ assertEquals("Wrong number of transcodings.", 1, activeTranscodings.size());
+ assertTranscodingEquals(transcodingA, activeTranscodings.get(0));
+
+ transcodingDao.setTranscodingsForPlayer(player.getId(), new int[]{transcodingB.getId(), transcodingC.getId()});
+ activeTranscodings = transcodingDao.getTranscodingsForPlayer(player.getId());
+ assertEquals("Wrong number of transcodings.", 2, activeTranscodings.size());
+ assertTranscodingEquals(transcodingB, activeTranscodings.get(0));
+ assertTranscodingEquals(transcodingC, activeTranscodings.get(1));
+
+ transcodingDao.setTranscodingsForPlayer(player.getId(), new int[0]);
+ activeTranscodings = transcodingDao.getTranscodingsForPlayer(player.getId());
+ assertEquals("Wrong number of transcodings.", 0, activeTranscodings.size());
+ }
+
+ public void testCascadingDeletePlayer() {
+ Player player = new Player();
+ playerDao.createPlayer(player);
+
+ transcodingDao.createTranscoding(new Transcoding(null, "name", "sourceFormats", "targetFormat", "step1", "step2", "step3", true));
+ Transcoding transcoding = transcodingDao.getAllTranscodings().get(0);
+
+ transcodingDao.setTranscodingsForPlayer(player.getId(), new int[]{transcoding.getId()});
+ List<Transcoding> activeTranscodings = transcodingDao.getTranscodingsForPlayer(player.getId());
+ assertEquals("Wrong number of transcodings.", 1, activeTranscodings.size());
+
+ playerDao.deletePlayer(player.getId());
+ activeTranscodings = transcodingDao.getTranscodingsForPlayer(player.getId());
+ assertEquals("Wrong number of transcodings.", 0, activeTranscodings.size());
+ }
+
+ public void testCascadingDeleteTranscoding() {
+ Player player = new Player();
+ playerDao.createPlayer(player);
+
+ transcodingDao.createTranscoding(new Transcoding(null, "name", "sourceFormats", "targetFormat", "step1", "step2", "step3", true));
+ Transcoding transcoding = transcodingDao.getAllTranscodings().get(0);
+
+ transcodingDao.setTranscodingsForPlayer(player.getId(), new int[]{transcoding.getId()});
+ List<Transcoding> activeTranscodings = transcodingDao.getTranscodingsForPlayer(player.getId());
+ assertEquals("Wrong number of transcodings.", 1, activeTranscodings.size());
+
+ transcodingDao.deleteTranscoding(transcoding.getId());
+ activeTranscodings = transcodingDao.getTranscodingsForPlayer(player.getId());
+ assertEquals("Wrong number of transcodings.", 0, activeTranscodings.size());
+ }
+
+ private void assertTranscodingEquals(Transcoding expected, Transcoding actual) {
+ assertEquals("Wrong name.", expected.getName(), actual.getName());
+ assertEquals("Wrong source formats.", expected.getSourceFormats(), actual.getSourceFormats());
+ assertEquals("Wrong target format.", expected.getTargetFormat(), actual.getTargetFormat());
+ assertEquals("Wrong step 1.", expected.getStep1(), actual.getStep1());
+ assertEquals("Wrong step 2.", expected.getStep2(), actual.getStep2());
+ assertEquals("Wrong step 3.", expected.getStep3(), actual.getStep3());
+ assertEquals("Wrong default active.", expected.isDefaultActive(), actual.isDefaultActive());
+ }
+}
diff --git a/subsonic-main/src/test/java/net/sourceforge/subsonic/dao/UserDaoTestCase.java b/subsonic-main/src/test/java/net/sourceforge/subsonic/dao/UserDaoTestCase.java
new file mode 100644
index 00000000..24dc9ec5
--- /dev/null
+++ b/subsonic-main/src/test/java/net/sourceforge/subsonic/dao/UserDaoTestCase.java
@@ -0,0 +1,230 @@
+package net.sourceforge.subsonic.dao;
+
+import java.util.Date;
+import java.util.Locale;
+
+import org.springframework.dao.DataIntegrityViolationException;
+import org.springframework.jdbc.core.JdbcTemplate;
+
+import net.sourceforge.subsonic.domain.AvatarScheme;
+import net.sourceforge.subsonic.domain.TranscodeScheme;
+import net.sourceforge.subsonic.domain.User;
+import net.sourceforge.subsonic.domain.UserSettings;
+
+/**
+ * Unit test of {@link UserDao}.
+ *
+ * @author Sindre Mehus
+ */
+public class UserDaoTestCase extends DaoTestCaseBase {
+
+ @Override
+ protected void setUp() throws Exception {
+ JdbcTemplate template = getJdbcTemplate();
+ template.execute("delete from user_role");
+ template.execute("delete from user");
+ }
+
+ public void testCreateUser() {
+ User user = new User("sindre", "secret", "sindre@activeobjects.no", false, 1000L, 2000L, 3000L);
+ user.setAdminRole(true);
+ user.setCommentRole(true);
+ user.setCoverArtRole(true);
+ user.setDownloadRole(false);
+ user.setPlaylistRole(true);
+ user.setUploadRole(false);
+ user.setPodcastRole(true);
+ user.setStreamRole(true);
+ user.setJukeboxRole(true);
+ user.setSettingsRole(true);
+ userDao.createUser(user);
+
+ User newUser = userDao.getAllUsers().get(0);
+ assertUserEquals(user, newUser);
+ }
+
+ public void testUpdateUser() {
+ User user = new User("sindre", "secret", null);
+ user.setAdminRole(true);
+ user.setCommentRole(true);
+ user.setCoverArtRole(true);
+ user.setDownloadRole(false);
+ user.setPlaylistRole(true);
+ user.setUploadRole(false);
+ user.setPodcastRole(true);
+ user.setStreamRole(true);
+ user.setJukeboxRole(true);
+ user.setSettingsRole(true);
+ userDao.createUser(user);
+
+ user.setPassword("foo");
+ user.setEmail("sindre@foo.bar");
+ user.setLdapAuthenticated(true);
+ user.setBytesStreamed(1);
+ user.setBytesDownloaded(2);
+ user.setBytesUploaded(3);
+ user.setAdminRole(false);
+ user.setCommentRole(false);
+ user.setCoverArtRole(false);
+ user.setDownloadRole(true);
+ user.setPlaylistRole(false);
+ user.setUploadRole(true);
+ user.setPodcastRole(false);
+ user.setStreamRole(false);
+ user.setJukeboxRole(false);
+ user.setSettingsRole(false);
+ userDao.updateUser(user);
+
+ User newUser = userDao.getAllUsers().get(0);
+ assertUserEquals(user, newUser);
+ assertEquals("Wrong bytes streamed.", 1, newUser.getBytesStreamed());
+ assertEquals("Wrong bytes downloaded.", 2, newUser.getBytesDownloaded());
+ assertEquals("Wrong bytes uploaded.", 3, newUser.getBytesUploaded());
+ }
+
+ public void testGetUserByName() {
+ User user = new User("sindre", "secret", null);
+ userDao.createUser(user);
+
+ User newUser = userDao.getUserByName("sindre");
+ assertNotNull("Error in getUserByName().", newUser);
+ assertUserEquals(user, newUser);
+
+ assertNull("Error in getUserByName().", userDao.getUserByName("sindre2"));
+ assertNull("Error in getUserByName().", userDao.getUserByName("sindre "));
+ assertNull("Error in getUserByName().", userDao.getUserByName("bente"));
+ assertNull("Error in getUserByName().", userDao.getUserByName(""));
+ assertNull("Error in getUserByName().", userDao.getUserByName(null));
+ }
+
+ public void testDeleteUser() {
+ assertEquals("Wrong number of users.", 0, userDao.getAllUsers().size());
+
+ userDao.createUser(new User("sindre", "secret", null));
+ assertEquals("Wrong number of users.", 1, userDao.getAllUsers().size());
+
+ userDao.createUser(new User("bente", "secret", null));
+ assertEquals("Wrong number of users.", 2, userDao.getAllUsers().size());
+
+ userDao.deleteUser("sindre");
+ assertEquals("Wrong number of users.", 1, userDao.getAllUsers().size());
+
+ userDao.deleteUser("bente");
+ assertEquals("Wrong number of users.", 0, userDao.getAllUsers().size());
+ }
+
+ public void testGetRolesForUser() {
+ User user = new User("sindre", "secret", null);
+ user.setAdminRole(true);
+ user.setCommentRole(true);
+ user.setPodcastRole(true);
+ user.setStreamRole(true);
+ user.setSettingsRole(true);
+ userDao.createUser(user);
+
+ String[] roles = userDao.getRolesForUser("sindre");
+ assertEquals("Wrong number of roles.", 5, roles.length);
+ assertEquals("Wrong role.", "admin", roles[0]);
+ assertEquals("Wrong role.", "comment", roles[1]);
+ assertEquals("Wrong role.", "podcast", roles[2]);
+ assertEquals("Wrong role.", "stream", roles[3]);
+ assertEquals("Wrong role.", "settings", roles[4]);
+ }
+
+ public void testUserSettings() {
+ assertNull("Error in getUserSettings.", userDao.getUserSettings("sindre"));
+
+ try {
+ userDao.updateUserSettings(new UserSettings("sindre"));
+ fail("Expected DataIntegrityViolationException.");
+ } catch (DataIntegrityViolationException x) {
+ }
+
+ userDao.createUser(new User("sindre", "secret", null));
+ assertNull("Error in getUserSettings.", userDao.getUserSettings("sindre"));
+
+ userDao.updateUserSettings(new UserSettings("sindre"));
+ UserSettings userSettings = userDao.getUserSettings("sindre");
+ assertNotNull("Error in getUserSettings().", userSettings);
+ assertNull("Error in getUserSettings().", userSettings.getLocale());
+ assertNull("Error in getUserSettings().", userSettings.getThemeId());
+ assertFalse("Error in getUserSettings().", userSettings.isFinalVersionNotificationEnabled());
+ assertFalse("Error in getUserSettings().", userSettings.isBetaVersionNotificationEnabled());
+ assertFalse("Error in getUserSettings().", userSettings.isLastFmEnabled());
+ assertNull("Error in getUserSettings().", userSettings.getLastFmUsername());
+ assertNull("Error in getUserSettings().", userSettings.getLastFmPassword());
+ assertSame("Error in getUserSettings().", TranscodeScheme.OFF, userSettings.getTranscodeScheme());
+ assertFalse("Error in getUserSettings().", userSettings.isShowNowPlayingEnabled());
+ assertEquals("Error in getUserSettings().", -1, userSettings.getSelectedMusicFolderId());
+ assertFalse("Error in getUserSettings().", userSettings.isPartyModeEnabled());
+ assertFalse("Error in getUserSettings().", userSettings.isNowPlayingAllowed());
+ assertSame("Error in getUserSettings().", AvatarScheme.NONE, userSettings.getAvatarScheme());
+ assertNull("Error in getUserSettings().", userSettings.getSystemAvatarId());
+
+ UserSettings settings = new UserSettings("sindre");
+ settings.setLocale(Locale.SIMPLIFIED_CHINESE);
+ settings.setThemeId("midnight");
+ settings.setBetaVersionNotificationEnabled(true);
+ settings.getMainVisibility().setCaptionCutoff(42);
+ settings.getMainVisibility().setBitRateVisible(true);
+ settings.getPlaylistVisibility().setCaptionCutoff(44);
+ settings.getPlaylistVisibility().setYearVisible(true);
+ settings.setLastFmEnabled(true);
+ settings.setLastFmUsername("last_user");
+ settings.setLastFmPassword("last_pass");
+ settings.setTranscodeScheme(TranscodeScheme.MAX_192);
+ settings.setShowNowPlayingEnabled(false);
+ settings.setSelectedMusicFolderId(3);
+ settings.setPartyModeEnabled(true);
+ settings.setNowPlayingAllowed(true);
+ settings.setAvatarScheme(AvatarScheme.SYSTEM);
+ settings.setSystemAvatarId(1);
+ settings.setChanged(new Date(9412L));
+
+ userDao.updateUserSettings(settings);
+ userSettings = userDao.getUserSettings("sindre");
+ assertNotNull("Error in getUserSettings().", userSettings);
+ assertEquals("Error in getUserSettings().", Locale.SIMPLIFIED_CHINESE, userSettings.getLocale());
+ assertEquals("Error in getUserSettings().", false, userSettings.isFinalVersionNotificationEnabled());
+ assertEquals("Error in getUserSettings().", true, userSettings.isBetaVersionNotificationEnabled());
+ assertEquals("Error in getUserSettings().", "midnight", userSettings.getThemeId());
+ assertEquals("Error in getUserSettings().", 42, userSettings.getMainVisibility().getCaptionCutoff());
+ assertEquals("Error in getUserSettings().", true, userSettings.getMainVisibility().isBitRateVisible());
+ assertEquals("Error in getUserSettings().", 44, userSettings.getPlaylistVisibility().getCaptionCutoff());
+ assertEquals("Error in getUserSettings().", true, userSettings.getPlaylistVisibility().isYearVisible());
+ assertEquals("Error in getUserSettings().", true, userSettings.isLastFmEnabled());
+ assertEquals("Error in getUserSettings().", "last_user", userSettings.getLastFmUsername());
+ assertEquals("Error in getUserSettings().", "last_pass", userSettings.getLastFmPassword());
+ assertSame("Error in getUserSettings().", TranscodeScheme.MAX_192, userSettings.getTranscodeScheme());
+ assertFalse("Error in getUserSettings().", userSettings.isShowNowPlayingEnabled());
+ assertEquals("Error in getUserSettings().", 3, userSettings.getSelectedMusicFolderId());
+ assertTrue("Error in getUserSettings().", userSettings.isPartyModeEnabled());
+ assertTrue("Error in getUserSettings().", userSettings.isNowPlayingAllowed());
+ assertSame("Error in getUserSettings().", AvatarScheme.SYSTEM, userSettings.getAvatarScheme());
+ assertEquals("Error in getUserSettings().", 1, userSettings.getSystemAvatarId().intValue());
+ assertEquals("Error in getUserSettings().", new Date(9412L), userSettings.getChanged());
+
+ userDao.deleteUser("sindre");
+ assertNull("Error in cascading delete.", userDao.getUserSettings("sindre"));
+ }
+
+ private void assertUserEquals(User expected, User actual) {
+ assertEquals("Wrong name.", expected.getUsername(), actual.getUsername());
+ assertEquals("Wrong password.", expected.getPassword(), actual.getPassword());
+ assertEquals("Wrong email.", expected.getEmail(), actual.getEmail());
+ assertEquals("Wrong LDAP auth.", expected.isLdapAuthenticated(), actual.isLdapAuthenticated());
+ assertEquals("Wrong bytes streamed.", expected.getBytesStreamed(), actual.getBytesStreamed());
+ assertEquals("Wrong bytes downloaded.", expected.getBytesDownloaded(), actual.getBytesDownloaded());
+ assertEquals("Wrong bytes uploaded.", expected.getBytesUploaded(), actual.getBytesUploaded());
+ assertEquals("Wrong admin role.", expected.isAdminRole(), actual.isAdminRole());
+ assertEquals("Wrong comment role.", expected.isCommentRole(), actual.isCommentRole());
+ assertEquals("Wrong cover art role.", expected.isCoverArtRole(), actual.isCoverArtRole());
+ assertEquals("Wrong download role.", expected.isDownloadRole(), actual.isDownloadRole());
+ assertEquals("Wrong playlist role.", expected.isPlaylistRole(), actual.isPlaylistRole());
+ assertEquals("Wrong upload role.", expected.isUploadRole(), actual.isUploadRole());
+ assertEquals("Wrong upload role.", expected.isUploadRole(), actual.isUploadRole());
+ assertEquals("Wrong stream role.", expected.isStreamRole(), actual.isStreamRole());
+ assertEquals("Wrong jukebox role.", expected.isJukeboxRole(), actual.isJukeboxRole());
+ assertEquals("Wrong settings role.", expected.isSettingsRole(), actual.isSettingsRole());
+ }
+} \ No newline at end of file