Package com.github.hakko.musiccabinet.dao.jdbc

Source Code of com.github.hakko.musiccabinet.dao.jdbc.JdbcMusicBrainzAlbumDaoTest

package com.github.hakko.musiccabinet.dao.jdbc;

import static com.github.hakko.musiccabinet.dao.util.PostgreSQLFunction.UPDATE_MB_ALBUM;
import static com.github.hakko.musiccabinet.service.MusicBrainzService.TYPE_ALBUM;
import static com.github.hakko.musiccabinet.service.MusicBrainzService.TYPE_EP;
import static com.github.hakko.musiccabinet.util.UnittestLibraryUtil.getFile;
import static com.github.hakko.musiccabinet.util.UnittestLibraryUtil.submitFile;
import static java.util.Arrays.asList;
import static junit.framework.Assert.assertEquals;
import static org.apache.commons.lang.StringUtils.reverse;

import java.util.Arrays;
import java.util.List;

import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

import com.github.hakko.musiccabinet.dao.util.PostgreSQLUtil;
import com.github.hakko.musiccabinet.domain.model.library.LastFmUser;
import com.github.hakko.musiccabinet.domain.model.music.Album;
import com.github.hakko.musiccabinet.domain.model.music.Artist;
import com.github.hakko.musiccabinet.domain.model.music.MBAlbum;
import com.github.hakko.musiccabinet.domain.model.music.MBRelease;
import com.github.hakko.musiccabinet.domain.model.music.Track;
import com.github.hakko.musiccabinet.exception.ApplicationException;
import com.github.hakko.musiccabinet.util.UnittestLibraryUtil;

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations={"classpath:applicationContext.xml"})
public class JdbcMusicBrainzAlbumDaoTest {
 
  @Autowired
  private JdbcMusicDao musicDao;

  @Autowired
  private JdbcMusicBrainzAlbumDao albumDao;
 
  @Autowired
  private JdbcLibraryAdditionDao additionDao;
 
  @Autowired
  private JdbcPlayCountDao playCountDao;
 
  @Autowired
  private JdbcLastFmDao lastFmDao;

  @Autowired
  private JdbcLibraryBrowserDao browserDao;

  private static final String ARTIST = "Cult of Luna",
  TITLE1 = "The Beyond", MBID1 = "236316f7-c919-3986-918b-25e135ba8000", TYPE1 = "Album",
  TITLE2 = "Bodies / Recluse", MBID2 = "5484925b-884c-31d8-9c3e-2ef3824e6a5f", TYPE2 = "EP",
  TITLE3 = "Eternal Kingdom";
  private static final short YEAR1 = 2003, YEAR2 = 2006, YEAR3 = 2008;
  private static final String UNKNOWN = "[unknown]";
  private static final String USER = "User";
 
  private Artist artist;
  private MBRelease album1, album2;
 
  @Before
  public void prepareTestData() throws ApplicationException {
    PostgreSQLUtil.loadFunction(albumDao, UPDATE_MB_ALBUM);

    additionDao.getJdbcTemplate().execute("truncate music.artist cascade");
    additionDao.getJdbcTemplate().execute("truncate library.file cascade");

    artist = new Artist(ARTIST);
    musicDao.setArtistId(artist);
   
    album1 = new MBRelease(MBID1, null, null, TITLE1, TYPE1, YEAR1, null);
    album2 = new MBRelease(MBID2, null, null, TITLE2, TYPE2, YEAR2, null);
    album1.setArtistId(artist.getId());
    album2.setArtistId(artist.getId());
    albumDao.createAlbums(Arrays.asList(album1, album2));
  }

  @Test
  public void createsAndRetrievesAlbums() {
    List<MBAlbum> albums = albumDao.getAlbums(artist.getId());
    assertEquals(2, albums.size());
    assertEquals(album1.getTitle(), albums.get(0).getTitle());
    assertEquals(album2.getTitle(), albums.get(1).getTitle());
  }
 
  @Test
  public void findsAlbumsMissingFromLibrary() {
    List<MBAlbum> albums = albumDao.getMissingAlbums(null, null, null, -1, 0);
   
    assertEquals(2, albums.size());
    assertEquals(album1.getTitle(), albums.get(0).getTitle());
    assertEquals(album2.getTitle(), albums.get(1).getTitle());
   
    submitFile(additionDao, getFile(artist.getName(), album1.getTitle(), album1.getTitle()));

    albums = albumDao.getMissingAlbums(null, null, null, -1, 0);
    assertEquals(1, albums.size());
    assertEquals(album2.getTitle(), albums.get(0).getTitle());

  }

