package com.pugh.sockso.web.action; import com.pugh.sockso.music.CoverArt; import com.pugh.sockso.tests.SocksoTestCase; import com.pugh.sockso.db.Database; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.PreparedStatement; import static org.easymock.EasyMock.*; public class AbstractCoverSearchTest extends SocksoTestCase { /** * empty implementation for testing * */ class MyCoverSearch extends AbstractCoverSearch { public MyCoverSearch( final Database db ) { super( db ); } public CoverArt getCover( final String name ) { return null; } } public void testGetCustomTypeFromAbbrev() { final MyCoverSearch s = new MyCoverSearch( null ); assertEquals( "album", s.getCustomTypeFromAbrev("al") ); assertEquals( "artist", s.getCustomTypeFromAbrev("ar") ); assertEquals( "playlist", s.getCustomTypeFromAbrev("pl") ); assertEquals( "track", s.getCustomTypeFromAbrev("tr") ); assertNull( s.getCustomTypeFromAbrev("BAD") ); } public void testGetMusicItemName() throws SQLException { final ResultSet rs = createMock( ResultSet.class ); expect( rs.next() ).andReturn( true ); expect( rs.getString("name") ).andReturn( "foo" ); rs.close(); replay( rs ); final PreparedStatement st = createMock( PreparedStatement.class ); st.setInt( 1, 123 ); 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 MyCoverSearch s = new MyCoverSearch( db ); final String name = s.getMusicItemName( "ar123" ); assertEquals( name, "foo" ); verify( db ); verify( st ); verify( rs ); } public void testGetMusicItemNameNoMatch() throws SQLException { final ResultSet rs = createMock( ResultSet.class ); expect( rs.next() ).andReturn( false ); rs.close(); replay( rs ); final PreparedStatement st = createMock( PreparedStatement.class ); st.setInt( 1, 345 ); 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 MyCoverSearch s = new MyCoverSearch( db ); final String name = s.getMusicItemName( "tr345" ); assertNull( name ); verify( db ); verify( st ); verify( rs ); } public void testGetMusicItemNameBadArgument() throws SQLException { final Database db = createMock( Database.class ); replay( db ); final MyCoverSearch s = new MyCoverSearch( db ); boolean gotException = false; try { s.getMusicItemName( "BAD NAME" ); } catch ( final NumberFormatException e ) { gotException = true; } assertTrue( gotException ); verify( db ); } public void testGetArtistName() throws SQLException { final int albumId = 123; final ResultSet rs = createMock( ResultSet.class ); expect( rs.next() ).andReturn( true ); expect( rs.getString("name") ).andReturn( "foo" ); rs.close(); replay( rs ); final PreparedStatement st = createMock( PreparedStatement.class ); st.setInt( 1, albumId ); 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 MyCoverSearch s = new MyCoverSearch( db ); final String name = s.getArtistName( albumId ); assertEquals( "foo", name ); verify( db ); verify( st ); verify( rs ); } public void testGetArtistNameNoMatch() throws SQLException { final int albumId = 123; final ResultSet rs = createMock( ResultSet.class ); expect( rs.next() ).andReturn( false ); rs.close(); replay( rs ); final PreparedStatement st = createMock( PreparedStatement.class ); st.setInt( 1, albumId ); 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 MyCoverSearch s = new MyCoverSearch( db ); final String name = s.getArtistName( albumId ); assertEquals( "", name ); verify( db ); verify( st ); verify( rs ); } public void testRemoveUseLessWords() { final MyCoverSearch s = new MyCoverSearch( null ); final String keywords = "name CD1 disc 2 CD 2"; assertEquals( "name", s.removeUselessWords(keywords) ); // check no sode effects assertEquals( "name CD1 disc 2 CD 2", keywords ); } }