Skip to content

Commit

Permalink
Tests on cd with multiple matches
Browse files Browse the repository at this point in the history
+ Relation album and track refactored
  • Loading branch information
LodewijkSioen committed Apr 24, 2014
1 parent 392122b commit e85b293
Show file tree
Hide file tree
Showing 8 changed files with 214 additions and 119 deletions.
17 changes: 12 additions & 5 deletions src/CdRipper.Tests/DummyData.cs

Large diffs are not rendered by default.

27 changes: 19 additions & 8 deletions src/CdRipper.Tests/Encode/TestOutputLocation.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
using CdRipper.Encode;
using System.Linq;
using CdRipper.Encode;
using CdRipper.Tagging;
using NUnit.Framework;

Expand All @@ -16,18 +17,23 @@ public void TestReplaceTokens()
FileNameMask = @"track\{title}\{artist}-{tracknumber}\{genre}-{albumtitle}.{albumartist}-{numberoftracks}-{year}.mp3"
};

var filename = output.CreateFileName(new TrackIdentification
var album = new AlbumIdentification
{
AlbumTitle = "album title",
AlbumArtist = "album artist",
NumberOfTracks = 25,
Year = "1854"
};
album.AddTrack(new TrackIdentification()
{
Title = "title",
Artist = "artist",
TrackNumber = 4,
Genre = "genre",
AlbumTitle = "album title",
AlbumArtist = "album artist",
TotalNumberOfTracks = 25,
Year = "1854"
});

var filename = output.CreateFileName(album.Tracks.First());

Assert.That(filename, Is.EqualTo(@"c:\test\track\title\artist-04\genre-album title.album artist-25-1854.mp3"));
}

Expand All @@ -40,7 +46,10 @@ public void TestReplaceNullTokens()
FileNameMask = "track-{title}-{albumtitle}.mp3"
};

var filename = output.CreateFileName(new TrackIdentification());
var album = new AlbumIdentification();
album.AddTrack(new TrackIdentification());

var filename = output.CreateFileName(album.Tracks.First());

Assert.That(filename, Is.EqualTo(@"c:\test\track--.mp3"));
}
Expand All @@ -55,7 +64,9 @@ public void TestIllegalCharactersInFileName()
ack.mp3"
};

var filename = output.CreateFileName(new TrackIdentification());

var track = new TrackIdentification();
var filename = output.CreateFileName(track);

Assert.That(filename, Is.EqualTo(@"c:\test\tr//ack.mp3"));

Expand Down
113 changes: 74 additions & 39 deletions src/CdRipper.Tests/Tagging/TestTagRetrieval.cs
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ public void TestGettingTheDiscTags()

Assert.That(discTags, Is.Not.Null);
Assert.That(discTags.Count(), Is.EqualTo(1));
Assert.That(discTags.First().Id, Is.EqualTo(DummyData.SteekJeVingerInDeLucht.MusicBrainzReleases.Keys.First()));
Assert.That(discTags.First().AlbumArtist, Is.EqualTo("Jan De Smet"));
Assert.That(discTags.First().AlbumTitle, Is.EqualTo("Steek Je vinger in de lucht"));
Assert.That(discTags.First().Year, Is.EqualTo("2005"));
Expand All @@ -40,20 +41,19 @@ public void TestGettingTheDiscTagsForACdStub()
Assert.That(discTags, Is.Not.Null);
Assert.That(discTags.Count(), Is.EqualTo(1));

