Skip to content

Commit

Permalink
✨ add support for comparing nullable int/long values with enums
Browse files Browse the repository at this point in the history
- early fail for null value
- otherwise just the same :D
  • Loading branch information
fluffynuts committed Feb 13, 2024
1 parent dd2a85c commit 69adccc
Show file tree
Hide file tree
Showing 11 changed files with 259 additions and 13 deletions.
3 changes: 2 additions & 1 deletion src/NExpect.Matchers.AspNetCore.Tests/GlobalUsings.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
global using NExpect;
global using NUnit.Framework;
global using static NExpect.AspNetCoreExpectations;
global using static NExpect.Expectations;
global using static NExpect.Expectations;
global using static PeanutButter.RandomGenerators.RandomValueGen;
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,8 @@
<PackageReference Include="nunit" Version="4.0.1" />
<PackageReference Include="NUnit3TestAdapter" Version="4.5.0" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.8.0" />
<PackageReference Include="PeanutButter.RandomGenerators" Version="3.0.244" />
<PackageReference Include="PeanutButter.TestUtils.AspNetCore" Version="3.0.244" />
<PackageReference Include="PeanutButter.RandomGenerators" Version="3.0.265" />
<PackageReference Include="PeanutButter.TestUtils.AspNetCore" Version="3.0.265" />
<PackageReference Include="Quackers.TestLogger" Version="1.0.24" />
</ItemGroup>

Expand Down
47 changes: 47 additions & 0 deletions src/NExpect.Matchers.AspNetCore.Tests/StatusCodeTests.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
using System.Net;
using PeanutButter.TestUtils.AspNetCore.Builders;

