Package com.github.hakko.musiccabinet.service

Source Code of com.github.hakko.musiccabinet.service.MusicBrainzServiceTest

package com.github.hakko.musiccabinet.service;

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 org.apache.commons.lang.StringUtils.reverse;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;

import java.util.List;

import org.apache.http.client.HttpResponseException;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mockito;
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.jdbc.JdbcLibraryAdditionDao;
import com.github.hakko.musiccabinet.domain.model.music.MBAlbum;
import com.github.hakko.musiccabinet.exception.ApplicationException;
import com.github.hakko.musiccabinet.util.ResourceUtil;
import com.github.hakko.musiccabinet.ws.musicbrainz.ArtistQueryClient;
import com.github.hakko.musiccabinet.ws.musicbrainz.ReleaseClient;

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations={"classpath:applicationContext.xml"})
public class MusicBrainzServiceTest {

  @Autowired
  private MusicBrainzService service;

  @Autowired
  private JdbcLibraryAdditionDao additionDao;
 
  private String artistName = "Cult of Luna", albumName = "Eternal Kingdom",
      trackName = "Owlwood", mbid = "d347406f-839d-4423-9a28-188939282afa";
 
  @Before
  public void configureService() throws ApplicationException {
    service.setArtistQueryClient(getArtistQueryClient());
    service.setReleaseClient(getReleaseClient());
  }
 
  @Before
  public void prepareTestdata() {
    additionDao.getJdbcTemplate().execute("truncate music.artist cascade");
    additionDao.getJdbcTemplate().execute("truncate library.file cascade");

    submitFile(additionDao, getFile(artistName, albumName, trackName));
  }
 
  @Test
  public void updatesDiscography() {
    assertFalse(service.isIndexBeingCreated());
    service.updateDiscography();
   
    assertFalse(service.isIndexBeingCreated());
    Assert.assertEquals("1/1 artist ids, 1/1 artist discographies",
        service.getProgressDescription());
   
    List<MBAlbum> albums = service.getMissingAlbums(artistName, asList(TYPE_ALBUM), null, -1, 0);
    Assert.assertEquals(4, albums.size());
   
    assertEquals("Cult of Luna", albums.get(0).getTitle());
    assertEquals("The Beyond", albums.get(1).getTitle());
    assertEquals("Salvation", albums.get(2).getTitle());
    assertEquals("Somewhere Along the Highway", albums.get(3).getTitle());
    // Eternal Kingdom exists in library
  }
 
  @Test
  public void handlesArtistFailureDuringUpdate() throws ApplicationException {
    final String revName = reverse(artistName);
    submitFile(additionDao, getFile(revName, albumName, trackName));
   
    Mockito.when(service.artistQueryClient.get(revName)).thenThrow(
      new ApplicationException("Fail", new HttpResponseException(503, "Overloaded")));
   
    service.updateDiscography();
   
    List<MBAlbum> albums = service.getMissingAlbums(artistName, asList(TYPE_EP), null, -1, 0);
    Assert.assertEquals(2, albums.size());
    assertEquals("Switchblade / Cult of Luna", albums.get(0).getTitle());
    assertEquals("Bodies / Recluse", albums.get(1).getTitle());
  }
 
  private ArtistQueryClient getArtistQueryClient() throws ApplicationException {
    ArtistQueryClient client = Mockito.mock(ArtistQueryClient.class);
   
    Mockito.when(client.get(artistName)).thenReturn(
        new ResourceUtil("musicbrainz/xml/artistQuery.xml").getContent());
     
    return client;
  }

  private ReleaseClient getReleaseClient() throws ApplicationException {
    ReleaseClient client = Mockito.mock(ReleaseClient.class);
   
    Mockito.when(client.get(artistName, mbid, 0)).thenReturn(
        new ResourceUtil("musicbrainz/xml/release-col.xml").getContent());
   
    return client;
  }

}
TOP

Related Classes of com.github.hakko.musiccabinet.service.MusicBrainzServiceTest

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.