Skip to content

Commit

Permalink
fix: ListPages tests
Browse files Browse the repository at this point in the history
  • Loading branch information
vlnevyhosteny committed Sep 6, 2023
1 parent 57401a1 commit d1d49b0
Show file tree
Hide file tree
Showing 5 changed files with 89 additions and 9 deletions.
2 changes: 1 addition & 1 deletion ButterCMS.Tests/ButterCMS.Tests.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
<PackageReference Include="NUnit3TestAdapter" Version="3.9.0" />
<PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="7.0.0" />
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
<PackageReference Include="WireMock.Net" Version="1.5.35" />
<PackageReference Include="RichardSzalay.MockHttp" Version="6.0.0" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\ButterCMS\ButterCMS.csproj" />
Expand Down
7 changes: 5 additions & 2 deletions ButterCMS.Tests/Common.cs
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
using Microsoft.Extensions.Configuration;
using System.IO;
using Microsoft.Extensions.Configuration;
using Newtonsoft.Json;
using RichardSzalay.MockHttp;

namespace ButterCMS.Tests
{
Expand All @@ -13,5 +14,7 @@ public static ButterCMSClient SetUpButterClient()
Configuration = builder.Build();
return new ButterCMSClient(Configuration["apiKey"]);
}

public static ButterCMSClientWithMockedHttp SetUpMockedButterClient() => new ButterCMSClientWithMockedHttp(new MockHttpMessageHandler());
}
}
31 changes: 25 additions & 6 deletions ButterCMS.Tests/ListPagesTests.cs
Original file line number Diff line number Diff line change
@@ -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
Expand All @@ -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<string, string>()
{
{"fields.thing1", "1"},
};
var response = butterClient.ListPages<things>("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>("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]
Expand Down
23 changes: 23 additions & 0 deletions ButterCMS.Tests/Mocks/ButterCMSClientWithMockedHttp.cs
Original file line number Diff line number Diff line change
@@ -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<T>(string url, T reponse) {
mockHttpMessageHandler
.When(url)
.Respond("application/json", JsonConvert.SerializeObject(reponse));
}
}
}
35 changes: 35 additions & 0 deletions ButterCMS.Tests/Mocks/PagesMocks.cs
Original file line number Diff line number Diff line change
@@ -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<things> Page = new Page<things>()
{
Name = "Bike page",
Slug = "bikes",
Updated = new System.DateTime(),
PageType = "BikeList",
Fields = Fields
};

public static PagesResponse<things> PagesResponse = new PagesResponse<things>()
{
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);
}
}
}

0 comments on commit d1d49b0

Please sign in to comment.