package com.pugh.sockso.gui.action; import com.pugh.sockso.StringProperties; import com.pugh.sockso.db.Database; import com.pugh.sockso.music.DBCollectionManager; import com.pugh.sockso.music.Track; import com.pugh.sockso.music.playlist.M3uFile; import com.pugh.sockso.tests.SocksoTestCase; import com.pugh.sockso.tests.TestDatabase; import com.pugh.sockso.tests.TestLocale; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.PreparedStatement; import java.io.File; import static org.easymock.EasyMock.*; public class ImportPlaylistTest extends SocksoTestCase { private ImportPlaylist ip; private TestDatabase db; @Override public void setUp() { db = new TestDatabase(); ip = new ImportPlaylist( null, db, new DBCollectionManager( db, new StringProperties(), null ), null, new TestLocale() ); } public void testGetPlaylistName() throws SQLException { final ResultSet rs = createMock( ResultSet.class ); expect( rs.next() ).andReturn( true ); expect( rs.getString("name") ).andReturn( "myPlaylist" ).times( 1 ); expect( rs.next() ).andReturn( true ); expect( rs.getString("name") ).andReturn( "myPlaylist (1)" ).times( 1 ); expect( rs.next() ).andReturn( false ); rs.close(); replay( rs ); final PreparedStatement st = createMock( PreparedStatement.class ); expect( st.executeQuery() ).andReturn( rs ).times( 1 ); st.close(); replay( st ); final Database db = createMock( Database.class ); expect( db.prepare((String)anyObject()) ).andReturn( st ).times( 1 ); replay( db ); final File playlistFile = new File( "myPlaylist.m3u" ); final ImportPlaylist ip = new ImportPlaylist( null, db, null, null, new TestLocale() ); assertEquals( "myPlaylist (2)", ip.getPlaylistName(playlistFile) ); verify( db ); verify( st ); verify( rs ); } public void testGettingTracksFromM3uFile() throws Exception { db.fixture( "playlistTracks" ); String track1 = "/home/user/music/01 - some track.mp3"; M3uFile playlist = new M3uFile( null ); playlist.loadLines(new String[] { track1, "/home/other/file.ogg" }); Track[] files = ip.getTracksFromPlaylist( playlist ); assertEquals( 1, files.length ); assertEquals( track1, files[0].getPath() ); } public void testGettingTracksFromM3uFileWithWindowsPaths() throws Exception { db.fixture( "playlistTracks" ); String track1 = "S:\\My Music\\James Hunter - All Through Cryin'.mp3"; M3uFile playlist = new M3uFile( new File("S:\\") ); playlist.loadLines(new String[] { track1, "/home/other/file.ogg" }); Track[] files = ip.getTracksFromPlaylist( playlist ); assertEquals( 1, files.length ); assertEquals( track1, files[0].getPath() ); } public void testGettingTracksFromExtM3uFile() throws Exception { db.fixture( "playlistTracks" ); String track1 = "/home/user/music/01 - some track.mp3"; M3uFile playlist = new M3uFile( null ); playlist.loadLines(new String[] { "#EXTM3U", "#EXTINF:320,Wyclef Jean - Something About Mary", track1 }); Track[] files = ip.getTracksFromPlaylist( playlist ); assertEquals( 1, files.length ); assertEquals( track1, files[0].getPath() ); } public void testImportingAPlaylistCreatesItWithAllMatchedTracks() throws Exception { db.fixture( "playlistTracks" ); ip.importPlaylist( new File("test/data/testImport.m3u"), "Some Name" ); assertTableSize( db, "playlists", 1 ); assertTableSize( db, "playlist_tracks", 4 ); } }