Assert.That(discTags.First().AlbumArtist, Is.EqualTo("Ketnet Band"));
Assert.That(discTags.First().AlbumTitle, Is.EqualTo("Appels Eten"));
Assert.That(discTags.First().Year, Is.Null);
Assert.That(discTags.First().NumberOfTracks, Is.EqualTo(3));
Assert.That(discTags.First().Tracks.Count(), Is.EqualTo(3));
Assert.That(discTags.First().Tracks.ElementAt(0).Title, Is.EqualTo("Appels Eten q2"));
Assert.That(discTags.First().Tracks.ElementAt(0).Artist, Is.Null);
Assert.That(discTags.First().Tracks.ElementAt(0).TrackNumber, Is.EqualTo(1));
Assert.That(discTags.First().Tracks.ElementAt(1).Title, Is.EqualTo("Appels Eten Instrumental q2"));
Assert.That(discTags.First().Tracks.ElementAt(1).Artist, Is.Null);
Assert.That(discTags.First().Tracks.ElementAt(1).TrackNumber, Is.EqualTo(2));
Assert.That(discTags.First().Tracks.ElementAt(2).Title, Is.EqualTo("Appels Eten PB q2"));
Assert.That(discTags.First().Tracks.ElementAt(2).Artist, Is.Null);
Assert.That(discTags.First().Tracks.ElementAt(2).TrackNumber, Is.EqualTo(3));
var expectedAlbum = new AlbumIdentification
{
Id = "S0liNSPBm5gjOHw9JtmPPDhXynI-", //Stub has a special Id
AlbumArtist = "Ketnet Band",
AlbumTitle = "Appels Eten",
Year = null,
NumberOfTracks = 3
};
expectedAlbum.AddTrack(new TrackIdentification { Title = "Appels Eten q2", TrackNumber = 1 });
expectedAlbum.AddTrack(new TrackIdentification { Title = "Appels Eten Instrumental q2", TrackNumber = 2 });
expectedAlbum.AddTrack(new TrackIdentification { Title = "Appels Eten PB q2", TrackNumber = 3 });

AssertAlbum(discTags.First(), expectedAlbum);
}

[Test]
Expand All @@ -64,33 +64,68 @@ public void TestGettingAnUnknownDiscId()
var discTags = tagSource.GetTags(DummyData.UnknownCd.TableOfContents).ToList();

Assert.That(discTags.Count, Is.EqualTo(1));
Assert.That(discTags.First().AlbumArtist, Is.EqualTo("Unknown Artist"));
Assert.That(discTags.First().AlbumTitle, Is.EqualTo("Unknown Album"));
Assert.That(discTags.First().Year, Is.Null);
Assert.That(discTags.First().NumberOfTracks, Is.EqualTo(2));
Assert.That(discTags.First().Tracks.Count(), Is.EqualTo(2));
Assert.That(discTags.First().Tracks.ElementAt(0).Title, Is.EqualTo("Unknown Title"));
Assert.That(discTags.First().Tracks.ElementAt(0).Artist, Is.EqualTo("Unknown Artist"));
Assert.That(discTags.First().Tracks.ElementAt(0).TrackNumber, Is.EqualTo(1));
Assert.That(discTags.First().Tracks.ElementAt(0).TotalNumberOfTracks, Is.EqualTo(2));
Assert.That(discTags.First().Tracks.ElementAt(1).Title, Is.EqualTo("Unknown Title"));
Assert.That(discTags.First().Tracks.ElementAt(1).Artist, Is.EqualTo("Unknown Artist"));
Assert.That(discTags.First().Tracks.ElementAt(1).TrackNumber, Is.EqualTo(2));
Assert.That(discTags.First().Tracks.ElementAt(1).TotalNumberOfTracks, Is.EqualTo(2));
AssertAlbum(discTags.First(), AlbumIdentification.GetEmpty(2));
}

[Test, Explicit]
public void TestDummyData()
[Test]
public void TestGettingInfoForACdWithMultipleResults()
{
var dummyCd = DummyData.AppelsEten;
var tagSource = new MusicBrainzTagSource(new MockMusicBrainzApi());

var discTags = tagSource.GetTags(DummyData.MuchAgainstEveryonesAdvice.TableOfContents).ToList();

Assert.That(discTags.Count, Is.EqualTo(3));

Assert.That(discTags.ElementAt(0).Id, Is.EqualTo("6d283259-8c9a-3558-9acc-d6c2e429c657"));
Assert.That(discTags.ElementAt(1).Id, Is.EqualTo("7cf38b3b-d110-318a-ae18-1d4078c347ce"));
Assert.That(discTags.ElementAt(2).Id, Is.EqualTo("d939579c-cd40-4dd7-8927-8030f7932cbc"));
}

