package com.pugh.sockso.web.action.covers; import com.pugh.sockso.Constants; import com.pugh.sockso.Properties; import com.pugh.sockso.StringProperties; import com.pugh.sockso.db.Database; import com.pugh.sockso.tests.SocksoTestCase; import java.io.File; import java.sql.PreparedStatement; import java.sql.ResultSet; import static org.easymock.EasyMock.*; public class LocalCovererTest extends SocksoTestCase { private LocalCoverer coverer; @Override protected void setUp() throws Exception { super.setUp(); coverer = new LocalCoverer(); } @Override protected void tearDown() throws Exception { coverer = null; } public void testGetLocalCoverFileName() { final Properties p = createNiceMock(Properties.class); expect(p.get((String) anyObject(), (String) anyObject())).andReturn("artist").times(1); expect(p.get((String) anyObject(), (String) anyObject())).andReturn("album").times(1); replay(p); coverer.setProperties(p); assertTrue(coverer.getLocalCoverFileName("ar123").equals("artist")); assertTrue(coverer.getLocalCoverFileName("al456").equals("album")); verify(p); } public void testIsArtist() { assertTrue(coverer.isArtist("ar123")); assertFalse(coverer.isArtist("al456")); assertFalse(coverer.isArtist("")); assertFalse(coverer.isArtist(null)); } public void testGetLocalCoverDirectories() throws Exception { final ResultSet rs = createMock(ResultSet.class); expect(rs.next()).andReturn(true).times(1); expect(rs.getString("path")).andReturn("something"); expect(rs.next()).andReturn(true).times(1); expect(rs.getString("path")).andReturn("something"); expect(rs.next()).andReturn(false).times(1); rs.close(); replay(rs); final PreparedStatement st = createMock(PreparedStatement.class); expect(st.executeQuery()).andReturn(rs); st.close(); replay(st); final Database db = createMock(Database.class); expect(db.prepare((String) anyObject())).andReturn(st); replay(db); coverer.setDatabase(db); final File[] dirs = coverer.getLocalCoverDirectories("ar123"); assertNotNull(coverer); assertEquals(1, dirs.length); assertTrue(dirs[0].getName().equals("something")); verify(db); verify(st); verify(rs); } public void testGetLocalCoverFilesAlbum() { coverer.setProperties(new StringProperties()); final String coverFileName = "album", folder = "/home/music/album", file = folder + "/track.mp3"; final File[] trackDirs = new File[]{ new File(file) }; final File[] files = coverer.getLocalCoverFiles(trackDirs, coverFileName, false); assertNotNull(files); assertEquals(3, files.length); assertEquals(new File(folder + "/album.jpg"), files[0]); } public void testGetLocalCoverFilesArtist() { coverer.setProperties(new StringProperties()); final String coverFileName = "artist", folder = "/home/music/album", file = folder + "/track.mp3"; final File[] trackDirs = new File[]{ new File(file) }; final File[] files = coverer.getLocalCoverFiles(trackDirs, coverFileName, true); assertNotNull(files); assertEquals(6, files.length); assertEquals(new File(folder + "/artist.jpg"), files[0]); assertEquals(new File("/home/music/artist.jpg"), files[3]); } public void testGetlocalCoverFilesFallbackAlbum() { coverer.setProperties(new StringProperties()); final String coverFileName = "album", folder = "test/data/covers/artist - album", file = folder + "/track.mp3"; final File[] trackDirs = new File[]{ new File(file) }; File[] files = coverer.getLocalCoverFiles(trackDirs, coverFileName, false); assertNotNull(files); assertEquals(3, files.length); assertEquals(new File(folder + "/album.jpg"), files[0]); // Fallback property set to NO should behave identically // as set to NULL coverer.getProperties().set(Constants.COVERS_FILE_FALLBACK, Properties.NO); files = coverer.getLocalCoverFiles(trackDirs, coverFileName, false); assertNotNull(files); assertEquals(3, files.length); assertEquals(new File(folder + "/album.jpg"), files[0]); coverer.getProperties().set(Constants.COVERS_FILE_FALLBACK, Properties.YES); files = coverer.getLocalCoverFiles(trackDirs, coverFileName, false); assertNotNull(files); assertEquals(4, files.length); assertEquals(new File(folder + "/album.jpg"), files[0]); assertEquals(new File(folder + "/fallback-file.png"), files[3]); } public void testGetLocalCoverFilesFallbackArtist() { coverer.setProperties(new StringProperties()); final String coverFileName = "artist", folder = "test/data/covers/artist - album", file = folder + "/track.mp3"; final File[] trackDirs = new File[]{ new File(file) }; File[] files = coverer.getLocalCoverFiles(trackDirs, coverFileName, true); assertNotNull(files); assertEquals(6, files.length); assertEquals(new File(folder + "/artist.jpg"), files[0]); assertEquals(new File("test/data/covers/artist.jpg"), files[3]); // Fallback property set to NO should behave identically // as set to NULL coverer.getProperties().set(Constants.COVERS_FILE_FALLBACK, Properties.NO); files = coverer.getLocalCoverFiles(trackDirs, coverFileName, true); assertNotNull(files); assertEquals(6, files.length); assertEquals(new File(folder + "/artist.jpg"), files[0]); assertEquals(new File("test/data/covers/artist.jpg"), files[3]); coverer.getProperties().set(Constants.COVERS_FILE_FALLBACK, Properties.YES); files = coverer.getLocalCoverFiles(trackDirs, coverFileName, true); assertNotNull(files); assertEquals(7, files.length); assertEquals(new File(folder + "/artist.jpg"), files[0]); assertEquals(new File("test/data/covers/artist.jpg"), files[3]); assertEquals(new File(folder + "/fallback-file.png"), files[6]); } }