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;
        }