Package org.socialmusicdiscovery.server.plugins.mediaimport

Source Code of org.socialmusicdiscovery.server.plugins.mediaimport.AbstractTagImporterTest

/*
*  Copyright 2010-2011, Social Music Discovery project
*  All rights reserved.
*
*  Redistribution and use in source and binary forms, with or without
*  modification, are permitted provided that the following conditions are met:
*      * Redistributions of source code must retain the above copyright
*        notice, this list of conditions and the following disclaimer.
*      * Redistributions in binary form must reproduce the above copyright
*        notice, this list of conditions and the following disclaimer in the
*        documentation and/or other materials provided with the distribution.
*      * Neither the name of Social Music Discovery project nor the
*        names of its contributors may be used to endorse or promote products
*        derived from this software without specific prior written permission.
*
*  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
*  ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
*  WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
*  DISCLAIMED. IN NO EVENT SHALL SOCIAL MUSIC DISCOVERY PROJECT BE LIABLE FOR ANY
*  DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
*  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
*  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
*  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
*  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
*  SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/

package org.socialmusicdiscovery.server.plugins.mediaimport;

import com.google.inject.Inject;
import com.google.inject.name.Named;

import org.socialmusicdiscovery.server.api.mediaimport.InitializationFailedException;
import org.socialmusicdiscovery.server.api.mediaimport.ProcessingStatusCallback;
import org.socialmusicdiscovery.server.business.logic.config.MappedConfigurationContext;
import org.socialmusicdiscovery.server.business.logic.config.MemoryConfigurationManager;
import org.socialmusicdiscovery.server.business.model.GlobalIdentity;
import org.socialmusicdiscovery.server.business.model.config.ConfigurationParameter;
import org.socialmusicdiscovery.server.business.model.config.ConfigurationParameterEntity;
import org.socialmusicdiscovery.server.business.model.core.*;
import org.socialmusicdiscovery.server.business.repository.GlobalIdentityRepository;
import org.socialmusicdiscovery.server.business.repository.core.ArtistRepository;
import org.socialmusicdiscovery.server.business.repository.core.ReleaseRepository;
import org.socialmusicdiscovery.test.BaseTestCase;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;

import javax.validation.ConstraintViolationException;
import java.util.Arrays;
import java.util.Collection;
import java.util.HashSet;
import java.util.Set;

public class AbstractTagImporterTest extends BaseTestCase {
    @Inject
    ReleaseRepository releaseRepository;
    @Inject
    ArtistRepository artistRepository;
    @Inject
    GlobalIdentityRepository globalIdentityRepository;

    AbstractTagImporter tagImporter;

    @Inject
    @Named("default-value")
    MemoryConfigurationManager defaultValueConfigurationManager;

    @BeforeClass
    public void setUp() {
        tagImporter = new AbstractTagImporter() {
            @Override
            protected void executeImport(ProcessingStatusCallback progressHandler) {
                // Do nothing
            }

            @Override
            public String getId() {
                return "someid";
            }

            @Override
            protected ImageEntity getReleaseImage(TrackData data) {
                if (data.getFile().contains("Bodyguard")) {
                    ImageEntity defaultImage = new ImageEntity();
                    defaultImage.setProviderId("someimageid");
                    defaultImage.setProviderImageId("1234");
                    defaultImage.setType(Image.TYPE_COVER_FRONT);
                    defaultImage.setUri("http://example.org/image.png");
                    return defaultImage;
                } else {
                    return null;
                }
            }

        };
        String pluginConfigurationPath = "org.socialmusicdiscovery.server.plugins.mediaimport." + tagImporter.getId() + ".";

        Set<ConfigurationParameter> defaultConfiguration = new HashSet<ConfigurationParameter>();
        for (ConfigurationParameter parameter : tagImporter.getDefaultConfiguration()) {
            ConfigurationParameterEntity entity = new ConfigurationParameterEntity(parameter);
            if (!entity.getId().startsWith(pluginConfigurationPath)) {
                entity.setId(pluginConfigurationPath + entity.getId());
            }
            entity.setDefaultValue(true);
            defaultConfiguration.add(entity);
        }
        defaultValueConfigurationManager.setParametersForPath(pluginConfigurationPath, defaultConfiguration);
        tagImporter.setConfiguration(new MappedConfigurationContext(pluginConfigurationPath, defaultValueConfigurationManager));
        try {
      tagImporter.init(null);
    } catch (InitializationFailedException e) {
      // TODO Better exception handling
      //      This was added after the throw clause in ProcessingModule interface was added)
      e.printStackTrace();
    }
    }

    @BeforeMethod
    public void setUpMethod() {
        em.clear();
        try {
      tagImporter.init(null);
    } catch (InitializationFailedException e) {
      // TODO Better exception handling
      //      This was added after the throw clause in ProcessingModule interface was added)
      e.printStackTrace();
    }
    }

    @Test
    public void testImport() throws Exception {
        loadTestData("org.socialmusicdiscovery.server.business.model", "Empty Tables.xml");
        em.getTransaction().begin();
        try {
            TrackData trackData = new TrackData();
            trackData.setFile("/music/The Bodyguard/I Will Always Love you.flac");
            trackData.setFormat("flc");
            trackData.setSmdID("00000000000000000000000000000001-00000000-00000000");
            trackData.setUrl("file://" + trackData.getFile());
            trackData.setTags(Arrays.asList(
                    new TagData(TagData.ALBUM, "The Bodyguard (Original Soundtrack Album)"),
                    new TagData(TagData.MUSICBRAINZ_ALBUM_ID, "11cafb9e-5fbc-49c7-b920-4ff754e03e93"),
                    new TagData(TagData.DISCOGS_RELEASE_ID, "1794218"),
                    new TagData(TagData.TITLE, "I Will Always Love You"),
                    new TagData(TagData.MUSICBRAINZ_TRACK_ID, "86cf33ac-5b7b-401b-9188-608bb2752063"),
                    new TagData(TagData.YEAR, "1992"),
                    new TagData(TagData.TRACKNUM, "1"),
                    new TagData(TagData.ALBUMARTIST, "Whitney Houston"),
                    new TagData(TagData.MUSICBRAINZ_ALBUMARTIST_ID, "0307edfc-437c-4b48-8700-80680e66a228"),
                    new TagData(TagData.ARTIST, "Whitney Houston", "Houston, Whitney"),
                    new TagData(TagData.MUSICBRAINZ_ARTIST_ID, "0307edfc-437c-4b48-8700-80680e66a228"),
                    new TagData(TagData.GENRE, "Soundtrack"),
                    new TagData(TagData.CONDUCTOR, "Ricky Minor", "Minor, Ricky"),
                    new TagData(TagData.COMPOSER, "Dolly Parton", "Dolly, Parton"),
                    new TagData(TagData.SBS_COVER_ID, "1234")
            ));
            tagImporter.importNewPlayableElement(trackData);

            trackData = new TrackData();
            trackData.setFile("/music/The Bodyguard/Queen Of The Night.flac");
            trackData.setFormat("flc");
            trackData.setSmdID("00000000000000000000000000000005-00000000-00000000");
            trackData.setUrl("file://" + trackData.getFile());
            trackData.setTags(Arrays.asList(
                    new TagData(TagData.ALBUM, "The Bodyguard (Original Soundtrack Album)"),
                    new TagData(TagData.MUSICBRAINZ_ALBUM_ID, "11cafb9e-5fbc-49c7-b920-4ff754e03e93"),
                    new TagData(TagData.DISCOGS_RELEASE_ID, "1794218"),
                    new TagData(TagData.TITLE, "Queen Of The Night"),
                    new TagData(TagData.MUSICBRAINZ_TRACK_ID, "bdd8624a-d0ac-480f-8fe5-253bd99b7d3f"),
                    new TagData(TagData.YEAR, "1992"),
                    new TagData(TagData.TRACKNUM, "5"),
                    new TagData(TagData.ALBUMARTIST, "Whitney Houston"),
                    new TagData(TagData.MUSICBRAINZ_ALBUMARTIST_ID, "0307edfc-437c-4b48-8700-80680e66a228"),
                    new TagData(TagData.ARTIST, "Whitney Houston", "Houston, Whitney"),
                    new TagData(TagData.MUSICBRAINZ_ARTIST_ID, "0307edfc-437c-4b48-8700-80680e66a228"),
                    new TagData(TagData.GENRE, "Soundtrack"),
                    new TagData(TagData.COMPOSER, "Babyface"),
                    new TagData(TagData.COMPOSER, "Daryl Simmons"),
                    new TagData(TagData.COMPOSER, "L.A. Reid"),
                    new TagData(TagData.COMPOSER, "Whitney Houston"),
                    new TagData(TagData.SBS_COVER_ID, "1234")
            ));
            tagImporter.importNewPlayableElement(trackData);

            trackData = new TrackData();
            trackData.setFile("/music/The Bodyguard/It's Gonna Be A Lovely Day.flac");
            trackData.setFormat("flc");
            trackData.setSmdID("00000000000000000000000000000009-00000000-00000000");
            trackData.setUrl("file://" + trackData.getFile());
            trackData.setTags(Arrays.asList(
                    new TagData(TagData.ALBUM, "The Bodyguard (Original Soundtrack Album)"),
                    new TagData(TagData.MUSICBRAINZ_ALBUM_ID, "11cafb9e-5fbc-49c7-b920-4ff754e03e93"),
                    new TagData(TagData.DISCOGS_RELEASE_ID, "1794218"),
                    new TagData(TagData.TITLE, "It's Gonna Be A Lovely Day"),
                    new TagData(TagData.MUSICBRAINZ_TRACK_ID, "f2ba4ef6-7017-4b93-9176-c079ed0a97e9"),
                    new TagData(TagData.YEAR, "1992"),
                    new TagData(TagData.TRACKNUM, "9"),
                    new TagData(TagData.ALBUMARTIST, "Whitney Houston"),
                    new TagData(TagData.MUSICBRAINZ_ALBUMARTIST_ID, "0307edfc-437c-4b48-8700-80680e66a228"),
                    new TagData(TagData.ARTIST, "The S.O.U.L. S.Y.S.T.E.M.", "S.O.U.L. S.Y.S.T.E.M., The"),
                    new TagData(TagData.MUSICBRAINZ_ARTIST_ID, "95eeac68-0305-41b1-b4f6-ab6594ee21c6"),
                    new TagData(TagData.GENRE, "Soundtrack"),
                    new TagData(TagData.COMPOSER, "Bill Withers"),
                    new TagData(TagData.COMPOSER, "David Cole"),
                    new TagData(TagData.COMPOSER, "Robert Clivilles"),
                    new TagData(TagData.COMPOSER, "Skip Scarborough"),
                    new TagData(TagData.COMPOSER, "Tommy Never"),
                    new TagData(TagData.SBS_COVER_ID, "1234")
            ));
            tagImporter.importNewPlayableElement(trackData);

            trackData = new TrackData();
            trackData.setFile("/music/The Bodyguard/Theme From The Bodyguard");
            trackData.setFormat("flc");
            trackData.setSmdID("00000000000000000000000000000013-00000000-00000000");
            trackData.setUrl("file://" + trackData.getFile());
            trackData.setTags(Arrays.asList(
                    new TagData(TagData.ALBUM, "The Bodyguard (Original Soundtrack Album)"),
                    new TagData(TagData.MUSICBRAINZ_ALBUM_ID, "11cafb9e-5fbc-49c7-b920-4ff754e03e93"),
                    new TagData(TagData.DISCOGS_RELEASE_ID, "1794218"),
                    new TagData(TagData.TITLE, "Theme From The Bodyguard"),
                    new TagData(TagData.MUSICBRAINZ_TRACK_ID, "c3af5bb7-5711-495e-8fae-af8d730497cd"),
                    new TagData(TagData.YEAR, "1992"),
                    new TagData(TagData.TRACKNUM, "13"),
                    new TagData(TagData.ALBUMARTIST, "Whitney Houston"),
                    new TagData(TagData.MUSICBRAINZ_ALBUMARTIST_ID, "0307edfc-437c-4b48-8700-80680e66a228"),
                    new TagData(TagData.GENRE, "Soundtrack"),
                    new TagData(TagData.STYLE, "Instrumental"),
                    new TagData(TagData.COMPOSER, "Alan Silverstri"),
                    new TagData(TagData.CONDUCTOR, "William Ross"),
                    new TagData(TagData.PERFORMER, "Gary Grant"),
                    new TagData(TagData.SBS_COVER_ID, "1234")
            ));
            tagImporter.importNewPlayableElement(trackData);

            trackData = new TrackData();
            trackData.setFile("/music/Joe's Garage Act I/The Central Scrutinizer.flac");
            trackData.setFormat("flc");
            trackData.setSmdID("10000000000000000000000000000001-00000000-00000000");
            trackData.setUrl("file://" + trackData.getFile());
            trackData.setTags(Arrays.asList(
                    new TagData(TagData.ALBUM, "Joe's Garage Act I"),
                    new TagData(TagData.TITLE, "The Central Scrutinizer"),
                    new TagData(TagData.TRACKNUM, "1"),
                    new TagData(TagData.DISC, "A"),
                    new TagData(TagData.ARTIST, "Frank Zappa"),
                    new TagData(TagData.ARTIST, "Ike Willis")
            ));
            tagImporter.importNewPlayableElement(trackData);

            trackData = new TrackData();
            trackData.setFile("/music/Joe's Garage Act I/Joe's Garage.flac");
            trackData.setFormat("flc");
            trackData.setSmdID("10000000000000000000000000000002-00000000-00000000");
            trackData.setUrl("file://" + trackData.getFile());
            trackData.setTags(Arrays.asList(
                    new TagData(TagData.ALBUM, "Joe's Garage Act I"),
                    new TagData(TagData.TITLE, "Joe's Garage"),
                    new TagData(TagData.TRACKNUM, "2"),
                    new TagData(TagData.DISC, "A"),
                    new TagData(TagData.ARTIST, "Frank Zappa"),
                    new TagData(TagData.ARTIST, "Ike Willis")
            ));
            tagImporter.importNewPlayableElement(trackData);

            trackData = new TrackData();
            trackData.setFile("/music/Joe's Garage Act I/Wet T-Shirt Nite.flac");
            trackData.setFormat("flc");
            trackData.setSmdID("20000000000000000000000000000001-00000000-00000000");
            trackData.setUrl("file://" + trackData.getFile());
            trackData.setTags(Arrays.asList(
                    new TagData(TagData.ALBUM, "Joe's Garage Act I"),
                    new TagData(TagData.TITLE, "Wet T-Shirt Nite"),
                    new TagData(TagData.TRACKNUM, "1"),
                    new TagData(TagData.DISC, "B"),
                    new TagData(TagData.ARTIST, "Frank Zappa"),
                    new TagData(TagData.ARTIST, "Ike Willis")
            ));
            tagImporter.importNewPlayableElement(trackData);
            em.getTransaction().commit();
            updateSearchRelations();
            em.getTransaction().begin();
            em.clear();

            Collection<ReleaseEntity> releases = releaseRepository.findAll();
            assert releases != null;
            assert releases.size() == 2;

            for (ReleaseEntity release : releases) {
                if (release.getName().equals("Joe's Garage Act I")) {
                    validateJoesGarageAct(release);
                } else {
                    validateTheBodyguard(release);
                }
            }

            em.clear();
            Collection<ArtistEntity> artists = artistRepository.findAll();
            assert artists.size() > 0;
            for (ArtistEntity artist : artists) {
                Collection<ReleaseEntity> artistReleases = releaseRepository.findByArtistWithRelations(artist.getId(), null, null);
                assert artistReleases.size() > 0;
            }


        } finally {
            if (em.getTransaction().getRollbackOnly()) {
                em.getTransaction().rollback();
            } else {
                em.getTransaction().commit();
            }
        }
    }

    @Test
    public void testImportLongAlbumTitle() throws Exception {
        loadTestData("org.socialmusicdiscovery.server.business.model", "Empty Tables.xml");
        boolean gotError = false;
        boolean gotSuccess = false;
        em.getTransaction().begin();
        try {
            TrackData trackData = new TrackData();
            trackData.setFile("/music/Some Album/Some Title.flac");
            trackData.setFormat("flc");
            trackData.setSmdID("00000000000000000000000000000001-00000000-00000000");
            trackData.setUrl("file://" + trackData.getFile());
            String albumTitle = "";
            for (int i = 0; i < 255; i++) {
                albumTitle += "\u00d4";
            }
            trackData.setTags(Arrays.asList(
                    new TagData(TagData.ALBUM, albumTitle),
                    new TagData(TagData.TITLE, "Some Title"),
                    new TagData(TagData.ARTIST, "Some Artist"),
                    new TagData(TagData.GENRE, "Some Genre")
            ));
            tagImporter.importNewPlayableElement(trackData);
            gotSuccess = true;
            em.getTransaction().commit();
            em.getTransaction().begin();
            trackData.setSmdID("00000000000000000000000000000002-00000000-00000000");
            trackData.setTags(Arrays.asList(
                    new TagData(TagData.ALBUM, "a" + albumTitle),
                    new TagData(TagData.TITLE, "Some Title"),
                    new TagData(TagData.ARTIST, "Some Artist"),
                    new TagData(TagData.GENRE, "Some Genre")
            ));
            tagImporter.importNewPlayableElement(trackData);
            em.getTransaction().commit();
        } catch (ConstraintViolationException e) {
            gotError = true;
        } finally {
            if (em.getTransaction().isActive()) {
                em.getTransaction().rollback();
            }
        }
        assert gotSuccess;
        assert gotError;
    }

    @Test
    public void testImportLongTrackTitle() throws Exception {
        loadTestData("org.socialmusicdiscovery.server.business.model", "Empty Tables.xml");
        boolean gotError = false;
        boolean gotSuccess = false;
        em.getTransaction().begin();
        try {
            TrackData trackData = new TrackData();
            trackData.setFile("/music/Some Album/Some Title.flac");
            trackData.setFormat("flc");
            trackData.setSmdID("00000000000000000000000000000001-00000000-00000000");
            trackData.setUrl("file://" + trackData.getFile());
            String trackTitle = "";
            for (int i = 0; i < 511; i++) {
                trackTitle += "\u00d4";
            }
            trackData.setTags(Arrays.asList(
                    new TagData(TagData.ALBUM, "Some album"),
                    new TagData(TagData.TITLE, trackTitle),
                    new TagData(TagData.ARTIST, "Some Artist"),
                    new TagData(TagData.GENRE, "Some Genre")
            ));
            gotSuccess = true;
            em.getTransaction().commit();
            em.getTransaction().begin();
            tagImporter.importNewPlayableElement(trackData);
            trackData.setTags(Arrays.asList(
                    new TagData(TagData.ALBUM, "Some album"),
                    new TagData(TagData.TITLE, "a" + trackTitle),
                    new TagData(TagData.ARTIST, "Some Artist"),
                    new TagData(TagData.GENRE, "Some Genre")
            ));
            trackData.setSmdID("00000000000000000000000000000002-00000000-00000000");
            tagImporter.importNewPlayableElement(trackData);
            em.getTransaction().commit();
        } catch (ConstraintViolationException e) {
            gotError = true;
        } finally {
            if (em.getTransaction().isActive()) {
                em.getTransaction().rollback();
            }
        }
        assert gotSuccess;
        assert gotError;
    }

    @Test
    public void testImportLongArtistTitle() throws Exception {
        loadTestData("org.socialmusicdiscovery.server.business.model", "Empty Tables.xml");
        boolean gotError = false;
        boolean gotSuccess = false;
        em.getTransaction().begin();
        try {
            TrackData trackData = new TrackData();
            trackData.setFile("/music/Some Album/Some Title.flac");
            trackData.setFormat("flc");
            trackData.setSmdID("00000000000000000000000000000001-00000000-00000000");
            trackData.setUrl("file://" + trackData.getFile());
            String artistTitle = "";
            for (int i = 0; i < 255; i++) {
                artistTitle += "\u00d4";
            }
            trackData.setTags(Arrays.asList(
                    new TagData(TagData.ALBUM, "Some album"),
                    new TagData(TagData.TITLE, "Some title"),
                    new TagData(TagData.ARTIST, artistTitle),
                    new TagData(TagData.GENRE, "Some Genre")
            ));
            tagImporter.importNewPlayableElement(trackData);
            gotSuccess = true;
            em.getTransaction().commit();
            em.getTransaction().begin();
            trackData.setSmdID("00000000000000000000000000000002-00000000-00000000");
            trackData.setTags(Arrays.asList(
                    new TagData(TagData.ALBUM, "Some album"),
                    new TagData(TagData.TITLE, "Some title"),
                    new TagData(TagData.ARTIST, "a" + artistTitle),
                    new TagData(TagData.GENRE, "Some Genre")
            ));
            tagImporter.importNewPlayableElement(trackData);
            em.getTransaction().commit();
        } catch (ConstraintViolationException e) {
            gotError = true;
        } finally {
            if (em.getTransaction().isActive()) {
                em.getTransaction().rollback();
            }
        }
        assert gotSuccess;
        assert gotError;
    }

    @Test
    public void testImportLongGenreTitle() throws Exception {
        loadTestData("org.socialmusicdiscovery.server.business.model", "Empty Tables.xml");
        boolean gotError = false;
        boolean gotSuccess = false;
        em.getTransaction().begin();
        try {
            TrackData trackData = new TrackData();
            trackData.setFile("/music/Some Album/Some Title.flac");
            trackData.setFormat("flc");
            trackData.setSmdID("00000000000000000000000000000001-00000000-00000000");
            trackData.setUrl("file://" + trackData.getFile());
            String genreTitle = "";
            for (int i = 0; i < 255; i++) {
                genreTitle += "\u00d4";
            }
            trackData.setTags(Arrays.asList(
                    new TagData(TagData.ALBUM, "Some album"),
                    new TagData(TagData.TITLE, "Some title"),
                    new TagData(TagData.ARTIST, "Some artist"),
                    new TagData(TagData.GENRE, genreTitle)
            ));
            tagImporter.importNewPlayableElement(trackData);
            gotSuccess = true;
            em.getTransaction().commit();
            em.getTransaction().begin();
            trackData.setSmdID("00000000000000000000000000000002-00000000-00000000");
            trackData.setTags(Arrays.asList(
                    new TagData(TagData.ALBUM, "Some album"),
                    new TagData(TagData.TITLE, "Some title"),
                    new TagData(TagData.ARTIST, "Some artist"),
                    new TagData(TagData.GENRE, "a" + genreTitle)
            ));
            tagImporter.importNewPlayableElement(trackData);
            em.getTransaction().commit();
        } catch (ConstraintViolationException e) {
            gotError = true;
        } finally {
            if (em.getTransaction().isActive()) {
                em.getTransaction().rollback();
            }
        }
        assert gotSuccess;
        assert gotError;
    }

    @Test
    public void testImportLongFilePath() throws Exception {
        loadTestData("org.socialmusicdiscovery.server.business.model", "Empty Tables.xml");
        boolean gotError = false;
        boolean gotSuccess = false;
        em.getTransaction().begin();
        try {
            String file = "";
            for (int i = 0; i < 1024 - 5 - 7; i++) {
                file += "\u00d4";
            }
            TrackData trackData = new TrackData();
            trackData.setFile(file + ".flac");
            trackData.setFormat("flc");
            trackData.setSmdID("00000000000000000000000000000001-00000000-00000000");
            trackData.setUrl("file://" + trackData.getFile());
            trackData.setTags(Arrays.asList(
                    new TagData(TagData.ALBUM, "Some album"),
                    new TagData(TagData.TITLE, "Some title"),
                    new TagData(TagData.ARTIST, "Some artist"),
                    new TagData(TagData.GENRE, "Some Genre")
            ));
            tagImporter.importNewPlayableElement(trackData);
            gotSuccess = true;
            em.getTransaction().commit();
            em.getTransaction().begin();
            trackData.setFile(file + "a.flac");
            trackData.setSmdID("00000000000000000000000000000002-00000000-00000000");
            trackData.setUrl("file://" + trackData.getFile());
            tagImporter.importNewPlayableElement(trackData);
            em.getTransaction().commit();
        } catch (ConstraintViolationException e) {
            gotError = true;
        } finally {
            if (em.getTransaction().isActive()) {
                em.getTransaction().rollback();
            }
        }
        assert gotSuccess;
        assert gotError;
    }

    @Test
    public void testImportLongWorkTitle() throws Exception {
        loadTestData("org.socialmusicdiscovery.server.business.model", "Empty Tables.xml");
        boolean gotError = false;
        boolean gotSuccess = false;
        em.getTransaction().begin();
        try {
            TrackData trackData = new TrackData();
            trackData.setFile("/music/Some Album/Some Title.flac");
            trackData.setFormat("flc");
            trackData.setSmdID("00000000000000000000000000000001-00000000-00000000");
            trackData.setUrl("file://" + trackData.getFile());
            String workTitle = "";
            for (int i = 0; i < 511; i++) {
                workTitle += "\u00d4";
            }
            trackData.setTags(Arrays.asList(
                    new TagData(TagData.ALBUM, "Some album"),
                    new TagData(TagData.TITLE, "Some title"),
                    new TagData(TagData.WORK, workTitle),
                    new TagData(TagData.ARTIST, "Some Artist"),
                    new TagData(TagData.GENRE, "Some Genre")
            ));
            tagImporter.importNewPlayableElement(trackData);
            gotSuccess = true;
            em.getTransaction().commit();
            em.getTransaction().begin();
            trackData.setSmdID("00000000000000000000000000000002-00000000-00000000");
            trackData.setTags(Arrays.asList(
                    new TagData(TagData.ALBUM, "Some album"),
                    new TagData(TagData.TITLE, "Some title"),
                    new TagData(TagData.WORK, "a" + workTitle),
                    new TagData(TagData.ARTIST, "Some Artist"),
                    new TagData(TagData.GENRE, "Some Genre")
            ));
            tagImporter.importNewPlayableElement(trackData);
            em.getTransaction().commit();
        } catch (ConstraintViolationException e) {
            gotError = true;
        } finally {
            if (em.getTransaction().isActive()) {
                em.getTransaction().rollback();
            }
        }
        assert gotSuccess;
        assert gotError;
    }

    void validateJoesGarageAct(Release release) {
        assert release.getTracks() != null;
        assert release.getTracks().size() == 3;
        assert release.getMediums() != null;
        assert release.getMediums().size() == 2;
        assert release.getContributors().size() == 0;
        assert ((ReleaseEntity) release).getDefaultImage() == null;
        assert release.getTracks().size() == 3;
        for (Track track : release.getTracks()) {
            assert track.getRecording() != null;
            assert track.getRecording().getContributors().size() == 2;
            for (Contributor contributor : track.getRecording().getContributors()) {
                assert contributor.getArtist() != null;
                assert contributor.getType().equals(Contributor.PERFORMER);
            }
        }
    }

    void validateTheBodyguard(Release release) {
        assert release.getTracks() != null;
        assert release.getTracks().size() == 4;
        assert release.getContributors().size() == 1;
        assert ((ArtistEntity) release.getContributors().iterator().next().getArtist()).getSortAs().equals("Houston, Whitney");
        assert ((ReleaseEntity) release).getDefaultImage() != null;
        assert ((ReleaseEntity) release).getDefaultImage().getProviderId().equals("someimageid");
        assert ((ReleaseEntity) release).getDefaultImage().getProviderImageId().equals("1234");

        for (Track track : release.getTracks()) {
            assert track.getNumber() != null;
            assert track.getRecording() != null;
            assert track.getRecording().getWorks() != null;
            assert track.getRecording().getWorks().size() == 1;

            if (track.getNumber().equals(1)) {
                assert track.getRecording().getWorks().iterator().next().getName().equals("I Will Always Love You");
                assert track.getRecording().getContributors().size() == 1;
                assert ((ArtistEntity) track.getRecording().getContributors().iterator().next().getArtist()).getSortAs().equals("Minor, Ricky");
                assert track.getRecording().getWorks().iterator().next().getContributors().size() == 1;
            } else if (track.getNumber().equals(5)) {
                assert track.getRecording().getWorks().iterator().next().getName().equals("Queen Of The Night");
                assert track.getRecording().getContributors().size() == 0;
                assert track.getRecording().getWorks().iterator().next().getContributors().size() == 4;
            } else if (track.getNumber().equals(9)) {
                assert track.getRecording().getWorks().iterator().next().getName().equals("It's Gonna Be A Lovely Day");
                assert track.getRecording().getContributors().size() == 1;
                assert track.getRecording().getWorks().iterator().next().getContributors().size() == 5;
            } else if (track.getNumber().equals(13)) {
                assert track.getRecording().getWorks().iterator().next().getName().equals("Theme From The Bodyguard");
                assert track.getRecording().getContributors().size() == 2;
                assert track.getRecording().getWorks().iterator().next().getContributors().size() == 1;
            } else {
                assert false;
            }
        }

        GlobalIdentity identity = globalIdentityRepository.findBySourceAndEntity(GlobalIdentity.SOURCE_MUSICBRAINZ, release);
        assert identity != null;
        assert identity.getUri().equals("11cafb9e-5fbc-49c7-b920-4ff754e03e93");

        identity = globalIdentityRepository.findBySourceAndEntity(GlobalIdentity.SOURCE_DISCOGS, release);
        assert identity != null;
        assert identity.getUri().equals("1794218");

        identity = globalIdentityRepository.findBySourceAndEntity(GlobalIdentity.SOURCE_MUSICBRAINZ, release.getContributors().iterator().next().getArtist());
        assert identity != null;
        assert identity.getUri().equals("0307edfc-437c-4b48-8700-80680e66a228");

        for (Track track : release.getTracks()) {
            if (track.getNumber().equals(1)) {
                identity = globalIdentityRepository.findBySourceAndEntity(GlobalIdentity.SOURCE_MUSICBRAINZ, track);
                assert identity != null;
                assert identity.getUri().equals("86cf33ac-5b7b-401b-9188-608bb2752063");
            } else if (track.getNumber().equals(5)) {
                identity = globalIdentityRepository.findBySourceAndEntity(GlobalIdentity.SOURCE_MUSICBRAINZ, track);
                assert identity != null;
                assert identity.getUri().equals("bdd8624a-d0ac-480f-8fe5-253bd99b7d3f");
            } else if (track.getNumber().equals(9)) {
                identity = globalIdentityRepository.findBySourceAndEntity(GlobalIdentity.SOURCE_MUSICBRAINZ, track);
                assert identity != null;
                assert identity.getUri().equals("f2ba4ef6-7017-4b93-9176-c079ed0a97e9");
                identity = globalIdentityRepository.findBySourceAndEntity(GlobalIdentity.SOURCE_MUSICBRAINZ, track.getRecording().getContributors().iterator().next().getArtist());
                assert identity != null;
                assert identity.getUri().equals("95eeac68-0305-41b1-b4f6-ab6594ee21c6");
            } else if (track.getNumber().equals(13)) {
                identity = globalIdentityRepository.findBySourceAndEntity(GlobalIdentity.SOURCE_MUSICBRAINZ, track);
                assert identity != null;
                assert identity.getUri().equals("c3af5bb7-5711-495e-8fae-af8d730497cd");
            }
        }
    }
}
TOP

Related Classes of org.socialmusicdiscovery.server.plugins.mediaimport.AbstractTagImporterTest

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.