using System; using System.Xml; using FluentAssertions; using Moq; using NUnit.Framework; using NzbDrone.Common.Http; using NzbDrone.Core.Indexers.Newznab; using NzbDrone.Core.Test.Framework; using NzbDrone.Test.Common; namespace NzbDrone.Core.Test.IndexerTests.NewznabTests { [TestFixture] public class NewznabCapabilitiesProviderFixture : CoreTest { private NewznabSettings _settings; private string _caps; [SetUp] public void SetUp() { _settings = new NewznabSettings() { BaseUrl = "http://indxer.local" }; _caps = ReadAllText("Files/Indexers/Newznab/newznab_caps.xml"); } private void GivenCapsResponse(string caps) { Mocker.GetMock() .Setup(o => o.Get(It.IsAny())) .Returns(r => new HttpResponse(r, new HttpHeader(), caps)); } [Test] public void should_not_request_same_caps_twice() { GivenCapsResponse(_caps); Subject.GetCapabilities(_settings); Subject.GetCapabilities(_settings); Mocker.GetMock() .Verify(o => o.Get(It.IsAny()), Times.Once()); } [Test] public void should_report_pagesize() { GivenCapsResponse(_caps); var caps = Subject.GetCapabilities(_settings); caps.DefaultPageSize.Should().Be(25); caps.MaxPageSize.Should().Be(60); } [Test] public void should_use_default_pagesize_if_missing() { GivenCapsResponse(_caps.Replace("() .Setup(o => o.Get(It.IsAny())) .Throws(); Assert.Throws(() => Subject.GetCapabilities(_settings)); } [Test] public void should_throw_if_xml_invalid() { GivenCapsResponse(_caps.Replace("")); Assert.Throws(() => Subject.GetCapabilities(_settings)); } [Test] public void should_not_throw_on_xml_data_unexpected() { GivenCapsResponse(_caps.Replace("5030", "asdf")); var result = Subject.GetCapabilities(_settings); result.Should().NotBeNull(); } } }