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

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

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

import static com.github.hakko.musiccabinet.util.UnittestLibraryUtil.submitFile;
import static junit.framework.Assert.assertEquals;
import static junit.framework.Assert.assertNotNull;

import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

import junit.framework.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.LastFmDao;
import com.github.hakko.musiccabinet.dao.LibraryAdditionDao;
import com.github.hakko.musiccabinet.dao.LibraryBrowserDao;
import com.github.hakko.musiccabinet.domain.model.library.File;
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.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 JdbcPlayCountDaoTest {

  @Autowired
  private JdbcPlayCountDao dao;
 
  @Autowired
  private LastFmDao lastFmDao;
 
  @Autowired
  private LibraryAdditionDao additionDao;

  @Autowired
  private LibraryBrowserDao browserDao;

  private String username1, username2;
  private LastFmUser user1, user2;
  private Artist artist1, artist2;
  private Album album1, album2;
  private Track track1a, track1b, track2;

  private Comparator<Track> trackComparator = new Comparator<Track>() {
    @Override
    public int compare(Track t1, Track t2) {
      return t1.getName().compareTo(t2.getName());
    }
  };

  @Before
  public void prepareTestData() throws ApplicationException {
    dao.getJdbcTemplate().execute("truncate music.lastfmuser cascade");
    dao.getJdbcTemplate().execute("truncate library.file cascade");
    dao.getJdbcTemplate().execute("truncate music.artist cascade");
   
    user1 = new LastFmUser(username1 = "user1");
    user2 = new LastFmUser(username2 = "user2");
    lastFmDao.createOrUpdateLastFmUser(user1);
    lastFmDao.createOrUpdateLastFmUser(user2);

    File file1 = UnittestLibraryUtil.getFile("artist1", "album1", "title1");
    File file2 = UnittestLibraryUtil.getFile("artist1", "album1", "title2");
    File file3 = UnittestLibraryUtil.getFile("artist2", "album2", "title3");
    submitFile(additionDao, Arrays.asList(file1, file2, file3));
   
    List<Artist> artists = browserDao.getArtists();
    assertEquals(2, artists.size());
    artist1 = artists.get(0);
    artist2 = artists.get(1);
   
    List<Album> albums1 = browserDao.getAlbums(artist1.getId(), true);
    assertEquals(1, albums1.size());
    album1 = albums1.get(0);
    List<Album> albums2 = browserDao.getAlbums(artist2.getId(), true);
    assertEquals(1, albums2.size());
    album2 = albums2.get(0);

    List<Track> tracks1 = browserDao.getTracks(album1.getTrackIds());
    Collections.sort(tracks1, trackComparator);
    assertEquals(2, tracks1.size());
    track1a = tracks1.get(0);
    track1b = tracks1.get(1);
    List<Track> tracks2 = browserDao.getTracks(album2.getTrackIds());
    assertEquals(1, tracks2.size());
    track2 = tracks2.get(0);
  }
 
  @Test
  public void addsPlayCount() {
    dao.addPlayCount(user1, track1a);
   
    List<Integer> artists = dao.getRecentArtists(username1, 0, 10);
    List<Integer> albums = dao.getRecentAlbums(username1, 0, 10);
    List<Integer> tracks = dao.getRecentTracks(username1, 0, 10);
   
    assertNotNull(artists);
    assertNotNull(albums);
    assertNotNull(tracks);
   
    assertEquals(1, artists.size());
    assertEquals(1, albums.size());
    assertEquals(1, tracks.size());
   
    assertEquals(artist1.getId(), artists.get(0).intValue());
    assertEquals(album1.getId(), albums.get(0).intValue());
    assertEquals(track1a.getId(), tracks.get(0).intValue());
  }

  @Test
  public void playCountsAreUserSpecific() {
    dao.addPlayCount(user2, track1a);
   
    assertEquals(1, dao.getRecentArtists(username2, 0, 10).size());
    assertEquals(1, dao.getRecentAlbums(username2, 0, 10).size());
    assertEquals(1, dao.getRecentTracks(username2, 0, 10).size());

    assertEquals(0, dao.getRecentArtists(username1, 0, 10).size());
    assertEquals(0, dao.getRecentAlbums(username1, 0, 10).size());
    assertEquals(0, dao.getRecentTracks(username1, 0, 10).size());
  }
 
  @Test
  public void playCountsAreOrderedByTime() throws InterruptedException {
    dao.addPlayCount(user1, track1b);
    Thread.sleep(1);
    dao.addPlayCount(user1, track1a);
   
    List<Integer> tracks = dao.getRecentTracks(username1, 0, 10);
    assertEquals(track1a.getId(), tracks.get(0).intValue());
    assertEquals(track1b.getId(), tracks.get(1).intValue());
  }
 
  @Test
  public void samePlayCountIsOnlyReturnedOnce() {
    dao.addPlayCount(user2, track1a);
    dao.addPlayCount(user2, track1b);
    dao.addPlayCount(user2, track1b);
    dao.addPlayCount(user2, track1a);
   
    assertEquals(1, dao.getRecentArtists(username2, 0, 10).size());
    assertEquals(1, dao.getRecentAlbums(username2, 0, 10).size());
    assertEquals(2, dao.getRecentTracks(username2, 0, 10).size());
  }

  @Test
  public void resultsArePageable() throws InterruptedException {
    dao.addPlayCount(user1, track1b);
    Thread.sleep(1);
    dao.addPlayCount(user1, track2);
   
    assertEquals(2, dao.getRecentArtists(username1, 0, 2).size());
    assertEquals(2, dao.getRecentAlbums(username1, 0, 2).size());
    assertEquals(2, dao.getRecentTracks(username1, 0, 2).size());

    assertEquals(1, dao.getRecentArtists(username1, 0, 1).size());
    assertEquals(1, dao.getRecentAlbums(username1, 0, 1).size());
    assertEquals(1, dao.getRecentTracks(username1, 0, 1).size());

    assertEquals(1, dao.getRecentArtists(username1, 1, 1).size());
    assertEquals(1, dao.getRecentAlbums(username1, 1, 1).size());
    assertEquals(1, dao.getRecentTracks(username1, 1, 1).size());

    assertEquals(artist2.getId(), dao.getRecentArtists(username1, 0, 1).get(0).intValue());
    assertEquals(album2.getId(), dao.getRecentAlbums(username1, 0, 1).get(0).intValue());
    assertEquals(track2.getId(), dao.getRecentTracks(username1, 0, 1).get(0).intValue());

    assertEquals(artist1.getId(), dao.getRecentArtists(username1, 1, 1).get(0).intValue());
    assertEquals(album1.getId(), dao.getRecentAlbums(username1, 1, 1).get(0).intValue());
    assertEquals(track1b.getId(), dao.getRecentTracks(username1, 1, 1).get(0).intValue());
  }
 
  @Test
  public void returnsMostPlayedArtists() {
    Assert.assertEquals(0, dao.getMostPlayedArtists(username1, 0, 10).size());
   
    dao.addPlayCount(user1, track1a);

    Assert.assertEquals(0, dao.getMostPlayedArtists(username2, 0, 10).size());
    Assert.assertEquals(1, dao.getMostPlayedArtists(username1, 0, 10).size());
    Assert.assertEquals(artist1.getId(), dao.getMostPlayedArtists(username1, 0, 10).get(0).intValue());

    dao.addPlayCount(user1, track2);
    dao.addPlayCount(user1, track2);

    Assert.assertEquals(artist2.getId(), dao.getMostPlayedArtists(username1, 0, 10).get(0).intValue());
    Assert.assertEquals(artist1.getId(), dao.getMostPlayedArtists(username1, 1, 10).get(0).intValue());

    dao.addPlayCount(user1, track1b);
    dao.addPlayCount(user1, track1b);

    Assert.assertEquals(artist1.getId(), dao.getMostPlayedArtists(username1, 0, 10).get(0).intValue());
  }

  @Test
  public void returnsMostPlayedAlbums() {
    Assert.assertEquals(0, dao.getMostPlayedAlbums(username1, 0, 10).size());
   
    dao.addPlayCount(user1, track1a);

    Assert.assertEquals(0, dao.getMostPlayedAlbums(username2, 0, 10).size());
    Assert.assertEquals(1, dao.getMostPlayedAlbums(username1, 0, 10).size());
    Assert.assertEquals(album1.getId(), dao.getMostPlayedAlbums(username1, 0, 10).get(0).intValue());

    dao.addPlayCount(user1, track2);
    dao.addPlayCount(user1, track2);

    Assert.assertEquals(album2.getId(), dao.getMostPlayedAlbums(username1, 0, 10).get(0).intValue());
    Assert.assertEquals(album1.getId(), dao.getMostPlayedAlbums(username1, 1, 10).get(0).intValue());

    dao.addPlayCount(user1, track1b);
    dao.addPlayCount(user1, track1b);

    Assert.assertEquals(album1.getId(), dao.getMostPlayedAlbums(username1, 0, 10).get(0).intValue());
  }

  @Test
  public void returnsMostPlayedTracks() {
    Assert.assertEquals(0, dao.getMostPlayedTracks(username1, 0, 10).size());
   
    dao.addPlayCount(user1, track1a);

    Assert.assertEquals(0, dao.getMostPlayedTracks(username2, 0, 10).size());
    Assert.assertEquals(1, dao.getMostPlayedTracks(username1, 0, 10).size());
  }

}
TOP

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

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.