Esempio n. 1
0
        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);
        }
Esempio n. 2
0
        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}");
        }
Esempio n. 3
0
        public CriteriaViewModel(
            AlertCriteria alertCriteria,
            INavigationService navigationService,
            ILogger logger) : base(navigationService, logger)
        {
            _alertCriteria = alertCriteria ?? throw new ArgumentNullException(nameof(alertCriteria));

            InitAlertCriteria();
        }
Esempio n. 4
0
        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})");
        }
Esempio n. 5
0
        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}");
        }
Esempio n. 6
0
        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}");
        }
Esempio n. 7
0
        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();
        }
Esempio n. 8
0
        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);
            }
        }
Esempio n. 9
0
        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();
        }
Esempio n. 10
0
        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();
        }
Esempio n. 12
0
        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);
Esempio n. 15
0
 private ISpecification <AlertEvaluationMessage> CreatePriceSpecification(
     AlertCriteria alertCriteria) =>
 new PriceSpecification(alertCriteria);
Esempio n. 16
0
        public ISpecification <AlertEvaluationMessage> CreateSpecification(AlertCriteria alertCriteria)
        {
            var factoryMethod = _factoryMethods[alertCriteria.Type];

            return(factoryMethod.Invoke(alertCriteria));
        }
Esempio n. 17
0
 private ISpecification <AlertEvaluationMessage> CreateDailyPercentageGainLossSpecification(
     AlertCriteria alertCriteria) =>
 new DailyPercentageGainLossSpecification(alertCriteria);
 public PriceSpecification(AlertCriteria alertCriteria)
 {
     _alertCriteria = alertCriteria ?? throw new ArgumentNullException(nameof(alertCriteria));
 }