Skip to content

Commit 630a1d0

Browse files
committed
Add tests for EvaluatorExtension
1 parent a182bbb commit 630a1d0

File tree

1 file changed

+48
-0
lines changed

1 file changed

+48
-0
lines changed
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
using FluentAssertions;
2+
using Moq;
3+
using RealTimeWeatherMonitoringApp.Domain.Interfaces;
4+
using RealTimeWeatherMonitoringApp.Infrastructure.Extension;
5+
using RealTimeWeatherMonitoringTest.Common;
6+
using RealTimeWeatherMonitoringTest.Domain.Models;
7+
using Xunit;
8+
9+
namespace RealTimeWeatherMonitoringTest.Infrastructure.Extension;
10+
11+
public class EvaluatorExtensionShould
12+
{
13+
[Theory, AutoMoqData]
14+
public void EvaluateAll_FirstEvaluatorIsFalse_EarlyReturnFalse(
15+
TestData data,
16+
Mock<IEvaluator<TestData>> falseEvaluatorMock,
17+
Mock<IEvaluator<TestData>> trueEvaluatorMock)
18+
{
19+
falseEvaluatorMock.Setup(e => e.Evaluate(data)).Returns(false);
20+
trueEvaluatorMock.Setup(e => e.Evaluate(data)).Returns(true);
21+
var list = new[] { falseEvaluatorMock.Object, trueEvaluatorMock.Object };
22+
23+
var composedEvaluator = list.EvaluateAll();
24+
var result = composedEvaluator.Evaluate(data);
25+
26+
result.Should().BeFalse();
27+
falseEvaluatorMock.Verify(e => e.Evaluate(data), Times.Once);
28+
trueEvaluatorMock.Verify(e => e.Evaluate(data), Times.Never);
29+
}
30+
31+
[Theory, AutoMoqData]
32+
public void EvaluateAll_AllEvaluatorsAreTrue_ReturnTrue(
33+
TestData data,
34+
List<Mock<IEvaluator<TestData>>> trueEvaluatorMocks)
35+
{
36+
foreach (var evaluatorMock in trueEvaluatorMocks)
37+
evaluatorMock
38+
.Setup(e => e.Evaluate(data))
39+
.Returns(true);
40+
41+
var composedEvaluator = trueEvaluatorMocks.Select(m => m.Object).EvaluateAll();
42+
var result = composedEvaluator.Evaluate(data);
43+
44+
result.Should().BeTrue();
45+
foreach (var evaluatorMock in trueEvaluatorMocks)
46+
evaluatorMock.Verify(e => e.Evaluate(data), Times.Once);
47+
}
48+
}

0 commit comments

Comments
 (0)