private void AssertAlbum(AlbumIdentification actual, AlbumIdentification expected)
{
Assert.That(actual.Id, Is.EqualTo(expected.Id), "AlbumId");
Assert.That(actual.AlbumArtist, Is.EqualTo(actual.AlbumArtist), "AlbumArtist");
Assert.That(actual.AlbumTitle, Is.EqualTo(actual.AlbumTitle), "AlbumTitle");
Assert.That(actual.Year, Is.EqualTo(actual.Year), "Year");
Assert.That(actual.NumberOfTracks, Is.EqualTo(expected.NumberOfTracks), "NumberOfTracks");
Assert.That(actual.Tracks.Count(), Is.EqualTo(expected.Tracks.Count()), "Count of tracks on the album");
for (int i = 0; i < expected.Tracks.Count(); i++)
{
var expectedTrack = expected.Tracks.ElementAt(i);
var actualTrack = actual.Tracks.ElementAt(i);
AssertTrack(actualTrack, expectedTrack);
}
}

private void AssertTrack(TrackIdentification actualTrack, TrackIdentification expectedTrack)
{
Assert.That(actualTrack.Genre, Is.Null, "Genre is not yet implemented");

Assert.That(actualTrack.Title, Is.EqualTo(expectedTrack.Title), "Title");
Assert.That(actualTrack.Artist, Is.EqualTo(expectedTrack.Artist), "Artist");
Assert.That(actualTrack.TrackNumber, Is.EqualTo(expectedTrack.TrackNumber), "TrackNumber");
Assert.That(actualTrack.AlbumArtist, Is.EqualTo(expectedTrack.AlbumArtist), "AlbumArtist on track");
Assert.That(actualTrack.AlbumTitle, Is.EqualTo(expectedTrack.AlbumTitle), "AlbumTitle on track");
Assert.That(actualTrack.Year, Is.EqualTo(expectedTrack.Year), "Year on track");
Assert.That(actualTrack.TotalNumberOfTracks, Is.EqualTo(expectedTrack.TotalNumberOfTracks), "TotalNumberOfTracks on track");
}

