using System.Collections.Generic; using System.Linq; using FizzWare.NBuilder; using Moq; using NUnit.Framework; using NzbDrone.Common.Crypto; using NzbDrone.Core.Books; using NzbDrone.Core.Download.Pending; using NzbDrone.Core.Parser; using NzbDrone.Core.Parser.Model; using NzbDrone.Core.Test.Framework; namespace NzbDrone.Core.Test.Download.Pending.PendingReleaseServiceTests { [TestFixture] public class RemovePendingFixture : CoreTest { private List _pending; private Book _book; [SetUp] public void Setup() { _pending = new List(); _book = Builder.CreateNew() .Build(); Mocker.GetMock() .Setup(s => s.AllByAuthorId(It.IsAny())) .Returns(_pending); Mocker.GetMock() .Setup(s => s.All()) .Returns(_pending); Mocker.GetMock() .Setup(s => s.GetAuthor(It.IsAny())) .Returns(new Author()); Mocker.GetMock() .Setup(s => s.GetAuthors(It.IsAny>())) .Returns(new List { new Author() }); Mocker.GetMock() .Setup(s => s.GetBooks(It.IsAny(), It.IsAny(), null)) .Returns(new List { _book }); } private void AddPending(int id, string book) { _pending.Add(new PendingRelease { Id = id, ParsedBookInfo = new ParsedBookInfo { BookTitle = book } }); } [Test] public void should_remove_same_release() { AddPending(id: 1, book: "Book"); var queueId = HashConverter.GetHashInt31(string.Format("pending-{0}-book{1}", 1, _book.Id)); Subject.RemovePendingQueueItems(queueId); AssertRemoved(1); } [Test] public void should_remove_multiple_releases_release() { AddPending(id: 1, book: "Book 1"); AddPending(id: 2, book: "Book 2"); AddPending(id: 3, book: "Book 3"); AddPending(id: 4, book: "Book 3"); var queueId = HashConverter.GetHashInt31(string.Format("pending-{0}-book{1}", 3, _book.Id)); Subject.RemovePendingQueueItems(queueId); AssertRemoved(3, 4); } [Test] public void should_not_remove_diffrent_books() { AddPending(id: 1, book: "Book 1"); AddPending(id: 2, book: "Book 1"); AddPending(id: 3, book: "Book 2"); AddPending(id: 4, book: "Book 3"); var queueId = HashConverter.GetHashInt31(string.Format("pending-{0}-book{1}", 1, _book.Id)); Subject.RemovePendingQueueItems(queueId); AssertRemoved(1, 2); } private void AssertRemoved(params int[] ids) { Mocker.GetMock().Verify(c => c.DeleteMany(It.Is>(s => s.SequenceEqual(ids)))); } } }