private ISpecification <AlertEvaluationMessage> CreateCompositeSpecification( AlertCriteria alertCriteria) { CompositeSpecification <AlertEvaluationMessage> specification; if (alertCriteria.Operator == CriteriaOperator.And) { specification = new AndSpecification <AlertEvaluationMessage>(); } else if (alertCriteria.Operator == CriteriaOperator.Or) { specification = new OrSpecification <AlertEvaluationMessage>(); } else { throw new ApplicationException("Operator not supported."); } foreach (var c in alertCriteria.ChildrenCriteria) { specification.AddChildSpecification(CreateSpecification(c)); } return(specification); }
public void ToString_ThreeSimpleChildCriteria_ExpectedStringReturned() { var alertCriteria1 = new AlertCriteria { Type = CriteriaType.Price, Operator = CriteriaOperator.GreaterThan, Level = 50.50M }; var alertCriteria2 = new AlertCriteria { Type = CriteriaType.Price, Operator = CriteriaOperator.LessThan, Level = 52.00M }; var alertCriteria3 = new AlertCriteria { Type = CriteriaType.Price, Operator = CriteriaOperator.LessThan, Level = 54.00M }; var rootCriteria = new AlertCriteria { Type = CriteriaType.Composite, Operator = CriteriaOperator.And, ChildrenCriteria = { alertCriteria1, alertCriteria2, alertCriteria3 } }; // Act var description = rootCriteria.ToString(); // Assert description.Should().Be($"{alertCriteria1} AND {alertCriteria2} AND {alertCriteria3}"); }
public CriteriaViewModel( AlertCriteria alertCriteria, INavigationService navigationService, ILogger logger) : base(navigationService, logger) { _alertCriteria = alertCriteria ?? throw new ArgumentNullException(nameof(alertCriteria)); InitAlertCriteria(); }
public void ToString_CompositeChildCriteria_ExpectedStringReturned() { var alertCriteria1 = new AlertCriteria { Type = CriteriaType.Price, Operator = CriteriaOperator.GreaterThan, Level = 50.50M }; var alertCriteria2 = new AlertCriteria { Type = CriteriaType.Price, Operator = CriteriaOperator.LessThan, Level = 52.00M }; var alertCriteria3 = new AlertCriteria { Type = CriteriaType.Price, Operator = CriteriaOperator.GreaterThan, Level = 51.50M }; var alertCriteria4 = new AlertCriteria { Type = CriteriaType.Price, Operator = CriteriaOperator.LessThan, Level = 53.00M }; var andCriteria = new AlertCriteria { Type = CriteriaType.Composite, Operator = CriteriaOperator.And, ChildrenCriteria = { alertCriteria1, alertCriteria2 } }; var orCriteria = new AlertCriteria { Type = CriteriaType.Composite, Operator = CriteriaOperator.Or, ChildrenCriteria = { alertCriteria3, alertCriteria4 } }; var rootCriteria = new AlertCriteria { Type = CriteriaType.Composite, Operator = CriteriaOperator.And, ChildrenCriteria = { andCriteria, orCriteria } }; // Act var description = rootCriteria.ToString(); // Assert description.Should().Be($"({andCriteria}) AND ({orCriteria})"); }
public void ToString_DailyPercentageGain_ExpectedStringReturned() { // Arrange var alertCriteria = new AlertCriteria { Type = CriteriaType.DailyPercentageGainLoss, Operator = CriteriaOperator.Equals, Level = 0.02M }; // Act var description = alertCriteria.ToString(); // Assert description.Should().Be($"{CriteriaType.DailyPercentageGainLoss.ToDisplayString()} {CriteriaOperator.Equals.ToDisplayString()} {0.02M:P2}"); }
public void ToString_Price_ExpectedStringReturned() { // Arrange var alertCriteria = new AlertCriteria { Type = CriteriaType.Price, Operator = CriteriaOperator.Equals, Level = 50.50M }; // Act var description = alertCriteria.ToString(); // Assert description.Should().Be($"{CriteriaType.Price.ToDisplayString()} {CriteriaOperator.Equals.ToDisplayString()} {50.50M:C}"); }
public void IsSatisfiedBy_NoOperator_False() { // Arrange var alertCriteria = new AlertCriteria(); var spec = new PriceSpecification(alertCriteria); var message = new AlertEvaluationMessage(); // Act var result = spec.IsSatisfiedBy(message); // Assert result.Should().BeFalse(); }
private void AssertCriteria(AlertCriteria expected, AlertCriteria actual) { actual.AlertCriteriaId.Should().Be(expected.AlertCriteriaId); actual.Type.Should().Be(expected.Type); actual.Operator.Should().Be(expected.Operator); actual.Level.Should().Be(expected.Level); actual.ChildrenCriteria.Count.Should().Be(expected.ChildrenCriteria.Count); foreach (var actualAlertCriteria in actual.ChildrenCriteria) { var expectedAlertCriteria = expected.ChildrenCriteria.Single(c => c.AlertCriteriaId == actualAlertCriteria.AlertCriteriaId); AssertCriteria(expectedAlertCriteria, actualAlertCriteria); } }
public void IsSatisfiedBy_LessThanOrEqual_LastPriceEqualLevel_PrevLastPriceGreaterThanLevel_True() { // Arrange var alertCriteria = new AlertCriteria { Operator = CriteriaOperator.LessThanOrEqualTo, Level = 50 }; var spec = new PriceSpecification(alertCriteria); var message = new AlertEvaluationMessage { LastPrice = 50, PreviousLastPrice = 50.1M }; // Act var result = spec.IsSatisfiedBy(message); // Assert result.Should().BeTrue(); }
public void IsSatisfiedBy_EqualTo_LastPriceLessThanLevel_PrevLastPriceEqualLevel_False() { // Arrange var alertCriteria = new AlertCriteria { Operator = CriteriaOperator.Equals, Level = 50 }; var spec = new PriceSpecification(alertCriteria); var message = new AlertEvaluationMessage { LastPrice = 49, PreviousLastPrice = 50 }; // Act var result = spec.IsSatisfiedBy(message); // Assert result.Should().BeFalse(); }
public void IsSatisfiedBy_LessThanOrEqual_LastPercentGreaterThanLevel_PrevLastPercentEqualLevel_False() { // Arrange var alertCriteria = new AlertCriteria { Operator = CriteriaOperator.LessThanOrEqualTo, Level = 0.02M }; var spec = new DailyPercentageGainLossSpecification(alertCriteria); var message = new AlertEvaluationMessage { OpenPrice = 1, LastPrice = 1.03M, PreviousLastPrice = 1.02M }; // Act var result = spec.IsSatisfiedBy(message); // Assert result.Should().BeFalse(); }
public void ToString_And_OneSimpleChildCriteria_ExpectedStringReturned() { var alertCriteria1 = new AlertCriteria { Type = CriteriaType.Price, Operator = CriteriaOperator.Equals, Level = 50.50M }; var rootCriteria = new AlertCriteria { Type = CriteriaType.Composite, Operator = CriteriaOperator.And, ChildrenCriteria = { alertCriteria1 } }; // Act var description = rootCriteria.ToString(); // Assert description.Should().Be(alertCriteria1.ToString()); }
public DailyPercentageGainLossSpecification(AlertCriteria alertCriteria) { _alertCriteria = alertCriteria ?? throw new ArgumentNullException(nameof(alertCriteria)); }
/// <summary> /// Converts the <see cref="sourceValue" /> parameter to the <see cref="destinationType" /> parameter using <see cref="formatProvider" /// /> and <see cref="ignoreCase" /> /// </summary> /// <param name="sourceValue">the <see cref="System.Object"/> to convert from</param> /// <param name="destinationType">the <see cref="System.Type" /> to convert to</param> /// <param name="formatProvider">not used by this TypeConverter.</param> /// <param name="ignoreCase">when set to <c>true</c>, will ignore the case when converting.</param> /// <returns> /// an instance of <see cref="AlertCriteria" />, or <c>null</c> if there is no suitable conversion. /// </returns> public override object ConvertFrom(object sourceValue, global::System.Type destinationType, global::System.IFormatProvider formatProvider, bool ignoreCase) => AlertCriteria.CreateFrom(sourceValue);
private ISpecification <AlertEvaluationMessage> CreatePriceSpecification( AlertCriteria alertCriteria) => new PriceSpecification(alertCriteria);
public ISpecification <AlertEvaluationMessage> CreateSpecification(AlertCriteria alertCriteria) { var factoryMethod = _factoryMethods[alertCriteria.Type]; return(factoryMethod.Invoke(alertCriteria)); }
private ISpecification <AlertEvaluationMessage> CreateDailyPercentageGainLossSpecification( AlertCriteria alertCriteria) => new DailyPercentageGainLossSpecification(alertCriteria);
public PriceSpecification(AlertCriteria alertCriteria) { _alertCriteria = alertCriteria ?? throw new ArgumentNullException(nameof(alertCriteria)); }