  @Test
  public void findsAlbumsMissingFromLibraryWithNameFilter() {
    // create artist with searchable name in library
    submitFile(additionDao, getFile(artist.getName(), UNKNOWN, UNKNOWN));

    String partialName = ARTIST.substring(ARTIST.lastIndexOf(' ') + 1);
    List<MBAlbum> albums = albumDao.getMissingAlbums(partialName, null, null, -1, 0);
    assertEquals(2, albums.size());
   
    albums = albumDao.getMissingAlbums(reverse(ARTIST), null, null, -1, 0);
    assertEquals(0, albums.size());
  }

  @Test
  public void findsAlbumsMissingFromLibraryWithRecentlyPlayedFilter() {
    List<MBAlbum> albums = albumDao.getMissingAlbums(null, null, USER, 10, 0);
    assertEquals(0, albums.size());
   
    LastFmUser lastFmUser = new LastFmUser(USER);
    lastFmDao.createOrUpdateLastFmUser(lastFmUser);

    submitFile(additionDao, getFile(artist.getName(), UNKNOWN, UNKNOWN));
    Track track = browserDao.getTracks(browserDao.getRandomTrackIds(1)).get(0);
    playCountDao.addPlayCount(lastFmUser, track);
   
    albums = albumDao.getMissingAlbums(null, null, USER, 10, 0);
    assertEquals(2, albums.size());
  }
 
  @Test
  public void findsAlbumsMissingFromLibraryWithTypeFilter() {
    List<MBAlbum> albums = albumDao.getMissingAlbums(null, asList(TYPE_ALBUM), null, -1, 0);
    assertEquals(1, albums.size());
    assertEquals(TITLE1, albums.get(0).getTitle());

    albums = albumDao.getMissingAlbums(null, asList(TYPE_EP), null, -1, 0);
    assertEquals(1, albums.size());
    assertEquals(TITLE2, albums.get(0).getTitle());
   
    albums = albumDao.getMissingAlbums(null, asList(TYPE_EP, TYPE_ALBUM), null, -1, 0);
    assertEquals(2, albums.size());
    assertEquals(TITLE1, albums.get(0).getTitle());
    assertEquals(TITLE2, albums.get(1).getTitle());
  }
 
  @Test
  public void findsAlbumsMissingFromLibraryWithPagination() {
    List<MBAlbum> albums = albumDao.getMissingAlbums(null, null, null, -1, 1);

    assertEquals(1, albums.size());
  }

  @Test
  public void detectsPresentDiscography() {
    Assert.assertTrue(albumDao.hasDiscography());

    additionDao.getJdbcTemplate().execute("truncate music.artist cascade");

    Assert.assertFalse(albumDao.hasDiscography());
  }

  @Test
  public void musicBrainzReleasesAreReturnedInDiscography() {
    List<Album> albums = albumDao.getDiscography(artist.getId(), true, true);
   
    Assert.assertNotNull(albums);
    Assert.assertEquals(2, albums.size());
   
    Assert.assertEquals(YEAR1, albums.get(0).getYear());
    Assert.assertEquals(YEAR2, albums.get(1).getYear());
   
    Assert.assertEquals(TITLE1, albums.get(0).getName());
    Assert.assertEquals(TITLE2, albums.get(1).getName());

    Assert.assertEquals(-1, albums.get(0).getId());
    Assert.assertEquals(-1, albums.get(1).getId());

    Assert.assertTrue(albums.get(0).getTrackIds().isEmpty());
    Assert.assertTrue(albums.get(1).getTrackIds().isEmpty());
  }
 
  @Test
  public void mixesMusicBrainzReleasesAndLocalAlbumsIntoDiscography() {

    UnittestLibraryUtil.submitFile(additionDao, Arrays.asList(
        UnittestLibraryUtil.getFile(ARTIST, TITLE2, TITLE2, YEAR2),
        UnittestLibraryUtil.getFile(ARTIST, TITLE3, TITLE3, YEAR3)));
   
    List<Album> albums = albumDao.getDiscography(artist.getId(), true, false);

    Assert.assertNotNull(albums);
    Assert.assertEquals(3, albums.size());

    Assert.assertEquals(YEAR3, albums.get(0).getYear());
    Assert.assertEquals(YEAR2, albums.get(1).getYear());
    Assert.assertEquals(YEAR1, albums.get(2).getYear());
   
    Assert.assertEquals(TITLE3, albums.get(0).getName());
    Assert.assertEquals(TITLE2, albums.get(1).getName());
    Assert.assertEquals(TITLE1, albums.get(2).getName());

    Assert.assertFalse(-1 == albums.get(0).getId());
    Assert.assertFalse(-1 == albums.get(1).getId());
    Assert.assertTrue(-1 == albums.get(2).getId());

    Assert.assertTrue(albums.get(0).getTrackIds().isEmpty());
    Assert.assertTrue(albums.get(1).getTrackIds().isEmpty());
    Assert.assertTrue(albums.get(2).getTrackIds().isEmpty());
  }

}
TOP

Related Classes of com.github.hakko.musiccabinet.dao.jdbc.JdbcMusicBrainzAlbumDaoTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.