Fixed: Don't save invalid scene mappings into database

This commit is contained in:
Mark McDowall 2015-04-21 16:50:48 -07:00
parent 65f1dbde00
commit e40508e5e9
2 changed files with 49 additions and 0 deletions

View File

@ -10,6 +10,7 @@ using NzbDrone.Core.Lifecycle;
using NzbDrone.Core.Test.Framework;
using NzbDrone.Test.Common;
using FluentAssertions;
using NzbDrone.Common.Extensions;
namespace NzbDrone.Core.Test.DataAugmentationFixture.Scene
{
@ -134,6 +135,48 @@ namespace NzbDrone.Core.Test.DataAugmentationFixture.Scene
.Verify(v => v.All(), Times.Once());
}
[Test]
public void should_not_add_mapping_with_blank_parse_title()
{
GivenProviders(new[] { _provider1 });
var fakeMappings = Builder<SceneMapping>.CreateListOfSize(2)
.TheLast(1)
.With(m => m.ParseTerm = null)
.Build()
.ToList();
_provider1.Setup(s => s.GetSceneMappings()).Returns(fakeMappings);
Mocker.GetMock<ISceneMappingRepository>().Setup(c => c.All()).Returns(_fakeMappings);
Subject.Execute(new UpdateSceneMappingCommand());
Mocker.GetMock<ISceneMappingRepository>().Verify(c => c.InsertMany(It.Is<IList<SceneMapping>>(m => !m.Any(s => s.ParseTerm.IsNullOrWhiteSpace()))), Times.Once());
ExceptionVerification.ExpectedWarns(1);
}
[Test]
public void should_not_add_mapping_with_blank_search_title()
{
GivenProviders(new[] { _provider1 });
var fakeMappings = Builder<SceneMapping>.CreateListOfSize(2)
.TheLast(1)
.With(m => m.SearchTerm = null)
.Build()
.ToList();
_provider1.Setup(s => s.GetSceneMappings()).Returns(fakeMappings);
Mocker.GetMock<ISceneMappingRepository>().Setup(c => c.All()).Returns(_fakeMappings);
Subject.Execute(new UpdateSceneMappingCommand());
Mocker.GetMock<ISceneMappingRepository>().Verify(c => c.InsertMany(It.Is<IList<SceneMapping>>(m => !m.Any(s => s. SearchTerm.IsNullOrWhiteSpace()))), Times.Once());
ExceptionVerification.ExpectedWarns(1);
}
private void AssertNoUpdate()
{
_provider1.Verify(c => c.GetSceneMappings(), Times.Once());

View File

@ -114,6 +114,12 @@ namespace NzbDrone.Core.DataAugmentation.Scene
foreach (var sceneMapping in mappings)
{
if (sceneMapping.ParseTerm.IsNullOrWhiteSpace() ||
sceneMapping.SearchTerm.IsNullOrWhiteSpace())
{
_logger.Warn("Invalid scene mapping found for: {0}, skipping", sceneMapping.TvdbId);
}
sceneMapping.ParseTerm = sceneMapping.Title.CleanSeriesTitle();
sceneMapping.Type = sceneMappingProvider.GetType().Name;
}