From d1d49b0f90581cabfdc03f62224379c531ffe5e0 Mon Sep 17 00:00:00 2001 From: Vlada Nevyhosteny Date: Sun, 3 Sep 2023 08:59:13 +0200 Subject: [PATCH] fix: ListPages tests --- ButterCMS.Tests/ButterCMS.Tests.csproj | 2 +- ButterCMS.Tests/Common.cs | 7 ++-- ButterCMS.Tests/ListPagesTests.cs | 31 ++++++++++++---- .../Mocks/ButterCMSClientWithMockedHttp.cs | 23 ++++++++++++ ButterCMS.Tests/Mocks/PagesMocks.cs | 35 +++++++++++++++++++ 5 files changed, 89 insertions(+), 9 deletions(-) create mode 100644 ButterCMS.Tests/Mocks/ButterCMSClientWithMockedHttp.cs create mode 100644 ButterCMS.Tests/Mocks/PagesMocks.cs diff --git a/ButterCMS.Tests/ButterCMS.Tests.csproj b/ButterCMS.Tests/ButterCMS.Tests.csproj index afec238..face1b7 100644 --- a/ButterCMS.Tests/ButterCMS.Tests.csproj +++ b/ButterCMS.Tests/ButterCMS.Tests.csproj @@ -8,7 +8,7 @@ - + diff --git a/ButterCMS.Tests/Common.cs b/ButterCMS.Tests/Common.cs index 569e3b9..5e01d9c 100644 --- a/ButterCMS.Tests/Common.cs +++ b/ButterCMS.Tests/Common.cs @@ -1,5 +1,6 @@ -using Microsoft.Extensions.Configuration; -using System.IO; +using Microsoft.Extensions.Configuration; +using Newtonsoft.Json; +using RichardSzalay.MockHttp; namespace ButterCMS.Tests { @@ -13,5 +14,7 @@ public static ButterCMSClient SetUpButterClient() Configuration = builder.Build(); return new ButterCMSClient(Configuration["apiKey"]); } + + public static ButterCMSClientWithMockedHttp SetUpMockedButterClient() => new ButterCMSClientWithMockedHttp(new MockHttpMessageHandler()); } } diff --git a/ButterCMS.Tests/ListPagesTests.cs b/ButterCMS.Tests/ListPagesTests.cs index ed19a36..e786450 100644 --- a/ButterCMS.Tests/ListPagesTests.cs +++ b/ButterCMS.Tests/ListPagesTests.cs @@ -1,6 +1,8 @@ -using ButterCMS.Tests.Models; +using ButterCMS.Models; +using ButterCMS.Tests.Models; using NUnit.Framework; using System.Collections.Generic; +using System.Linq; using System.Threading.Tasks; namespace ButterCMS.Tests @@ -9,30 +11,47 @@ namespace ButterCMS.Tests [Category("ListPages")] public class ListPagesTests { - private ButterCMSClient butterClient; + private ButterCMSClientWithMockedHttp butterClient; - [OneTimeSetUp] + [SetUp] public void SetUp() { - butterClient = Common.SetUpButterClient(); + butterClient = Common.SetUpMockedButterClient(); } [Test] public void ListPages_ShouldReturnPages() { + butterClient.MockSuccessfullPagesResponse(); + var dict = new Dictionary() { {"fields.thing1", "1"}, }; var response = butterClient.ListPages("things", dict); - Assert.IsNotNull(response); + var page = response.Data.First(); + Assert.AreEqual(page.Name, PagesMocks.Page.Name); + Assert.AreEqual(page.Slug, PagesMocks.Page.Slug); + Assert.AreEqual(page.Updated, PagesMocks.Page.Updated); + Assert.AreEqual(page.PageType, PagesMocks.Page.PageType); + Assert.AreEqual(page.Fields.thing1, PagesMocks.Fields.thing1); + Assert.AreEqual(page.Fields.thing2, PagesMocks.Fields.thing2); } [Test] public async Task ListPagesAsync_ShouldReturnPages() { + butterClient.MockSuccessfullPagesResponse(); + var response = await butterClient.ListPagesAsync("things"); - Assert.IsNotNull(response); + + var page = response.Data.First(); + Assert.AreEqual(page.Name, PagesMocks.Page.Name); + Assert.AreEqual(page.Slug, PagesMocks.Page.Slug); + Assert.AreEqual(page.Updated, PagesMocks.Page.Updated); + Assert.AreEqual(page.PageType, PagesMocks.Page.PageType); + Assert.AreEqual(page.Fields.thing1, PagesMocks.Fields.thing1); + Assert.AreEqual(page.Fields.thing2, PagesMocks.Fields.thing2); } [Test] diff --git a/ButterCMS.Tests/Mocks/ButterCMSClientWithMockedHttp.cs b/ButterCMS.Tests/Mocks/ButterCMSClientWithMockedHttp.cs new file mode 100644 index 0000000..ee2b31e --- /dev/null +++ b/ButterCMS.Tests/Mocks/ButterCMSClientWithMockedHttp.cs @@ -0,0 +1,23 @@ +using RichardSzalay.MockHttp; +using Newtonsoft.Json; + +namespace ButterCMS.Tests +{ + public class ButterCMSClientWithMockedHttp : ButterCMSClient + { + public static string MockedApiKey = "test-key"; + + public readonly MockHttpMessageHandler mockHttpMessageHandler; + + public ButterCMSClientWithMockedHttp(MockHttpMessageHandler mockHttpMessageHandler) : base(MockedApiKey, httpMessageHandler: mockHttpMessageHandler) + { + this.mockHttpMessageHandler = mockHttpMessageHandler; + } + + public void MockSuccessfullJSONResponse(string url, T reponse) { + mockHttpMessageHandler + .When(url) + .Respond("application/json", JsonConvert.SerializeObject(reponse)); + } + } +} diff --git a/ButterCMS.Tests/Mocks/PagesMocks.cs b/ButterCMS.Tests/Mocks/PagesMocks.cs new file mode 100644 index 0000000..966a107 --- /dev/null +++ b/ButterCMS.Tests/Mocks/PagesMocks.cs @@ -0,0 +1,35 @@ +using ButterCMS.Tests.Models; +using ButterCMS.Models; + +namespace ButterCMS.Tests +{ + public static class PagesMocks + { + public static things Fields = new things() { thing1 = "Bike", thing2 = "MTB" }; + + public static Page Page = new Page() + { + Name = "Bike page", + Slug = "bikes", + Updated = new System.DateTime(), + PageType = "BikeList", + Fields = Fields + }; + + public static PagesResponse PagesResponse = new PagesResponse() + { + Data = new[] { Page }, + Meta = new PageMeta() + { + Count = 1, + NextPage = null, + PreviousPage = null + } + }; + + public static void MockSuccessfullPagesResponse(this ButterCMSClientWithMockedHttp butterClient) + { + butterClient.MockSuccessfullJSONResponse($"https://api.buttercms.com/v2/pages/things/?auth_token={ButterCMSClientWithMockedHttp.MockedApiKey}", PagesResponse); + } + } +}