package com.pugh.sockso.web.action; import com.pugh.sockso.Constants; import com.pugh.sockso.Properties; import com.pugh.sockso.StringProperties; import com.pugh.sockso.music.Album; import com.pugh.sockso.music.Artist; import com.pugh.sockso.music.Genre; import com.pugh.sockso.music.Track; import com.pugh.sockso.tests.SocksoTestCase; import com.pugh.sockso.tests.TestLocale; import com.pugh.sockso.tests.TestUtils; import com.pugh.sockso.web.BadRequestException; import java.util.ArrayList; import java.util.Date; import java.util.List; import static junit.framework.Assert.assertTrue; public class DownloaderTest extends SocksoTestCase { public void testGetTrackZipPath() { final Properties p = new StringProperties(); final Downloader d = new Downloader(); d.setProperties( p ); final Artist artist = TestUtils.getArtist(); final Album album = TestUtils.getAlbum(artist); final Genre genre = TestUtils.getGenre(); final Track track = new Track.Builder() .artist( artist ) .album( album ) .genre( genre ) .id(3) .name("track") .number(4) .path("") .dateAdded(new Date()) .build(); final String path = d.getTrackZipPath( track ); assertTrue( path.contains(artist.getName()) ); assertTrue( path.contains(album.getName()) ); assertTrue( path.contains(track.getName()) ); assertTrue( path.contains("04") ); // tens should be padded } private Track getTrack( final String artistName ) { return getTrack( artistName, "album", "year" ); } private Track getTrack( final String artistName, final String albumName, final String albumYear ) { final Artist artist = new Artist.Builder() .id(1) .name(artistName) .build(); final Album album = new Album.Builder() .artist(artist) .id(1) .name(albumName) .year(albumYear) .build(); final Genre genre = new Genre( 1, "genre" ); return new Track.Builder() .artist( artist ) .album( album ) .genre( genre ) .id(1) .name("track") .number(1) .path("") .dateAdded(null) .build(); } public void testGettingTheFileNameWhenAllArtistsAreTheSame() { List<Track> tracks = new ArrayList<Track>(); tracks.add( getTrack("artist") ); tracks.add( getTrack("artist") ); Downloader d = new Downloader(); assertEquals( "artist-album.zip", d.getFileName(tracks) ); } public void testGettingFilenameWhenDifferentArtists() { List<Track> tracks = new ArrayList<Track>(); tracks.add( getTrack("artist1") ); tracks.add( getTrack("artist2") ); Downloader d = new Downloader(); assertEquals( "various_artists-album.zip", d.getFileName(tracks) ); } public void testGettingFilenameWhenDifferentAlbumsUsesMultipleAlbums() { List<Track> tracks = new ArrayList<Track>(); tracks.add( getTrack("artist","album1","year") ); tracks.add( getTrack("artist","album2","year") ); Downloader d = new Downloader(); assertEquals( "artist-various_albums.zip", d.getFileName(tracks) ); } public void testExceptionThrownWhenDownloadsAreDisabled() throws Exception { Downloader d = new Downloader(); Properties p = new StringProperties(); p.set( Constants.WWW_DOWNLOADS_DISABLE, Properties.YES ); boolean gotException = false; d.setProperties( p ); d.setLocale( new TestLocale() ); try { d.handleRequest(); } catch ( BadRequestException e ) { gotException = true; } assertTrue( gotException ); } }