From 64796e38ecacc63f3ddacda641e068aaab830153 Mon Sep 17 00:00:00 2001 From: Marius Michaud Date: Sat, 7 Mar 2026 18:17:13 +0100 Subject: [PATCH] Fix: Return empty Freebox task list instead of null --- .../FreeboxDownloadProxyFixture.cs | 68 +++++++++++++++++++ .../FreeboxDownload/FreeboxDownloadProxy.cs | 2 +- 2 files changed, 69 insertions(+), 1 deletion(-) create mode 100644 src/NzbDrone.Core.Test/Download/DownloadClientTests/FreeboxDownloadTests/FreeboxDownloadProxyFixture.cs diff --git a/src/NzbDrone.Core.Test/Download/DownloadClientTests/FreeboxDownloadTests/FreeboxDownloadProxyFixture.cs b/src/NzbDrone.Core.Test/Download/DownloadClientTests/FreeboxDownloadTests/FreeboxDownloadProxyFixture.cs new file mode 100644 index 0000000000..93630865ac --- /dev/null +++ b/src/NzbDrone.Core.Test/Download/DownloadClientTests/FreeboxDownloadTests/FreeboxDownloadProxyFixture.cs @@ -0,0 +1,68 @@ +using System; +using System.Net; +using System.Text; +using FluentAssertions; +using Moq; +using NUnit.Framework; +using NzbDrone.Common.Cache; +using NzbDrone.Common.Http; +using NzbDrone.Core.Download.Clients.FreeboxDownload; +using NzbDrone.Core.Test.Framework; + +namespace NzbDrone.Core.Test.Download.DownloadClientTests.FreeboxDownloadTests +{ + [TestFixture] + public class FreeboxDownloadProxyFixture : CoreTest + { + protected FreeboxDownloadSettings _settings; + protected string _cachedHeaderKeyValue; + protected byte[] _successfulEmptyResponseBytes; + + protected Mock> _cachedHeaderKey; + + [SetUp] + public void Setup() + { + _settings = new FreeboxDownloadSettings() + { + Host = "127.0.0.1", + Port = 443, + ApiUrl = "/api/v1/", + AppId = "someid", + AppToken = "S0mEv3RY1oN9T0k3n" + }; + + _cachedHeaderKeyValue = "abcdefg123456"; + + var rawSuccessfulEmptyResponse = "{ \"success\": true }"; + _successfulEmptyResponseBytes = Encoding.UTF8.GetBytes(rawSuccessfulEmptyResponse); + + _cachedHeaderKey = Mocker.GetMock>(); + Mocker.GetMock() + .Setup(c => c.GetCache(It.IsAny(), It.IsAny())) + .Returns(_cachedHeaderKey.Object); + } + + protected void GivenCachedHeaderKey() + { + _cachedHeaderKey.Setup(c => c.Find(It.IsAny())) + .Returns(r => _cachedHeaderKeyValue); + } + + protected void GivenSuccessfulEmptyResponse() + { + Mocker.GetMock() + .Setup(s => s.Execute(It.IsAny())) + .Returns(r => new HttpResponse(r, new HttpHeader(), _successfulEmptyResponseBytes, statusCode: HttpStatusCode.OK)); + } + + [Test] + public void GetTasks_WithSuccessfulEmptyResponse_ShouldBeEmpty() + { + GivenCachedHeaderKey(); + GivenSuccessfulEmptyResponse(); + + Subject.GetTasks(_settings).Should().BeEmpty(); + } + } +} diff --git a/src/NzbDrone.Core/Download/Clients/FreeboxDownload/FreeboxDownloadProxy.cs b/src/NzbDrone.Core/Download/Clients/FreeboxDownload/FreeboxDownloadProxy.cs index ae952e2b9d..61a8b19425 100644 --- a/src/NzbDrone.Core/Download/Clients/FreeboxDownload/FreeboxDownloadProxy.cs +++ b/src/NzbDrone.Core/Download/Clients/FreeboxDownload/FreeboxDownloadProxy.cs @@ -110,7 +110,7 @@ public List GetTasks(FreeboxDownloadSettings settings) { var request = BuildRequest(settings).Resource("/downloads/").Build(); - return ProcessRequest>(request, settings).Result; + return ProcessRequest>(request, settings).Result ?? new (); } private static string BuildCachedHeaderKey(FreeboxDownloadSettings settings)