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 { private List _importLists; private List _blockedLists; private List _listMovies; [SetUp] public void Setup() { _importLists = new List(); _blockedLists = new List(); Mocker.GetMock() .Setup(v => v.Enabled(It.IsAny())) .Returns(_importLists); Mocker.GetMock() .Setup(v => v.GetBlockedProviders()) .Returns(_blockedLists); _listMovies = Builder.CreateListOfSize(5) .Build().ToList(); } private void GivenList(int id, bool enabled, bool enabledAuto, ImportListFetchResult fetchResult) { CreateListResult(id, enabled, enabledAuto, fetchResult); } private Mock CreateListResult(int id, bool enabled, bool enabledAuto, ImportListFetchResult fetchResult) { var importListDefinition = new ImportListDefinition { Id = id, EnableAuto = enabledAuto }; var mockImportList = new Mock(); 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() .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); } } }