using FizzWare.NBuilder; using NUnit.Framework; using NzbDrone.Core.Datastore; using NzbDrone.Core.Profiles.Qualities; using NzbDrone.Core.Test.Framework; using NzbDrone.Core.Music; using NzbDrone.Core.Qualities; using NzbDrone.Core.MediaFiles; using NzbDrone.Core.Languages; using NzbDrone.Core.Profiles.Languages; using NzbDrone.Core.Test.Languages; namespace NzbDrone.Core.Test.Datastore { [TestFixture] public class MarrDataLazyLoadingFixture : DbTest { [SetUp] public void Setup() { var profile = new Profile { Name = "Test", Cutoff = Quality.MP3_320.Id, Items = Qualities.QualityFixture.GetDefaultQualities() }; var languageProfile = new LanguageProfile { Name = "Test", Languages = LanguageFixture.GetDefaultLanguages(Language.English), Cutoff = Language.English }; profile = Db.Insert(profile); languageProfile = Db.Insert(languageProfile); var artist = Builder.CreateListOfSize(1) .All() .With(v => v.ProfileId = profile.Id) .With(v => v.LanguageProfileId = languageProfile.Id) .BuildListOfNew(); Db.InsertMany(artist); var trackFiles = Builder.CreateListOfSize(1) .All() .With(v => v.ArtistId = artist[0].Id) .With(v => v.Quality = new QualityModel()) .BuildListOfNew(); Db.InsertMany(trackFiles); var tracks = Builder.CreateListOfSize(10) .All() .With(v => v.Monitored = true) .With(v => v.TrackFileId = trackFiles[0].Id) .With(v => v.ArtistId = artist[0].Id) .BuildListOfNew(); Db.InsertMany(tracks); } [Test] public void should_lazy_load_profile_if_not_joined() { var db = Mocker.Resolve(); var DataMapper = db.GetDataMapper(); var tracks = DataMapper.Query() .Join(Marr.Data.QGen.JoinType.Inner, v => v.Artist, (l, r) => l.ArtistId == r.Id) .ToList(); foreach (var track in tracks) { Assert.IsNotNull(track.Artist); Assert.IsFalse(track.Artist.Profile.IsLoaded); Assert.IsFalse(track.Artist.LanguageProfile.IsLoaded); } } [Test] public void should_explicit_load_trackfile_if_joined() { var db = Mocker.Resolve(); var DataMapper = db.GetDataMapper(); var tracks = DataMapper.Query() .Join(Marr.Data.QGen.JoinType.Inner, v => v.TrackFile, (l, r) => l.TrackFileId == r.Id) .ToList(); foreach (var track in tracks) { Assert.IsNull(track.Artist); Assert.IsTrue(track.TrackFile.IsLoaded); } } [Test] public void should_explicit_load_profile_if_joined() { var db = Mocker.Resolve(); var DataMapper = db.GetDataMapper(); var tracks = DataMapper.Query() .Join(Marr.Data.QGen.JoinType.Inner, v => v.Artist, (l, r) => l.ArtistId == r.Id) .Join(Marr.Data.QGen.JoinType.Inner, v => v.Profile, (l, r) => l.ProfileId == r.Id) .ToList(); foreach (var track in tracks) { Assert.IsNotNull(track.Artist); Assert.IsTrue(track.Artist.Profile.IsLoaded); Assert.IsFalse(track.Artist.LanguageProfile.IsLoaded); } } [Test] public void should_explicit_load_languageprofile_if_joined() { var db = Mocker.Resolve(); var DataMapper = db.GetDataMapper(); var tracks = DataMapper.Query() .Join(Marr.Data.QGen.JoinType.Inner, v => v.Artist, (l, r) => l.ArtistId == r.Id) .Join(Marr.Data.QGen.JoinType.Inner, v => v.LanguageProfile, (l, r) => l.ProfileId == r.Id) .ToList(); foreach (var track in tracks) { Assert.IsNotNull(track.Artist); Assert.IsFalse(track.Artist.Profile.IsLoaded); Assert.IsTrue(track.Artist.LanguageProfile.IsLoaded); } } } }