You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Radarr/src/NzbDrone.Core.Test/ImportListTests/FetchAndParseImportListServ...

175 lines
6.2 KiB

using System;
using System.Collections.Generic;
using System.Linq;
using FizzWare.NBuilder;
using FluentAssertions;
using Moq;
using NUnit.Framework;
using NzbDrone.Core.ImportLists;
using NzbDrone.Core.ImportLists.ImportListMovies;
using NzbDrone.Core.Test.Framework;
namespace NzbDrone.Core.Test.ImportListTests
{
[TestFixture]
public class FetchAndParseImportListServiceFixture : CoreTest<FetchAndParseImportListService>
{
private List<IImportList> _importLists;
private List<ImportListStatus> _blockedLists;
private List<ImportListMovie> _listMovies;
[SetUp]
public void Setup()
{
_importLists = new List<IImportList>();
_blockedLists = new List<ImportListStatus>();
Mocker.GetMock<IImportListFactory>()
.Setup(v => v.Enabled(It.IsAny<bool>()))
.Returns(_importLists);
Mocker.GetMock<IImportListStatusService>()
.Setup(v => v.GetBlockedProviders())
.Returns(_blockedLists);
_listMovies = Builder<ImportListMovie>.CreateListOfSize(5)
.Build().ToList();
}
private void GivenList(int id, bool enabled, bool enabledAuto, ImportListFetchResult fetchResult)
{
CreateListResult(id, enabled, enabledAuto, fetchResult);
}
private Mock<IImportList> CreateListResult(int id, bool enabled, bool enabledAuto, ImportListFetchResult fetchResult)
{
var importListDefinition = new ImportListDefinition { Id = id, EnableAuto = enabledAuto };
var mockImportList = new Mock<IImportList>();
mockImportList.SetupGet(s => s.Definition).Returns(importListDefinition);
mockImportList.SetupGet(s => s.Enabled).Returns(enabled);
mockImportList.SetupGet(s => s.EnableAuto).Returns(enabledAuto);
mockImportList.Setup(s => s.Fetch()).Returns(fetchResult);
_importLists.Add(mockImportList.Object);
return mockImportList;
}
private void GivenBlockedList(int id)
{
_blockedLists.Add(new ImportListStatus { ProviderId = id, DisabledTill = DateTime.UtcNow.AddDays(2) });
}
[Test]
public void should_return_failure_if_blocked_list()
{
var fetchResult = new ImportListFetchResult();
GivenList(1, true, true, fetchResult);
GivenBlockedList(1);
var listResult = Subject.Fetch();
listResult.AnyFailure.Should().BeTrue();
}
[Test]
public void should_return_failure_if_one_blocked_list_one_good_list()
{
var fetchResult1 = new ImportListFetchResult();
GivenList(1, true, true, fetchResult1);
GivenBlockedList(1);
var fetchResult2 = new ImportListFetchResult { Movies = _listMovies, AnyFailure = true };
GivenList(2, true, true, fetchResult2);
var listResult = Subject.Fetch();
listResult.AnyFailure.Should().BeTrue();
}
[Test]
public void should_return_failure_if_single_list_fails()
{
var fetchResult = new ImportListFetchResult { Movies = _listMovies, AnyFailure = true };
GivenList(1, true, true, fetchResult);
var listResult = Subject.Fetch();
listResult.AnyFailure.Should().BeTrue();
}
[Test]
public void should_return_failure_if_any_list_fails()
{
var fetchResult1 = new ImportListFetchResult { Movies = _listMovies, AnyFailure = true };
GivenList(1, true, true, fetchResult1);
var fetchResult2 = new ImportListFetchResult { Movies = _listMovies, AnyFailure = false };
GivenList(2, true, true, fetchResult2);
var listResult = Subject.Fetch();
listResult.AnyFailure.Should().BeTrue();
}
[Test]
public void should_return_early_if_no_available_lists()
{
var listResult = Subject.Fetch();
Mocker.GetMock<IImportListStatusService>()
.Verify(v => v.GetBlockedProviders(), Times.Never());
listResult.Movies.Count.Should().Be(0);
listResult.AnyFailure.Should().BeFalse();
}
[Test]
public void should_store_movies_if_list_doesnt_fail()
{
var listId = 1;
var fetchResult = new ImportListFetchResult { Movies = _listMovies, AnyFailure = false };
GivenList(listId, true, true, fetchResult);
var listResult = Subject.Fetch();
listResult.AnyFailure.Should().BeFalse();
}
[Test]
public void should_not_store_movies_if_list_fails()
{
var listId = 1;
var fetchResult = new ImportListFetchResult { Movies = _listMovies, AnyFailure = true };
GivenList(listId, true, true, fetchResult);
var listResult = Subject.Fetch();
listResult.AnyFailure.Should().BeTrue();
}
[Test]
public void should_only_store_movies_for_lists_that_dont_fail()
{
var passedListId = 1;
var fetchResult1 = new ImportListFetchResult { Movies = _listMovies, AnyFailure = false };
GivenList(passedListId, true, true, fetchResult1);
var failedListId = 2;
var fetchResult2 = new ImportListFetchResult { Movies = _listMovies, AnyFailure = true };
GivenList(failedListId, true, true, fetchResult2);
var listResult = Subject.Fetch();
listResult.AnyFailure.Should().BeTrue();
}
[Test]
public void should_return_all_results_for_all_lists()
{
var passedListId = 1;
var fetchResult1 = new ImportListFetchResult { Movies = _listMovies, AnyFailure = false };
GivenList(passedListId, true, true, fetchResult1);
var failedListId = 2;
var fetchResult2 = new ImportListFetchResult { Movies = _listMovies, AnyFailure = false };
GivenList(failedListId, true, true, fetchResult2);
var listResult = Subject.Fetch();
listResult.AnyFailure.Should().BeFalse();
listResult.Movies.Count.Should().Be(5);
}
}
}