namespace NExpect.Matchers.AspNet.Tests
{
[TestFixture]
public class StatusCodeTests
{
[Test]
public void LiveIssue_ComparingResponseStatusCodeToEnum()
{
// Arrange
var statusCode = GetRandom<HttpStatusCode>();
var res = HttpResponseBuilder.Create()
.WithStatusCode(statusCode)
.Build();
// Act
Assert.That(
() =>
{
Expect(res.StatusCode)
.To.Equal(statusCode);
},
Throws.Nothing
);
// Assert
}

[Test]
public void LiveIssue_NullableLongVsEnum()
{
// Arrange
var statusCode = GetRandom<HttpStatusCode>();
var res = HttpResponseBuilder.Create()
.WithStatusCode(statusCode)
.Build();
long? testMe = res.StatusCode;
// Act
Assert.That(() =>
{
Expect(testMe)
.To.Equal(statusCode);
}, Throws.Nothing);
// Assert
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,7 @@
<ItemGroup>
<PackageReference Include="Microsoft.SourceLink.GitHub" Version="8.0.0" PrivateAssets="All"/>
<PackageReference Include="System.Configuration.ConfigurationManager" Version="8.0.0"/>
<PackageReference Include="PeanutButter.TestUtils.AspNetCore" Version="3.0.244"/>
<PackageReference Include="PeanutButter.TestUtils.AspNetCore" Version="3.0.265"/>
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\NExpect\NExpect.csproj"/>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
<PackageReference Include="NUnit" Version="4.0.1" />
<PackageReference Include="NUnit3TestAdapter" Version="4.5.0" />
<PackageReference Include="Microsoft.AspNet.Mvc" Version="5.3.0" />
<PackageReference Include="PeanutButter.RandomGenerators" Version="3.0.244" />
<PackageReference Include="PeanutButter.RandomGenerators" Version="3.0.265" />
<PackageReference Include="Quackers.TestLogger" Version="1.0.24" />
</ItemGroup>

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,8 @@
<PackageReference Include="nunit" Version="4.0.1" />
<PackageReference Include="NUnit3TestAdapter" Version="4.5.0" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.8.0" />
<PackageReference Include="PeanutButter.RandomGenerators" Version="3.0.244" />
<PackageReference Include="PeanutButter.Utils" Version="3.0.244" />
<PackageReference Include="PeanutButter.RandomGenerators" Version="3.0.265" />
<PackageReference Include="PeanutButter.Utils" Version="3.0.265" />
<PackageReference Include="Quackers.TestLogger" Version="1.0.24" />
</ItemGroup>

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
<PackageReference Include="nunit" Version="4.0.1" />
<PackageReference Include="NUnit3TestAdapter" Version="4.5.0" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.8.0" />
<PackageReference Include="PeanutButter.RandomGenerators" Version="3.0.244" />
<PackageReference Include="PeanutButter.RandomGenerators" Version="3.0.265" />
<PackageReference Include="Quackers.TestLogger" Version="1.0.24" />
</ItemGroup>

Expand Down
3 changes: 2 additions & 1 deletion src/NExpect.Tests/GlobalUsings.cs
Original file line number Diff line number Diff line change
@@ -1,2 +1,3 @@
global using NExpect;
global using static NExpect.Expectations;
global using static NExpect.Expectations;
global using static PeanutButter.RandomGenerators.RandomValueGen;
4 changes: 2 additions & 2 deletions src/NExpect.Tests/NExpect.Tests.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,8 @@
<PackageReference Include="NSubstitute" Version="5.1.0" />
<PackageReference Include="nunit" Version="4.0.1" />
<PackageReference Include="nunit3testadapter" Version="4.5.0" />
<PackageReference Include="PeanutButter.DuckTyping" Version="3.0.244" />
<PackageReference Include="PeanutButter.RandomGenerators" Version="3.0.244" />
<PackageReference Include="PeanutButter.DuckTyping" Version="3.0.265" />
<PackageReference Include="PeanutButter.RandomGenerators" Version="3.0.265" />
<PackageReference Include="Quackers.TestLogger" Version="1.0.24" />
<PackageReference Include="system.valuetuple" Version="4.5.0" />
</ItemGroup>
Expand Down
199 changes: 198 additions & 1 deletion src/NExpect/IntsAndEnumsMatchers.cs
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
using NExpect.Interfaces;
using NExpect.MatcherLogic;
using static NExpect.Implementations.MessageHelpers;

// ReSharper disable MemberCanBePrivate.Global


Expand Down Expand Up @@ -385,6 +386,193 @@ Func<string> customMessageGenerator
);
}

/// <summary>
/// Tests if the provided integer value is equal
/// to the provided enum value
/// </summary>
/// <param name="to"></param>
/// <param name="enumValue"></param>
/// <typeparam name="T"></typeparam>
/// <returns></returns>
public static IMore<long?> Equal<T>(
this ITo<long?> to,
T enumValue
) where T : Enum
{
return to.Equal(enumValue, NULL_STRING);
}

/// <summary>
/// Tests if the provided integer value is equal
/// to the provided enum value
/// </summary>
/// <param name="to"></param>
/// <param name="enumValue"></param>
/// <param name="customMessage"></param>
/// <typeparam name="T"></typeparam>
/// <returns></returns>
public static IMore<long?> Equal<T>(
this ITo<long?> to,
T enumValue,
string customMessage
) where T : Enum
{
return to.Equal(
enumValue,
() => customMessage
);
}

/// <summary>
/// Tests if the provided integer value is equal
/// to the provided enum value
/// </summary>
/// <param name="to"></param>
/// <param name="enumValue"></param>
/// <param name="customMessageGenerator"></param>
/// <typeparam name="T"></typeparam>
/// <returns></returns>
public static IMore<long?> Equal<T>(
this ITo<long?> to,
T enumValue,
Func<string> customMessageGenerator
) where T : Enum
{
return to.AddMatcher(
actual =>
VerifyEquality(
enumValue,
actual,
customMessageGenerator,
comparingEnumToInt: false
)
);
}

/// <summary>
/// Tests if the provided integer value is equal
/// to the provided enum value
/// </summary>
/// <param name="to"></param>
/// <param name="enumValue"></param>
/// <typeparam name="T"></typeparam>
/// <returns></returns>
public static IMore<long?> Equal<T>(
this IToAfterNot<long?> to,
T enumValue
) where T : Enum
{
return to.Equal(enumValue, NULL_STRING);
}

/// <summary>
/// Tests if the provided integer value is equal
/// to the provided enum value
/// </summary>
/// <param name="to"></param>
/// <param name="enumValue"></param>
/// <param name="customMessage"></param>
/// <typeparam name="T"></typeparam>
/// <returns></returns>
public static IMore<long?> Equal<T>(
this IToAfterNot<long?> to,
T enumValue,
string customMessage
) where T : Enum
{
return to.Equal(
enumValue,
() => customMessage
);
}

/// <summary>
/// Tests if the provided integer value is equal
/// to the provided enum value
/// </summary>
/// <param name="to"></param>
/// <param name="enumValue"></param>
/// <param name="customMessageGenerator"></param>
/// <typeparam name="T"></typeparam>
/// <returns></returns>
public static IMore<long?> Equal<T>(
this IToAfterNot<long?> to,
T enumValue,
Func<string> customMessageGenerator
) where T : Enum
{
return to.AddMatcher(
actual => VerifyEquality(
enumValue,
actual,
customMessageGenerator,
comparingEnumToInt: false
)
);
}

/// <summary>
/// Tests if the provided integer value is equal
/// to the provided enum value
/// </summary>
/// <param name="to"></param>
/// <param name="enumValue"></param>
/// <typeparam name="T"></typeparam>
/// <returns></returns>
public static IMore<long?> Equal<T>(
this INotAfterTo<long?> to,
T enumValue
) where T : Enum
{
return to.Equal(enumValue, NULL_STRING);
}

/// <summary>
/// Tests if the provided integer value is equal
/// to the provided enum value
/// </summary>
/// <param name="to"></param>
/// <param name="enumValue"></param>
/// <param name="customMessage"></param>
/// <typeparam name="T"></typeparam>
/// <returns></returns>
public static IMore<long?> Equal<T>(
this INotAfterTo<long?> to,
T enumValue,
string customMessage
) where T : Enum
{
return to.Equal(
enumValue,
() => customMessage
);
}

/// <summary>
/// Tests if the provided integer value is equal
/// to the provided enum value
/// </summary>
/// <param name="to"></param>
/// <param name="enumValue"></param>
/// <param name="customMessageGenerator"></param>
/// <typeparam name="T"></typeparam>
/// <returns></returns>
public static IMore<long?> Equal<T>(
this INotAfterTo<long?> to,
T enumValue,
Func<string> customMessageGenerator
) where T : Enum
{
return to.AddMatcher(
actual => VerifyEquality(
enumValue,
actual,
customMessageGenerator,
comparingEnumToInt: false
)
);
}


private static IMore<T> ResolveResult<T>(
this ICanAddMatcher<T> canAddMatcher,
Expand All @@ -405,11 +593,20 @@ bool comparingEnumToInt

private static IMatcherResult VerifyEquality<T>(
T enumValue,
long intValue,
long? nullableIntValue,
Func<string> customMessageGenerator,
bool comparingEnumToInt
) where T : Enum
{
if (nullableIntValue is null)
{
return new EnforcedMatcherResult(
false,
() => "Cannot compare null with an enum value"
);
}

var intValue = nullableIntValue.Value;
var earlyFail = VerifyWithinRange<T>(intValue, customMessageGenerator);
if (earlyFail is not null)
{
Expand Down
2 changes: 1 addition & 1 deletion src/PeanutButter
Submodule PeanutButter updated 73 files
+1 −1 source/Async/PeanutButter.Async.Tests/PeanutButter.Async.Tests.csproj
+1 −1 source/Async/PeanutButter.Async/Package.nuspec
+1 −1 source/Async/PeanutButter.TestUtils.Async.Tests/PeanutButter.TestUtils.Async.Tests.csproj
+7 −7 source/Async/PeanutButter.TestUtils.Async/Package.nuspec
+1 −1 source/DatabaseHelpers/PeanutButter.DatabaseHelpers.More.Tests/PeanutButter.DatabaseHelpers.More.Tests.csproj
+1 −1 source/DatabaseHelpers/PeanutButter.DatabaseHelpers.Tests/PeanutButter.DatabaseHelpers.Tests.vbproj
+2 −2 source/DatabaseHelpers/PeanutButter.DatabaseHelpers/Package.nuspec
+2 −2 source/INI/PeanutButter.INI.Tests/PeanutButter.INI.Tests.csproj
+1 −1 source/INI/PeanutButter.INI/Package.nuspec
+2 −2 source/NugetPackageVersionIncrementer.Tests/NugetPackageVersionIncrementer.Tests.csproj
+1 −1 ...vers/PeanutButter.SimpleHTTPServer.Testability.Tests/PeanutButter.SimpleHTTPServer.Testability.Tests.csproj
+7 −7 source/SimpleServers/PeanutButter.SimpleHTTPServer.Testability/Package.nuspec
+1 −1 source/SimpleServers/PeanutButter.SimpleHTTPServer.Tests/PeanutButter.SimpleHTTPServer.Tests.csproj
+5 −5 source/SimpleServers/PeanutButter.SimpleHTTPServer/Package.nuspec
+1 −1 source/SimpleServers/PeanutButter.SimpleTcpServer.Tests/PeanutButter.SimpleTcpServer.Tests.csproj
+3 −3 source/SimpleServers/PeanutButter.SimpleTcpServer/Package.nuspec
+5 −5 source/TempDb/PeanutButter.TempDb.LocalDb/Package.nuspec
+1 −1 source/TempDb/PeanutButter.TempDb.MySql.Connector.Tests/PeanutButter.TempDb.MySql.Connector.Tests.csproj
+7 −7 source/TempDb/PeanutButter.TempDb.MySql.Connector/Package.nuspec
+1 −1 source/TempDb/PeanutButter.TempDb.MySql.Data.Tests/PeanutButter.TempDb.MySql.Data.Tests.csproj
+9 −9 source/TempDb/PeanutButter.TempDb.MySql.Data/Package.nuspec
+1 −1 source/TempDb/PeanutButter.TempDb.Runner.Tests/PeanutButter.TempDb.Runner.Tests.csproj
+1 −1 source/TempDb/PeanutButter.TempDb.Runner/Package.nuspec
+5 −5 source/TempDb/PeanutButter.TempDb.SqlCe/Package.nuspec
+5 −5 source/TempDb/PeanutButter.TempDb.Sqlite/Package.nuspec
+1 −1 source/TempDb/PeanutButter.TempDb.Tests/PeanutButter.TempDb.Tests.csproj
+3 −3 source/TempDb/PeanutButter.TempDb/Package.nuspec
+1 −1 source/TempDb/PeanutButter.TempRedis.Tests/PeanutButter.TempRedis.Tests.csproj
+5 −5 source/TempDb/PeanutButter.TempRedis/Package.nuspec
+1 −1 source/TestUtils/PeanutButter.RandomGenerators.Core.Tests/PeanutButter.RandomGenerators.Core.Tests.csproj
+1 −1 source/TestUtils/PeanutButter.RandomGenerators.Ducked.Tests/PeanutButter.RandomGenerators.Ducked.Tests.csproj
+1 −1 source/TestUtils/PeanutButter.RandomGenerators.Tests/PeanutButter.RandomGenerators.Tests.csproj
+5 −5 source/TestUtils/PeanutButter.RandomGenerators/Package.nuspec
+3 −3 source/TestUtils/PeanutButter.TestUtils.AspNetCore.Tests/PeanutButter.TestUtils.AspNetCore.Tests.csproj
+51 −0 source/TestUtils/PeanutButter.TestUtils.AspNetCore.Tests/TestHttpContextBuilder.cs
+44 −3 source/TestUtils/PeanutButter.TestUtils.AspNetCore/Builders/HttpContextBuilder.cs
+5 −5 source/TestUtils/PeanutButter.TestUtils.AspNetCore/Package.nuspec
+1 −1 source/TestUtils/PeanutButter.TestUtils.Generic.Tests/PeanutButter.TestUtils.Generic.Tests.csproj
+3 −3 source/TestUtils/PeanutButter.TestUtils.Generic/Package.nuspec
+1 −1 ...ce/TinyEventAggregator/PeanutButter.TinyEventAggregator.Tests/PeanutButter.TinyEventAggregator.Tests.csproj
+1 −1 source/TinyEventAggregator/PeanutButter.TinyEventAggregator/Package.nuspec
+1 −1 source/Utils/PeanutButter.DuckTyping.NetCore.Tests/PeanutButter.DuckTyping.NetCore.Tests.csproj
+1 −1 source/Utils/PeanutButter.DuckTyping.Tests/PeanutButter.DuckTyping.Tests.csproj
+1 −1 source/Utils/PeanutButter.DuckTyping/Package.nuspec
+1 −1 source/Utils/PeanutButter.EasyArgs.Tests/PeanutButter.EasyArgs.Tests.csproj
+5 −5 source/Utils/PeanutButter.EasyArgs/Package.nuspec
+1 −1 source/Utils/PeanutButter.FileSystem.Tests/PeanutButter.FileSystem.Tests.csproj
+1 −1 source/Utils/PeanutButter.FileSystem/Package.nuspec
+2 −2 source/Utils/PeanutButter.JObjectExtensions.Tests/PeanutButter.JObjectExtensions.Tests.csproj
+1 −1 source/Utils/PeanutButter.JObjectExtensions/Package.nuspec
+2 −2 source/Utils/PeanutButter.MVC.Tests/PeanutButter.MVC.Tests.csproj
+1 −1 source/Utils/PeanutButter.NetUtils.Tests/PeanutButter.NetUtils.Tests.csproj
+2 −2 source/Utils/PeanutButter.Utils.NetCore.Tests/PeanutButter.Utils.NetCore.Tests.csproj
+2 −2 source/Utils/PeanutButter.Utils.Tests/PeanutButter.Utils.Tests.csproj
+1 −1 source/Utils/PeanutButter.Utils/Package.nuspec
+1 −1 source/Utils/PeanutButter.XmlUtils.Tests/PeanutButter.XmlUtils.Tests.csproj
+1 −1 source/Utils/PeanutButter.XmlUtils/Package.nuspec
+1 −1 source/Win32Service/PeanutButter.ServiceShell.NetCore.Tests/PeanutButter.ServiceShell.NetCore.Tests.csproj
+1 −1 source/Win32Service/PeanutButter.ServiceShell.Tests/PeanutButter.ServiceShell.Tests.csproj
+5 −5 source/Win32Service/PeanutButter.ServiceShell/Package.nuspec
+1 −1 ...ce/PeanutButter.WindowsServiceManagement.Core.Tests/PeanutButter.WindowsServiceManagement.Core.Tests.csproj
+1 −1 ...Win32Service/PeanutButter.WindowsServiceManagement.Tests/PeanutButter.WindowsServiceManagement.Tests.csproj
+1 −1 source/Win32Service/PeanutButter.WindowsServiceManagement/Package.nuspec
+1 −1 source/_deprecated_/Async/PeanutButter.Async/Package.nuspec
+7 −7 source/_deprecated_/Async/PeanutButter.TestUtils.Async/Package.nuspec
+1 −1 source/_deprecated_/EmailSpooler/EmailSpooler.Win32Service.DB/Package.nuspec
+3 −3 source/_deprecated_/EmailSpooler/EmailSpooler.Win32Service.Entity/Package.nuspec
+3 −3 source/_deprecated_/PeanutButter.DatabaseHelpers.Testability/Package.nuspec
+3 −3 source/_deprecated_/PeanutButter.FluentMigrator/Package.nuspec
+8 −8 source/_deprecated_/PeanutButter.TestUtils.Entity/Package.nuspec
+1 −1 source/_deprecated_/PeanutButter.TestUtils.MVC/Package.nuspec
+2 −2 source/_deprecated_/PeanutButter.Utils.Entity/Package.nuspec
+3 −3 source/_deprecated_/PeanutButter.Utils.Windsor/Package.nuspec

0 comments on commit 69adccc

Please sign in to comment.