HistoryProvider now uses PetaPoco

This commit is contained in:
kay.one 2011-06-16 23:59:13 -07:00
parent 46ec4fa3ba
commit 3ef17273fd
4 changed files with 96 additions and 76 deletions

View File

@ -23,38 +23,65 @@ namespace NzbDrone.Core.Test
public void AllItems() public void AllItems()
{ {
//Setup //Setup
var episode = new Episode var historyItem = Builder<History>.CreateListOfSize(10).Build();
{
AirDate = DateTime.Today.AddDays(-1),
EpisodeId = 1234,
EpisodeNumber = 5,
Overview = "This is an Overview",
SeasonNumber = 1,
SeriesId = 5656
};
var list = new List<History> var mocker = new AutoMoqer();
{ var db = MockLib.GetEmptyDatabase();
new History mocker.SetConstant(db);
{
HistoryId = new int(),
Date = DateTime.Now,
IsProper = false,
Quality = QualityTypes.SDTV,
EpisodeId = episode.EpisodeId
}
};
var repo = new Mock<IRepository>(); db.InsertMany(historyItem);
repo.Setup(r => r.All<History>()).Returns(list.AsQueryable());
var target = new HistoryProvider(repo.Object);
//Act //Act
var result = target.AllItems(); var result = mocker.Resolve<HistoryProvider>().AllItems();
//Assert //Assert
Assert.AreEqual(result.Count(), 1); result.Should().HaveSameCount(historyItem);
}
[Test]
public void PurgeItem()
{
//Setup
var historyItem = Builder<History>.CreateListOfSize(10).Build();
var mocker = new AutoMoqer();
var db = MockLib.GetEmptyDatabase();
mocker.SetConstant(db);
db.InsertMany(historyItem);
//Act
db.Fetch<History>().Should().HaveCount(10);
mocker.Resolve<HistoryProvider>().Purge();
//Assert
db.Fetch<History>().Should().HaveCount(0);
}
[Test]
public void Trim_Items()
{
//Setup
var historyItem = Builder<History>.CreateListOfSize(20)
.WhereTheFirst(10).Have(c => c.Date = DateTime.Now)
.AndTheNext(10).Have(c => c.Date = DateTime.Now.AddDays(-31))
.Build();
var mocker = new AutoMoqer();
var db = MockLib.GetEmptyDatabase();
mocker.SetConstant(db);
db.InsertMany(historyItem);
//Act
db.Fetch<History>().Should().HaveCount(20);
mocker.Resolve<HistoryProvider>().Trim();
//Assert
db.Fetch<History>().Should().HaveCount(10);
} }
@ -63,7 +90,7 @@ namespace NzbDrone.Core.Test
{ {
var mocker = new AutoMoqer(MockBehavior.Strict); var mocker = new AutoMoqer(MockBehavior.Strict);
mocker.SetConstant(MockLib.GetEmptyRepository()); mocker.SetConstant(MockLib.GetEmptyDatabase());
//Act //Act
var result = mocker.Resolve<HistoryProvider>().GetBestQualityInHistory(12); var result = mocker.Resolve<HistoryProvider>().GetBestQualityInHistory(12);
@ -77,12 +104,12 @@ namespace NzbDrone.Core.Test
{ {
var mocker = new AutoMoqer(MockBehavior.Strict); var mocker = new AutoMoqer(MockBehavior.Strict);
var db = MockLib.GetEmptyDatabase();
var repo = MockLib.GetEmptyRepository();
var history = Builder<History>.CreateNew() var history = Builder<History>.CreateNew()
.With(h => h.Quality = QualityTypes.Bluray720p).Build(); .With(h => h.Quality = QualityTypes.Bluray720p).Build();
repo.Add(history);
mocker.SetConstant(repo); db.Insert(history);
mocker.SetConstant(db);
//Act //Act
var result = mocker.Resolve<HistoryProvider>().GetBestQualityInHistory(history.EpisodeId); var result = mocker.Resolve<HistoryProvider>().GetBestQualityInHistory(history.EpisodeId);
@ -97,35 +124,40 @@ namespace NzbDrone.Core.Test
{ {
//Arange //Arange
var mocker = new AutoMoqer(); var mocker = new AutoMoqer();
var repo = MockLib.GetEmptyRepository(); var db = MockLib.GetEmptyDatabase();
mocker.SetConstant(repo); mocker.SetConstant(db);
var episodes = MockLib.GetFakeEpisodes(1); var episode = Builder<Episode>.CreateNew().Build();
repo.AddMany(episodes);
var episode = episodes[5]; const QualityTypes quality = QualityTypes.HDTV;
const bool proper = true;
var history = new History var history = new History
{ {
Date = DateTime.Now, Date = DateTime.Now,
EpisodeId = episode.EpisodeId, EpisodeId = episode.EpisodeId,
SeriesId = episode.SeriesId,
NzbTitle = "my title", NzbTitle = "my title",
Indexer = "Fake Indexer" Indexer = "Fake Indexer",
Quality = quality,
IsProper = proper
}; };
//Act //Act
mocker.Resolve<HistoryProvider>().Add(history); mocker.Resolve<HistoryProvider>().Add(history);
//Assert //Assert
var storedHistory = repo.All<History>(); var storedHistory = db.Fetch<History>();
var newHistiory = repo.All<History>().First();
storedHistory.Should().HaveCount(1); storedHistory.Should().HaveCount(1);
Assert.AreEqual(history.Date, newHistiory.Date); Assert.AreEqual(history.Date, storedHistory.First().Date);
Assert.AreEqual(history.EpisodeId, newHistiory.EpisodeId); Assert.AreEqual(history.EpisodeId, storedHistory.First().EpisodeId);
Assert.AreEqual(history.NzbTitle, newHistiory.NzbTitle); Assert.AreEqual(history.SeriesId, storedHistory.First().SeriesId);
Assert.AreEqual(history.Indexer, newHistiory.Indexer); Assert.AreEqual(history.NzbTitle, storedHistory.First().NzbTitle);
Assert.AreEqual(history.Indexer, storedHistory.First().Indexer);
Assert.AreEqual(history.Quality, storedHistory.First().Quality);
Assert.AreEqual(history.IsProper, storedHistory.First().IsProper);
} }

View File

@ -5,47 +5,46 @@ using Ninject;
using NLog; using NLog;
using NzbDrone.Core.Model; using NzbDrone.Core.Model;
using NzbDrone.Core.Repository; using NzbDrone.Core.Repository;
using NzbDrone.Core.Repository.Quality; using PetaPoco;
using SubSonic.Repository;
namespace NzbDrone.Core.Providers namespace NzbDrone.Core.Providers
{ {
public class HistoryProvider public class HistoryProvider
{ {
private readonly IDatabase _database;
private static readonly Logger Logger = LogManager.GetCurrentClassLogger(); private static readonly Logger Logger = LogManager.GetCurrentClassLogger();
private readonly IRepository _repository;
[Inject] [Inject]
public HistoryProvider(IRepository repository) public HistoryProvider(IDatabase database)
{ {
_repository = repository; _database = database;
} }
public HistoryProvider() public HistoryProvider()
{ {
} }
public virtual IQueryable<History> AllItems() public virtual IEnumerable<History> AllItems()
{ {
return _repository.All<History>(); return _database.Query<History>("");
} }
public virtual void Purge() public virtual void Purge()
{ {
_repository.DeleteMany(AllItems()); _database.Delete<History>("");
Logger.Info("History has been Purged"); Logger.Info("History has been Purged");
} }
public virtual void Trim() public virtual void Trim()
{ {
var old = AllItems().Where(h => h.Date < DateTime.Now.AddDays(-30)); _database.Delete<History>("WHERE Date < @0", DateTime.Now.AddDays(-30).Date);
_repository.DeleteMany(old);
Logger.Info("History has been trimmed, items older than 30 days have been removed"); Logger.Info("History has been trimmed, items older than 30 days have been removed");
} }
public virtual void Add(History item) public virtual void Add(History item)
{ {
_repository.Add(item); _database.Insert(item);
Logger.Debug("Item added to history: {0}", item.NzbTitle); Logger.Debug("Item added to history: {0}", item.NzbTitle);
} }
@ -55,15 +54,5 @@ namespace NzbDrone.Core.Providers
return history.FirstOrDefault(); return history.FirstOrDefault();
} }
public virtual void Delete(int historyId)
{
_repository.Delete<History>(historyId);
}
public virtual void DeleteForEpisode(int episodeId)
{
_repository.DeleteMany<History>(h => h.EpisodeId == episodeId);
}
} }
} }

View File

@ -1,24 +1,22 @@
using System; using System;
using NzbDrone.Core.Model; using NzbDrone.Core.Model;
using NzbDrone.Core.Repository.Quality; using NzbDrone.Core.Repository.Quality;
using PetaPoco;
using SubSonic.SqlGeneration.Schema; using SubSonic.SqlGeneration.Schema;
namespace NzbDrone.Core.Repository namespace NzbDrone.Core.Repository
{ {
[PrimaryKey("HistoryId")]
public class History public class History
{ {
[SubSonicPrimaryKey] public int HistoryId { get; set; }
public virtual int HistoryId { get; set; }
public virtual int EpisodeId { get; set; } public int EpisodeId { get; set; }
public int SeriesId { get; set; }
public string NzbTitle { get; set; } public string NzbTitle { get; set; }
public QualityTypes Quality { get; set; } public QualityTypes Quality { get; set; }
public DateTime Date { get; set; } public DateTime Date { get; set; }
public bool IsProper { get; set; } public bool IsProper { get; set; }
public string Indexer { get; set; } public string Indexer { get; set; }
[SubSonicToOneRelation(ThisClassContainsJoinKey = true)]
public virtual Episode Episode { get; protected set; }
} }
} }

View File

@ -12,10 +12,12 @@ namespace NzbDrone.Web.Controllers
public class HistoryController : Controller public class HistoryController : Controller
{ {
private readonly HistoryProvider _historyProvider; private readonly HistoryProvider _historyProvider;
private readonly EpisodeProvider _episodeProvider;
public HistoryController(HistoryProvider historyProvider) public HistoryController(HistoryProvider historyProvider, EpisodeProvider episodeProvider)
{ {
_historyProvider = historyProvider; _historyProvider = historyProvider;
_episodeProvider = episodeProvider;
} }
// //
@ -48,12 +50,11 @@ namespace NzbDrone.Web.Controllers
var historyDb = _historyProvider.AllItems().ToList(); var historyDb = _historyProvider.AllItems().ToList();
var history = new List<HistoryModel>(); var history = new List<HistoryModel>();
foreach (var item in historyDb) foreach (var item in historyDb)
{ {
var episode = item.Episode; var episode = _episodeProvider.GetEpisode(item.EpisodeId);
var series = episode.Series;
history.Add(new HistoryModel history.Add(new HistoryModel
{ {
HistoryId = item.HistoryId, HistoryId = item.HistoryId,
@ -61,7 +62,7 @@ namespace NzbDrone.Web.Controllers
EpisodeNumber = episode.EpisodeNumber, EpisodeNumber = episode.EpisodeNumber,
EpisodeTitle = episode.Title, EpisodeTitle = episode.Title,
EpisodeOverview = episode.Overview, EpisodeOverview = episode.Overview,
SeriesTitle = series.Title, SeriesTitle = episode.Series.Title,
NzbTitle = item.NzbTitle, NzbTitle = item.NzbTitle,
Quality = item.Quality.ToString(), Quality = item.Quality.ToString(),
IsProper = item.IsProper, IsProper = item.IsProper,