Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
namespace TryAtSoftware.Equalizer.Core.Tests;

using System;
using Moq;
using NSubstitute.ReceivedExtensions;
using TryAtSoftware.Equalizer.Core.Profiles;
using TryAtSoftware.Randomizer.Core.Helpers;
using Xunit;
Expand All @@ -21,9 +21,9 @@ public void NullCollectionsShouldNotBeEqualized()
public void EmptyCollectionsShouldBeEqualizedSuccessfully()
{
var profile = InstantiateProfile();
var equalizationOptionsMock = TestsCompanion.MockEqualizationOptions();
var equalizationOptions = TestsCompanion.MockEqualizationOptions();

var equalizationResult = profile.Equalize(Array.Empty<int>(), Array.Empty<int>(), equalizationOptionsMock.Object);
var equalizationResult = profile.Equalize(Array.Empty<int>(), Array.Empty<int>(), equalizationOptions);
Assert.True(equalizationResult.IsSuccessful);
}

Expand All @@ -37,15 +37,15 @@ public void CollectionsWithDifferentLengthShouldBeEqualizedUnsuccessfully(int fi
var profile = InstantiateProfile();
var equalizationOptionsMock = TestsCompanion.MockEqualizationOptions();

var equalizationResult = profile.Equalize(new int[firstArrayLength], new int[secondArrayLength], equalizationOptionsMock.Object);
var equalizationResult = profile.Equalize(new int[firstArrayLength], new int[secondArrayLength], equalizationOptionsMock);
Assert.False(equalizationResult.IsSuccessful);
}

[Fact]
public void CollectionsShouldBeEqualizedSuccessfully()
{
var profile = InstantiateProfile();
var equalizationOptionsMock = TestsCompanion.MockEqualizationOptions();
var equalizationOptions = TestsCompanion.MockEqualizationOptions();

var elementsCount = RandomizationHelper.RandomInteger(3, 10);
var firstArray = new int[elementsCount];
Expand All @@ -58,7 +58,7 @@ public void CollectionsShouldBeEqualizedSuccessfully()
secondArray[i] = element;
}

var equalizationResult = profile.Equalize(firstArray, secondArray, equalizationOptionsMock.Object);
var equalizationResult = profile.Equalize(firstArray, secondArray, equalizationOptions);
Assert.True(equalizationResult.IsSuccessful);
}

Expand All @@ -69,22 +69,18 @@ public void CollectionsWithDifferentElementsShouldBeEqualizedUnsuccessfully()
var indexOfFailure = RandomizationHelper.RandomInteger(0, elementsCount);

var profile = InstantiateProfile();
var equalizationOptionsMock = TestsCompanion.MockEqualizationOptions((a, b) => (int)a == indexOfFailure && (int)b == indexOfFailure ? new UnsuccessfulEqualizationResult("Simulated failure") : new SuccessfulEqualizationResult());
var equalizationOptions = TestsCompanion.MockEqualizationOptions((a, b) => (int)a == indexOfFailure && (int)b == indexOfFailure ? new UnsuccessfulEqualizationResult("Simulated failure") : new SuccessfulEqualizationResult());

int[] firstArray = new int[elementsCount], secondArray = new int[elementsCount];
for (var i = 0; i < elementsCount; i++) (firstArray[i], secondArray[i]) = (i, i);

var equalizationResult = profile.Equalize(firstArray, secondArray, equalizationOptionsMock.Object);
var equalizationResult = profile.Equalize(firstArray, secondArray, equalizationOptions);

Assert.False(equalizationResult.IsSuccessful);
Assert.False(string.IsNullOrWhiteSpace(equalizationResult.Message));

for (var i = 0; i < elementsCount; i++)
{
var currentParameterValue = i;
var expectedTimes = i <= indexOfFailure ? Times.Once() : Times.Never();
equalizationOptionsMock.Verify(x => x.Equalize(currentParameterValue, currentParameterValue), expectedTimes);
}
equalizationOptions.Received(i <= indexOfFailure ? Quantity.Exactly(1) : Quantity.None()).Equalize(i, i);
}

private static CollectionEqualizationProfile InstantiateProfile() => new ();
Expand Down
28 changes: 13 additions & 15 deletions TryAtSoftware.Equalizer.Core.Tests/TestsCompanion.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

using System;
using System.Collections.Generic;
using Moq;
using NSubstitute;
using TryAtSoftware.Equalizer.Core.Interfaces;
using TryAtSoftware.Randomizer.Core.Helpers;
using Xunit;
Expand Down Expand Up @@ -30,27 +30,25 @@ public static (IEnumerable<IEqualizationProfile> All, IEqualizationProfile Execu
}

public static IEqualizationProfileProvider MockEqualizationProfileProvider()
{
var profileProviderMock = new Mock<IEqualizationProfileProvider>();
return profileProviderMock.Object;
}
=> Substitute.For<IEqualizationProfileProvider>();

public static IEqualizationProfile MockEqualizationProfile(bool isExecutable = false)
{
var profileMock = new Mock<IEqualizationProfile>();
profileMock.Setup(x => x.CanExecuteFor(It.IsAny<object>(), It.IsAny<object>())).Returns(isExecutable);
var profile = Substitute.For<IEqualizationProfile>();
profile.CanExecuteFor(Arg.Any<object>(), Arg.Any<object>()).Returns(isExecutable);

return profileMock.Object;
return profile;
}

public static Mock<IEqualizationOptions> MockEqualizationOptions() => MockEqualizationOptions((_, _) => new SuccessfulEqualizationResult());
public static IEqualizationOptions MockEqualizationOptions() => MockEqualizationOptions((_, _) => new SuccessfulEqualizationResult());

public static Mock<IEqualizationOptions> MockEqualizationOptions(Func<object, object, IEqualizationResult> internalEqualization)
public static IEqualizationOptions MockEqualizationOptions(Func<object, object, IEqualizationResult> internalEqualization)
{
var equalizationOptionsMock = new Mock<IEqualizationOptions>();
equalizationOptionsMock.Setup(eo => eo.Equalize(It.IsAny<object>(), It.IsAny<object>())).Returns(internalEqualization);
equalizationOptionsMock.Setup(eo => eo.ExpectedType).Returns(typeof(object));
equalizationOptionsMock.Setup(eo => eo.ActualType).Returns(typeof(object));
return equalizationOptionsMock;
var equalizationOptions = Substitute.For<IEqualizationOptions>();
equalizationOptions.Equalize(Arg.Any<object>(), Arg.Any<object>()).Returns(x => internalEqualization(x[0], x[1]));
equalizationOptions.ExpectedType.Returns(typeof(object));
equalizationOptions.ActualType.Returns(typeof(object));

return equalizationOptions;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
<ItemGroup>
<PackageReference Include="coverlet.msbuild" Version="6.0.0" PrivateAssets="all" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.6.2" />
<PackageReference Include="Moq" Version="4.18.4" />
<PackageReference Include="NSubstitute" Version="5.3.0" />
<PackageReference Include="SonarAnalyzer.CSharp" Version="10.15.0.120848" PrivateAssets="all" />
<PackageReference Include="TryAtSoftware.Randomizer" Version="1.0.4" />
<PackageReference Include="xunit" Version="2.4.2" />
Expand Down