package org.libresonic.player.dao; import org.junit.Before; import org.junit.Test; import org.libresonic.player.domain.AvatarScheme; import org.libresonic.player.domain.TranscodeScheme; import org.libresonic.player.domain.User; import org.libresonic.player.domain.UserSettings; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.dao.DataIntegrityViolationException; import java.util.Date; import java.util.Locale; import static org.junit.Assert.*; /** * Unit test of {@link UserDao}. * * @author Sindre Mehus */ public class UserDaoTestCase extends DaoTestCaseBean2 { @Autowired UserDao userDao; @Before public void setUp() throws Exception { getJdbcTemplate().execute("delete from user_role"); getJdbcTemplate().execute("delete from user"); } @Test 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); } @Test public void testCreateUserTransactionalError() { User user = new User ("muff1nman", "secret", "noemail") { @Override public boolean isPlaylistRole() { throw new RuntimeException(); } }; user.setAdminRole(true); int beforeSize = userDao.getAllUsers().size(); boolean caughtException = false; try { userDao.createUser(user); } catch (RuntimeException e) { caughtException = true; } assertTrue("It was expected for createUser to throw an exception", caughtException); assertEquals(beforeSize, userDao.getAllUsers().size()); } @Test 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()); } @Test public void testGetUserByName() { User user = new User("sindre", "secret", null); userDao.createUser(user); User newUser = userDao.getUserByName("sindre", true); assertNotNull("Error in getUserByName().", newUser); assertUserEquals(user, newUser); assertNull("Error in getUserByName().", userDao.getUserByName("sindre2", true)); assertNull("Error in getUserByName().", userDao.getUserByName("sindre ", true)); assertNull("Error in getUserByName().", userDao.getUserByName("bente", true)); assertNull("Error in getUserByName().", userDao.getUserByName("", true)); assertNull("Error in getUserByName().", userDao.getUserByName(null, true)); } @Test 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()); } @Test 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]); } @Test 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.isSongNotificationEnabled()); assertFalse("Error in getUserSettings().", userSettings.isShowSideBar()); 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()); assertEquals("Error in getUserSettings().", 0, userSettings.getListReloadDelay()); assertFalse("Error in getUserSettings().", userSettings.isKeyboardShortcutsEnabled()); assertEquals("Error in getUserSettings().", 0, userSettings.getPaginationSize()); UserSettings settings = new UserSettings("sindre"); settings.setLocale(Locale.SIMPLIFIED_CHINESE); settings.setThemeId("midnight"); settings.setBetaVersionNotificationEnabled(true); settings.setSongNotificationEnabled(false); settings.setShowSideBar(true); settings.getMainVisibility().setBitRateVisible(true); 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)); settings.setListReloadDelay(60); settings.setKeyboardShortcutsEnabled(true); settings.setPaginationSize(120); 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().", false, userSettings.isSongNotificationEnabled()); assertEquals("Error in getUserSettings().", true, userSettings.isShowSideBar()); assertEquals("Error in getUserSettings().", "midnight", userSettings.getThemeId()); assertEquals("Error in getUserSettings().", true, userSettings.getMainVisibility().isBitRateVisible()); 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()); assertEquals("Error in getUserSettings().", 60, userSettings.getListReloadDelay()); assertTrue("Error in getUserSettings().", userSettings.isKeyboardShortcutsEnabled()); assertEquals("Error in getUserSettings().", 120, userSettings.getPaginationSize()); 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()); } }