From dacfb846989526ecd61763fa902cb6724a5fbbaa Mon Sep 17 00:00:00 2001 From: Your Name Date: Tue, 19 Oct 2021 19:19:08 -0500 Subject: [PATCH] use case-insensitive response header --- .../Core/HeaderManagerTests.cs | 26 ++++++++++++------- .../Service/CardServiceTests.cs | 15 +++++++++++ src/MtgApiManager.Lib/Core/HeaderManager.cs | 17 ++++++++---- src/MtgApiManager.Lib/Core/IHeaderManager.cs | 4 +-- 4 files changed, 46 insertions(+), 16 deletions(-) diff --git a/src/MtgApiManager.Lib.Test/Core/HeaderManagerTests.cs b/src/MtgApiManager.Lib.Test/Core/HeaderManagerTests.cs index a8c1967..f84bc8c 100644 --- a/src/MtgApiManager.Lib.Test/Core/HeaderManagerTests.cs +++ b/src/MtgApiManager.Lib.Test/Core/HeaderManagerTests.cs @@ -1,7 +1,7 @@ using System; -using System.Collections.Generic; using MtgApiManager.Lib.Core; using Xunit; +using Flurl.Util; namespace MtgApiManager.Lib.Test.Core { @@ -24,14 +24,16 @@ public void Get_CacheNull_ReturnsDefault() public void Get_FailsConvertion_ReturnsDefault() { // arrange - var items = new List<(string, string)> + var items = new [] { (ResponseHeader.PageSize.Name, "Not an integer"), (ResponseHeader.Count.Name, "100"), }; + var headers = new NameValueList(items, false); + var manager = new HeaderManager(); - manager.Update(items); + manager.Update(headers); // act var result = manager.Get(ResponseHeader.PageSize); @@ -44,14 +46,16 @@ public void Get_FailsConvertion_ReturnsDefault() public void Get_KeyDoesNotExist_ReturnsDefault() { // arrange - var items = new List<(string, string)> + var items = new [] { ("key1", "value1"), ("key2", "value2"), }; + var headers = new NameValueList(items, false); + var manager = new HeaderManager(); - manager.Update(items); + manager.Update(headers); // act var result = manager.Get(ResponseHeader.PageSize); @@ -65,14 +69,16 @@ public void Get_KeyExists_Success() { // arrange const int PAGE_SIZE = 50; - var items = new List<(string, string)> + var items = new [] { (ResponseHeader.PageSize.Name, PAGE_SIZE.ToString()), (ResponseHeader.Count.Name, "100"), }; + var headers = new NameValueList(items, false); + var manager = new HeaderManager(); - manager.Update(items); + manager.Update(headers); // act var result = manager.Get(ResponseHeader.PageSize); @@ -85,16 +91,18 @@ public void Get_KeyExists_Success() public void Update_CacheUpdated_Success() { // arrange - var items = new List<(string, string)> + var items = new [] { (ResponseHeader.PageSize.Name, "50"), (ResponseHeader.Count.Name, "100"), }; + var headers = new NameValueList(items, false); + var manager = new HeaderManager(); // act - manager.Update(items); + manager.Update(headers); // assert Assert.NotEmpty(manager.Get(ResponseHeader.PageSize)); diff --git a/src/MtgApiManager.Lib.Test/Service/CardServiceTests.cs b/src/MtgApiManager.Lib.Test/Service/CardServiceTests.cs index 09e7002..09c0ff0 100644 --- a/src/MtgApiManager.Lib.Test/Service/CardServiceTests.cs +++ b/src/MtgApiManager.Lib.Test/Service/CardServiceTests.cs @@ -116,6 +116,21 @@ public async Task AllAsync_Success() _mockRepository.VerifyAll(); } + [Fact] + public async Task AllAsync_NoMock_EqualPageSize() + { + const int pageSize = 50; + var serviceProvider = new MtgServiceProvider(); + var service = serviceProvider.GetCardService(); + + var result = await service + .Where(x => x.Page, 1) + .Where(x => x.PageSize, pageSize) + .AllAsync(); + + Assert.Equal(pageSize, result.PagingInfo.PageSize); + } + [Fact] public async Task FindAsync_ById_Success() { diff --git a/src/MtgApiManager.Lib/Core/HeaderManager.cs b/src/MtgApiManager.Lib/Core/HeaderManager.cs index 61ae41d..8e02bdd 100644 --- a/src/MtgApiManager.Lib/Core/HeaderManager.cs +++ b/src/MtgApiManager.Lib/Core/HeaderManager.cs @@ -1,7 +1,7 @@ using System; -using System.Collections.Generic; using System.Linq; using System.Threading; +using Flurl.Util; namespace MtgApiManager.Lib.Core { @@ -39,7 +39,7 @@ public T Get(ResponseHeader responseHeader) } } - public void Update(IReadOnlyList<(string Name, string Value)> headers) + public void Update(IReadOnlyNameValueList headers) { if (headers == null) { @@ -50,9 +50,16 @@ public void Update(IReadOnlyList<(string Name, string Value)> headers) try { - _headersCache = headers.ToLookup( - k => k.Name, - v => v.Value); + // nested GetAll is technically O(n^2) instead of the original O(n) + + _headersCache = Enumeration + .GetAll() + .SelectMany( + rh => headers.GetAll(rh.Name), + (rh, Value) => (rh.Name, Value)) + .ToLookup( + k => k.Name, + v => v.Value); } finally { diff --git a/src/MtgApiManager.Lib/Core/IHeaderManager.cs b/src/MtgApiManager.Lib/Core/IHeaderManager.cs index e96daf6..bfbc5f9 100644 --- a/src/MtgApiManager.Lib/Core/IHeaderManager.cs +++ b/src/MtgApiManager.Lib/Core/IHeaderManager.cs @@ -1,4 +1,4 @@ -using System.Collections.Generic; +using Flurl.Util; namespace MtgApiManager.Lib.Core { @@ -6,6 +6,6 @@ internal interface IHeaderManager { T Get(ResponseHeader responseHeader); - void Update(IReadOnlyList<(string Name, string Value)> headers); + void Update(IReadOnlyNameValueList headers); } } \ No newline at end of file