public void ShouldContainReleaseWith_2_CreditArtists_ForTestXML() { XmlDocument xmlDoc = new XmlDocument(); xmlDoc.Load(_path); List<Release> releases = new List<Release>(); MusicBrainzReleaseParser mbzParser = new MusicBrainzReleaseParser(); //act releases = mbzParser.GetReleaseInformationFromXmlForArtistId(xmlDoc, _artistId); //assert List<NameCredit> expectedNameArtists = new List<NameCredit>(); expectedNameArtists.Add(new NameCredit { Id = "a015074b-e109-412d-9f7b-170b80a0ebbd", Name = "Dharohar Project" }); expectedNameArtists.Add(new NameCredit { Id = "cd9713d6-6e5f-4143-9412-4d12b7bd47f2", Name = "Laura Marling" }); List<NameCredit> actualNameArtists = new List<NameCredit>(); foreach (var creditArtist in releases[0].NameCredits) { NameCredit nameCredit = new NameCredit { Id = creditArtist.Id, Name = creditArtist.Name }; actualNameArtists.Add(nameCredit); } bool test =expectedNameArtists[0].Id == actualNameArtists[0].Id && expectedNameArtists[1].Id == actualNameArtists[1].Id && expectedNameArtists[0].Name == actualNameArtists[0].Name && expectedNameArtists[1].Name == actualNameArtists[1].Name && expectedNameArtists.Count == actualNameArtists.Count; Assert.AreEqual(true, test); }
public List<Release> GetReleaseInformationFromXmlForArtistId(XmlDocument xmlDoc, string artistId) { var nsm = new XmlNamespaceManager(xmlDoc.NameTable); nsm.AddNamespace("mbz", "http://musicbrainz.org/ns/mmd-2.0#"); XmlNodeList nodes = xmlDoc.SelectNodes("//mbz:metadata/mbz:release-list/mbz:release", nsm); List<Release> releases = new List<Release>(); foreach (XmlNode node in nodes) { Release release = new Release(); release.ReleaseId = node.Attributes["id"].Value; release.Title = node.SelectSingleNode("mbz:title", nsm).InnerText; release.Status = node.SelectSingleNode("mbz:status", nsm).InnerText; // label is optional if (node.SelectSingleNode("mbz:label-info-list/mbz:label-info/mbz:label/mbz:name", nsm) != null) release.Label = node.SelectSingleNode("mbz:label-info-list/mbz:label-info/mbz:label/mbz:name", nsm).InnerText; release.NumberOfTracks = System.Int32.Parse(node.SelectSingleNode("mbz:medium-list/mbz:track-count", nsm).InnerText ?? "0"); // get the other collaborating artists if any List<NameCredit> nameCredits = new List<NameCredit>(); XmlNodeList creditArtists = node.SelectNodes("mbz:artist-credit/mbz:name-credit/mbz:artist", nsm); foreach (XmlNode creditArtist in creditArtists) { string id = creditArtist.Attributes["id"].Value; // not need to add self as a colaborating artist on one's own release if (id != artistId) { var otherArtist = new NameCredit(); otherArtist.Id = id; otherArtist.Name = creditArtist.SelectSingleNode("mbz:name", nsm).InnerText; nameCredits.Add(otherArtist); } } release.NameCredits = nameCredits; releases.Add(release); } return releases; }