File indexing completed on 2024-05-05 04:55:40

0001 /**
0002  * \file testmusicbrainzreleaseimportparser.cpp
0003  * Test parsing of import data from MusicBrainz server.
0004  *
0005  * \b Project: Kid3
0006  * \author Urs Fleisch
0007  * \date 07 Oct 2012
0008  *
0009  * Copyright (C) 2012-2018  Urs Fleisch
0010  *
0011  * This file is part of Kid3.
0012  *
0013  * Kid3 is free software; you can redistribute it and/or modify
0014  * it under the terms of the GNU General Public License as published by
0015  * the Free Software Foundation; either version 2 of the License, or
0016  * (at your option) any later version.
0017  *
0018  * Kid3 is distributed in the hope that it will be useful,
0019  * but WITHOUT ANY WARRANTY; without even the implied warranty of
0020  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
0021  * GNU General Public License for more details.
0022  *
0023  * You should have received a copy of the GNU General Public License
0024  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
0025  */
0026 
0027 #include "testmusicbrainzreleaseimportparser.h"
0028 #include <QTest>
0029 #include "serverimporter.h"
0030 #include "trackdatamodel.h"
0031 
0032 void TestMusicBrainzReleaseImportParser::initTestCase()
0033 {
0034   setServerImporter(QLatin1String("MusicBrainzImport"));
0035 }
0036 
0037 void TestMusicBrainzReleaseImportParser::testParseAlbums()
0038 {
0039   static const char searchStr[] =
0040     "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>"
0041     "<metadata xmlns=\"http://musicbrainz.org/ns/mmd-2.0#\" "
0042     "xmlns:ext=\"http://musicbrainz.org/ns/ext#-2.0\"><release-list "
0043     "offset=\"0\" count=\"3\"><release ext:score=\"100\" "
0044     "id=\"8c433fd2-9259-4c20-bfe5-58757df15b29\"><title>Odin</title>"
0045     "<status>Official</status><text-representation><language>eng</language>"
0046     "<script>Latn</script></text-representation><artist-credit>"
0047     "<name-credit><artist id=\"d1075cad-33e3-496b-91b0-d4670aabf4f8\">"
0048     "<name>Wizard</name><sort-name>Wizard</sort-name>"
0049     "<disambiguation>German power metal</disambiguation></artist></name-credit>"
0050     "</artist-credit><release-group type=\"Album\" "
0051     "id=\"a7f36fa7-33f8-315e-be1f-c26cd96d9548\">"
0052     "<primary-type>Album</primary-type></release-group><date>2003</date>"
0053     "<country>DE</country><barcode>693723003023</barcode><asin>B00009VGKI</asin>"
0054     "<label-info-list><label-info><catalog-number>LMP 0303-054</catalog-number>"
0055     "<label id=\"76beb709-a8f8-4ad5-828c-6ec8660a6935\">"
0056     "<name>Limb Music Products</name></label></label-info></label-info-list>"
0057     "<medium-list count=\"1\"><track-count>13</track-count><medium>"
0058     "<format>CD</format><disc-list count=\"0\"/><track-list count=\"13\"/>"
0059     "</medium></medium-list></release><release ext:score=\"100\" "
0060     "id=\"978c7ed1-a854-4ef2-bd4e-e7c1317be854\"><title>Odin</title>"
0061     "<status>Official</status><text-representation><language>eng</language>"
0062     "<script>Latn</script></text-representation><artist-credit>"
0063     "<name-credit><artist id=\"d1075cad-33e3-496b-91b0-d4670aabf4f8\">"
0064     "<name>Wizard</name><sort-name>Wizard</sort-name>"
0065     "<disambiguation>German power metal</disambiguation></artist></name-credit>"
0066     "</artist-credit><release-group type=\"Album\" "
0067     "id=\"a7f36fa7-33f8-315e-be1f-c26cd96d9548\">"
0068     "<primary-type>Album</primary-type></release-group><date>2003-08-19</date>"
0069     "<country>DE</country><barcode>693723654720</barcode><asin>B00008OUEN</asin>"
0070     "<label-info-list><label-info><catalog-number>LMP 0303-054 CD</catalog-number>"
0071     "<label id=\"76beb709-a8f8-4ad5-828c-6ec8660a6935\">"
0072     "<name>Limb Music Products</name></label></label-info></label-info-list>"
0073     "<medium-list count=\"1\"><track-count>11</track-count><medium>"
0074     "<format>CD</format><disc-list count=\"1\"/><track-list count=\"11\"/>"
0075     "</medium></medium-list></release><release ext:score=\"100\" "
0076     "id=\"7d57cc0b-70cd-4887-9399-e19e496fc8c4\"><title>Odin</title>"
0077     "<status>Official</status><text-representation><script>Latn</script>"
0078     "</text-representation><artist-credit><name-credit><artist "
0079     "id=\"d1075cad-33e3-496b-91b0-d4670aabf4f8\"><name>Wizard</name>"
0080     "<sort-name>Wizard</sort-name><disambiguation>German power metal"
0081     "</disambiguation></artist></name-credit></artist-credit>"
0082     "<release-group type=\"Album\" id=\"a7f36fa7-33f8-315e-be1f-c26cd96d9548\">"
0083     "<primary-type>Album</primary-type></release-group><medium-list count=\"1\">"
0084     "<track-count>12</track-count><medium><disc-list count=\"0\"/>"
0085     "<track-list count=\"12\"/></medium></medium-list></release></release-list>"
0086     "</metadata>";
0087   onFindFinished(searchStr);
0088   AlbumListModel* albumModel = m_importer->getAlbumListModel();
0089   QCOMPARE(albumModel->rowCount(), 3);
0090   QString text, category, id;
0091   albumModel->getItem(0, text, category, id);
0092   QCOMPARE(text, QString(QLatin1String("Wizard - Odin")));
0093   QCOMPARE(category, QString(QLatin1String("release")));
0094   QVERIFY(!id.isEmpty());
0095 }
0096 
0097 void TestMusicBrainzReleaseImportParser::testParseTracks()
0098 {
0099   static const char albumStr[] =
0100     "<?xml version=\"1.0\" encoding=\"UTF-8\"?><metadata "
0101     "xmlns=\"http://musicbrainz.org/ns/mmd-2.0#\"><release "
0102     "id=\"978c7ed1-a854-4ef2-bd4e-e7c1317be854\"><title>Odin</title>"
0103     "<status>Official</status><quality>normal</quality><text-representation>"
0104     "<language>eng</language><script>Latn</script></text-representation>"
0105     "<artist-credit><name-credit><artist "
0106     "id=\"d1075cad-33e3-496b-91b0-d4670aabf4f8\"><name>Wizard</name>"
0107     "<sort-name>Wizard</sort-name><disambiguation>German power metal"
0108     "</disambiguation></artist></name-credit></artist-credit>"
0109     "<date>2003-08-19</date><country>DE</country><barcode>693723654720</barcode>"
0110     "<asin>B00008OUEN</asin><label-info-list count=\"1\"><label-info>"
0111     "<catalog-number>LMP 0303-054 CD</catalog-number><label "
0112     "id=\"76beb709-a8f8-4ad5-828c-6ec8660a6935\">"
0113     "<name>Limb Music Products</name><sort-name>Limb Music Products</sort-name>"
0114     "<label-code>924</label-code></label></label-info></label-info-list>"
0115     "<medium-list count=\"1\"><medium><position>1</position>"
0116     "<track-list count=\"11\" offset=\"0\"><track><position>1</position>"
0117     "<number>1</number><length>319173</length><recording "
0118     "id=\"dac7c002-432f-4dcb-ad57-5ebde8e258b0\"><title>The Prophecy</title>"
0119     "<length>319173</length><artist-credit><name-credit><artist "
0120     "id=\"d1075cad-33e3-496b-91b0-d4670aabf4f8\"><name>Wizard</name>"
0121     "<sort-name>Wizard</sort-name><disambiguation>German power metal"
0122     "</disambiguation></artist></name-credit></artist-credit></recording>"
0123     "</track><track><position>2</position><number>2</number>"
0124     "<length>293186</length><recording "
0125     "id=\"3e326f9e-7132-49d8-acff-e9eafc09a073\"><title>Betrayer</title>"
0126     "<length>293186</length><artist-credit><name-credit><artist "
0127     "id=\"d1075cad-33e3-496b-91b0-d4670aabf4f8\"><name>Wizard</name>"
0128     "<sort-name>Wizard</sort-name><disambiguation>German power metal"
0129     "</disambiguation></artist></name-credit></artist-credit></recording>"
0130     "</track><track><position>3</position><number>3</number><length>362026"
0131     "</length><recording id=\"cbafa8e8-1639-4bdb-88d8-8d0db1c29fcc\">"
0132     "<title>Dead Hope</title><length>362026</length><artist-credit>"
0133     "<name-credit><artist id=\"d1075cad-33e3-496b-91b0-d4670aabf4f8\">"
0134     "<name>Wizard</name><sort-name>Wizard</sort-name>"
0135     "<disambiguation>German power metal</disambiguation></artist></name-credit>"
0136     "</artist-credit></recording></track><track><position>4</position>"
0137     "<number>4</number><length>342946</length><recording "
0138     "id=\"a3312b96-340a-45b8-ad1f-fef15343fd33\"><title>Dark God</title>"
0139     "<length>342946</length><artist-credit><name-credit><artist "
0140     "id=\"d1075cad-33e3-496b-91b0-d4670aabf4f8\"><name>Wizard</name>"
0141     "<sort-name>Wizard</sort-name><disambiguation>German power metal"
0142     "</disambiguation></artist></name-credit></artist-credit></recording>"
0143     "</track><track><position>5</position><number>5</number><length>308746"
0144     "</length><recording id=\"40792d11-6087-484a-b573-b5dc4b54ebde\">"
0145     "<title>Loki's Punishment</title><length>308746</length><artist-credit>"
0146     "<name-credit><artist id=\"d1075cad-33e3-496b-91b0-d4670aabf4f8\">"
0147     "<name>Wizard</name><sort-name>Wizard</sort-name>"
0148     "<disambiguation>German power metal</disambiguation></artist>"
0149     "</name-credit></artist-credit></recording></track><track>"
0150     "<position>6</position><number>6</number><length>241600</length>"
0151     "<recording id=\"3b23dfbd-4f6c-445a-836a-9882b9e10ad7\">"
0152     "<title>Beginning of the End</title><length>241600</length>"
0153     "<artist-credit><name-credit><artist "
0154     "id=\"d1075cad-33e3-496b-91b0-d4670aabf4f8\"><name>Wizard</name>"
0155     "<sort-name>Wizard</sort-name><disambiguation>German power metal"
0156     "</disambiguation></artist></name-credit></artist-credit></recording>"
0157     "</track><track><position>7</position><number>7</number><length>301573"
0158     "</length><recording id=\"98f11cca-1a69-4f41-ac3b-726d5174b404\">"
0159     "<title>Thor's Hammer</title><length>301573</length><artist-credit>"
0160     "<name-credit><artist id=\"d1075cad-33e3-496b-91b0-d4670aabf4f8\">"
0161     "<name>Wizard</name><sort-name>Wizard</sort-name><disambiguation>"
0162     "German power metal</disambiguation></artist></name-credit>"
0163     "</artist-credit></recording></track><track><position>8</position>"
0164     "<number>8</number><length>306680</length><recording "
0165     "id=\"e82be71a-df65-480a-9958-ee98f6bab005\"><title>Hall of Odin</title>"
0166     "<length>306680</length><artist-credit><name-credit><artist "
0167     "id=\"d1075cad-33e3-496b-91b0-d4670aabf4f8\"><name>Wizard</name>"
0168     "<sort-name>Wizard</sort-name><disambiguation>German power metal"
0169     "</disambiguation></artist></name-credit></artist-credit></recording>"
0170     "</track><track><position>9</position><number>9</number>"
0171     "<length>321506</length><recording "
0172     "id=\"149eebfa-7188-4c96-b535-7e1abe45b86b\"><title>The Powergod</title>"
0173     "<length>321506</length><artist-credit><name-credit><artist "
0174     "id=\"d1075cad-33e3-496b-91b0-d4670aabf4f8\"><name>Wizard</name>"
0175     "<sort-name>Wizard</sort-name><disambiguation>German power metal"
0176     "</disambiguation></artist></name-credit></artist-credit></recording>"
0177     "</track><track><position>10</position><number>10</number>"
0178     "<length>340400</length><recording "
0179     "id=\"4ebcddbb-ffae-41d1-b9c9-d5aea6bca9e5\">"
0180     "<title>March of the Einheriers</title><length>340400</length>"
0181     "<artist-credit><name-credit><artist "
0182     "id=\"d1075cad-33e3-496b-91b0-d4670aabf4f8\"><name>Wizard</name>"
0183     "<sort-name>Wizard</sort-name><disambiguation>German power metal"
0184     "</disambiguation></artist></name-credit></artist-credit></recording>"
0185     "</track><track><position>11</position><number>11</number><length>233720"
0186     "</length><recording id=\"80168326-bd79-4287-a8d6-313066257dfd\">"
0187     "<title>End of All</title><length>233720</length><artist-credit>"
0188     "<name-credit><artist id=\"d1075cad-33e3-496b-91b0-d4670aabf4f8\">"
0189     "<name>Wizard</name><sort-name>Wizard</sort-name>"
0190     "<disambiguation>German power metal</disambiguation></artist>"
0191     "</name-credit></artist-credit></recording></track></track-list>"
0192     "</medium></medium-list><relation-list target-type=\"url\">"
0193     "<relation type=\"amazon asin\">"
0194     "<target>http://www.amazon.de/gp/product/B00008OUEN</target></relation>"
0195     "</relation-list></release></metadata>";
0196   onAlbumFinished(albumStr);
0197 
0198   QStringList titles;
0199   titles << QLatin1String("The Prophecy") << QLatin1String("Betrayer")
0200          << QLatin1String("Dead Hope") << QLatin1String("Dark God")
0201          << QLatin1String("Loki's Punishment")
0202          << QLatin1String("Beginning of the End")
0203          << QLatin1String("Thor's Hammer")
0204          << QLatin1String("Hall of Odin") << QLatin1String("The Powergod")
0205          << QLatin1String("March of the Einheriers")
0206          << QLatin1String("End of All");
0207   QStringList lengths;
0208   lengths << QLatin1String("5:19") << QLatin1String("4:53")
0209           << QLatin1String("6:02") << QLatin1String("5:42")
0210           << QLatin1String("5:08") << QLatin1String("4:01")
0211           << QLatin1String("5:01") << QLatin1String("5:06")
0212           << QLatin1String("5:21") << QLatin1String("5:40")
0213           << QLatin1String("3:53");
0214   QCOMPARE(m_trackDataModel->rowCount(), 11);
0215   for (int row = 0; row < 11; ++row) {
0216     QCOMPARE(m_trackDataModel->index(row, 0).data().toString(), lengths.at(row));
0217     QCOMPARE(m_trackDataModel->index(row, 3).data().toInt(), row + 1);
0218     QCOMPARE(m_trackDataModel->index(row, 4).data().toString(), titles.at(row));
0219     QCOMPARE(m_trackDataModel->index(row, 5).data().toString(),
0220              QString(QLatin1String("Wizard")));
0221     QCOMPARE(m_trackDataModel->index(row, 6).data().toString(),
0222              QString(QLatin1String("Odin")));
0223     QCOMPARE(m_trackDataModel->index(row, 7).data().toInt(), 2003);
0224     QCOMPARE(m_trackDataModel->index(row, 10).data().toString(),
0225              QString(QLatin1String("Wizard")));
0226     QCOMPARE(m_trackDataModel->index(row, 11).data().toString(),
0227              QString(QLatin1String("LMP 0303-054 CD")));
0228     QCOMPARE(m_trackDataModel->index(row, 12).data().toString(),
0229              QString(QLatin1String("Limb Music Products")));
0230     QCOMPARE(m_trackDataModel->index(row, 13).data().toString(),
0231              QString(QLatin1String("DE")));
0232   }
0233 }