[Test, Explicit]
public void GetDummyDataFromMusicBrainz()
{
var cd = DummyData.MuchAgainstEveryonesAdvice;
var api = new MusicBrainzApi("http:https://musicbrainz.org/");
var mockedApi = new MockMusicBrainzApi();

Assert.That(api.GetReleasesByDiscId(dummyCd.MusicBrainzDiscId), Is.EqualTo(mockedApi.GetReleasesByDiscId(dummyCd.MusicBrainzDiscId)));
if (dummyCd.MusicBrainzReleaseId != null)
var discIdResponse = api.GetReleasesByDiscId(MusicBrainzDiscIdCalculator.CalculateDiscId(cd.TableOfContents));
Assert.That(discIdResponse.Json, Is.EqualTo(cd.GetReleaseByDiscIdResponse), discIdResponse.Json.Replace(@"""", @"\"""));

if (cd.MusicBrainzReleases != null)
{
Assert.That(api.GetRelease(dummyCd.MusicBrainzReleaseId), Is.EqualTo(mockedApi.GetRelease(dummyCd.MusicBrainzReleaseId)));
foreach (var release in cd.MusicBrainzReleases)
{
var releaseResponse = api.GetRelease(release.Key);
Assert.That(releaseResponse.Json, Is.EqualTo(release.Value), releaseResponse.Json.Replace(@"""", @"\"""));
}
}
}
}
Expand All @@ -105,12 +140,12 @@ public MockMusicBrainzApi()
_releasesForDiscId = new Dictionary<string, string>
{
{DummyData.SteekJeVingerInDeLucht.MusicBrainzDiscId, DummyData.SteekJeVingerInDeLucht.GetReleaseByDiscIdResponse},
{DummyData.AppelsEten.MusicBrainzDiscId, DummyData.AppelsEten.GetReleaseByDiscIdResponse}
};
_releases = new Dictionary<string, string>
{
{DummyData.SteekJeVingerInDeLucht.MusicBrainzReleaseId, DummyData.SteekJeVingerInDeLucht.GetReleaseResponse}
{DummyData.AppelsEten.MusicBrainzDiscId, DummyData.AppelsEten.GetReleaseByDiscIdResponse},
{DummyData.MuchAgainstEveryonesAdvice.MusicBrainzDiscId, DummyData.MuchAgainstEveryonesAdvice.GetReleaseByDiscIdResponse}
};
_releases = DummyData.SteekJeVingerInDeLucht.MusicBrainzReleases
.Concat(DummyData.MuchAgainstEveryonesAdvice.MusicBrainzReleases)
.ToDictionary(k => k.Key, k => k.Value);
}

public MusicBrainzResponse GetReleasesByDiscId(string discId)
Expand Down
2 changes: 2 additions & 0 deletions src/CdRipper/CdRipper.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@
<ItemGroup>
<Compile Include="Encode\LameArgumentBuilder.cs" />
<Compile Include="Encode\OutputLocation.cs" />
<Compile Include="Tagging\AlbumIdentification.cs" />
<Compile Include="Tagging\MusicBrainzApi.cs" />
<Compile Include="Tagging\MusicBrainzDiscIdCalculator.cs" />
<Compile Include="Tagging\FreeDbDiscIdCalculator.cs" />
Expand All @@ -55,6 +56,7 @@
<Compile Include="Rip\Track.cs" />
<Compile Include="Rip\TrackReader.cs" />
<Compile Include="Tagging\MusicBrainzTagSource.cs" />
<Compile Include="Tagging\TrackIdentification.cs" />
<Compile Include="Win32Functions.cs" />
</ItemGroup>
<ItemGroup>
Expand Down
4 changes: 2 additions & 2 deletions src/CdRipper/Encode/LameArgumentBuilder.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
using System.IO;
using System.Linq;
using System.Text;
using CdRipper.Tagging;

Expand All @@ -12,7 +12,7 @@ public class LameArgumentBuilder

public LameArgumentBuilder(EncoderSettings settings)
{
_track = settings.Track ?? TrackIdentification.GetEmpty();
_track = settings.Track ?? AlbumIdentification.GetEmpty(1).Tracks.First();
_mp3Settings = settings.Mp3Settings ?? Mp3Settings.Default;
_fileName = settings.Output ?? OutputLocation.Default;
}
Expand Down
46 changes: 46 additions & 0 deletions src/CdRipper/Tagging/AlbumIdentification.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
using System.Collections.Generic;
using System.Linq;

namespace CdRipper.Tagging
{
public class AlbumIdentification
{
private readonly List<TrackIdentification> _tracks;

public AlbumIdentification()
{
_tracks = new List<TrackIdentification>();
}

public IEnumerable<TrackIdentification> Tracks { get { return _tracks; } }
public string Id { get; set; }
public string AlbumArtist { get; set; }
public string AlbumTitle { get; set; }
public int NumberOfTracks { get; set; }
public string Year { get; set; }

public void AddTrack(TrackIdentification track)
{
track.SetAlbum(this);
_tracks.Add(track);
}

public static AlbumIdentification GetEmpty(int numberOfTracks)
{
var album = new AlbumIdentification
{
Id = null,
AlbumArtist = "Unknown Artist",
AlbumTitle = "Unknown Album",
NumberOfTracks = numberOfTracks
};

foreach (var trackNumber in Enumerable.Range(1, numberOfTracks))
{
album.AddTrack(TrackIdentification.GetEmpty(album, trackNumber));
}

return album;
}
}
}
Loading

0 comments on commit e85b293

Please sign in to comment.