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