public void ensureFromEntityWithUnitConvertsContinuousDimensionInterval()
        {
            double minValue  = 20;
            double maxValue  = 60;
            double increment = 2;

            Dimension continuousDimensionInterval = new ContinuousDimensionInterval(minValue, maxValue, increment);

            string unit = "dm";

            GetDimensionModelView getDimensionModelView = DimensionModelViewService.fromEntity(continuousDimensionInterval, unit);

            GetContinuousDimensionIntervalModelView result = (GetContinuousDimensionIntervalModelView)getDimensionModelView;

            GetContinuousDimensionIntervalModelView expected = new GetContinuousDimensionIntervalModelView();

            expected.minValue  = MeasurementUnitService.convertToUnit(minValue, unit);
            expected.maxValue  = MeasurementUnitService.convertToUnit(maxValue, unit);
            expected.increment = MeasurementUnitService.convertToUnit(increment, unit);
            expected.unit      = unit;

            Assert.Equal(expected.minValue, result.minValue);
            Assert.Equal(expected.maxValue, result.maxValue);
            Assert.Equal(expected.increment, result.increment);
            Assert.Equal(expected.unit, result.unit);
        }
        /// <summary>
        /// Converts an instance of Measurement into an instance of GetMeasurementModelView
        /// with the values converted to the specified unit.
        /// </summary>
        /// <param name="measurement">Measurement being converted.</param>
        /// <param name="unit">Unit to which the values will be converted.</param>
        /// <returns>An instance of GetMeasurementModelView with the Measurement data.</returns>
        /// <exception cref="System.ArgumentNullException">If the provided Measurement is null.</exception>
        public static GetMeasurementModelView fromEntity(Measurement measurement, string unit)
        {
            if (measurement == null)
            {
                throw new ArgumentNullException(ERROR_NULL_MEASUREMENT);
            }

            //if no unit is provided, resort to the default implementation
            if (Strings.isNullOrEmpty(unit))
            {
                return(fromEntity(measurement));
            }

            GetDimensionModelView heightMV = DimensionModelViewService.fromEntity(measurement.height, unit);
            GetDimensionModelView widthMV  = DimensionModelViewService.fromEntity(measurement.width, unit);
            GetDimensionModelView depthMV  = DimensionModelViewService.fromEntity(measurement.depth, unit);

            GetMeasurementModelView measurementModelView = new GetMeasurementModelView();

            measurementModelView.measurementId = measurement.Id;
            measurementModelView.height        = heightMV;
            measurementModelView.width         = widthMV;
            measurementModelView.depth         = depthMV;

            return(measurementModelView);
        }
        public void ensureFromEntityWithUnitConvertsDiscreteDimensionInterval()
        {
            List <double> values = new List <double>()
            {
                21, 35, 42
            };

            Dimension discreteDimensionInterval = new DiscreteDimensionInterval(values);

            string unit = "dm";

            GetDimensionModelView getDimensionModelView = DimensionModelViewService.fromEntity(discreteDimensionInterval, unit);

            GetDiscreteDimensionIntervalModelView result = (GetDiscreteDimensionIntervalModelView)getDimensionModelView;

            GetDiscreteDimensionIntervalModelView expected = new GetDiscreteDimensionIntervalModelView();
            List <double> expectedValues = new List <double>();

            foreach (double dimensionValue in values)
            {
                double convertedValue = MeasurementUnitService.convertToUnit(dimensionValue, unit);
                expectedValues.Add(convertedValue);
            }

            expected.values = expectedValues;
            expected.unit   = unit;

            Assert.Equal(expected.values, result.values);
            Assert.Equal(expected.unit, result.unit);
        }
        public void ensureFromEntityConvertsToGetSingleValueDimensionModelViewIfProvidedDimensionIsSingleValue()
        {
            Dimension singleValueDimension = new SingleValueDimension(15);

            GetDimensionModelView getDimensionModelView = DimensionModelViewService.fromEntity(singleValueDimension);

            Type expectedDimensionType = typeof(GetSingleValueDimensionModelView);

            Assert.Equal(expectedDimensionType, getDimensionModelView.GetType());
        }
        public void ensureFromEntityConvertsToGetDiscreteDimensionIntervalModelViewIfProvidedDimensionIsDiscreteInterval()
        {
            Dimension discreteDimensionInterval = new DiscreteDimensionInterval(new List <double>()
            {
                21, 35, 42
            });

            GetDimensionModelView getDimensionModelView = DimensionModelViewService.fromEntity(discreteDimensionInterval);

            Type expectedDimensionType = typeof(GetDiscreteDimensionIntervalModelView);

            Assert.Equal(expectedDimensionType, getDimensionModelView.GetType());
        }
        public void ensureFromEntityConvertsToGetContinuousDimensionIntervalModelViewIfProvidedDimensionIsContinuousInterval()
        {
            double minValue  = 20;
            double maxValue  = 60;
            double increment = 2;

            Dimension continuousDimensionInterval = new ContinuousDimensionInterval(minValue, maxValue, increment);

            GetDimensionModelView getDimensionModelView = DimensionModelViewService.fromEntity(continuousDimensionInterval);

            Type expectedDimensionType = typeof(GetContinuousDimensionIntervalModelView);

            Assert.Equal(expectedDimensionType, getDimensionModelView.GetType());
        }
        private bool equalModelViews(GetDimensionModelView oneDimensionModelView, GetDimensionModelView otherDimensionModelView)
        {
            if (oneDimensionModelView == otherDimensionModelView)
            {
                return(true);
            }

            if (oneDimensionModelView == null || otherDimensionModelView == null || oneDimensionModelView.GetType() != otherDimensionModelView.GetType())
            {
                return(false);
            }

            if (oneDimensionModelView.GetType() == typeof(GetContinuousDimensionIntervalModelView))
            {
                GetContinuousDimensionIntervalModelView oneContinuousMV   = (GetContinuousDimensionIntervalModelView)oneDimensionModelView;
                GetContinuousDimensionIntervalModelView otherContinuousMV = (GetContinuousDimensionIntervalModelView)otherDimensionModelView;


                return(oneContinuousMV.minValue.Equals(otherContinuousMV.minValue) &&
                       oneContinuousMV.maxValue.Equals(otherContinuousMV.maxValue) &&
                       oneContinuousMV.increment.Equals(otherContinuousMV.increment) &&
                       oneContinuousMV.unit.Equals(otherContinuousMV.unit));
            }

            else if (oneDimensionModelView.GetType() == typeof(GetDiscreteDimensionIntervalModelView))
            {
                GetDiscreteDimensionIntervalModelView oneDiscreteMV   = (GetDiscreteDimensionIntervalModelView)oneDimensionModelView;
                GetDiscreteDimensionIntervalModelView otherDiscreteMV = (GetDiscreteDimensionIntervalModelView)otherDimensionModelView;

                var firstNotSecond = oneDiscreteMV.values.Except(otherDiscreteMV.values).ToList();
                var secondNotFirst = otherDiscreteMV.values.Except(oneDiscreteMV.values).ToList();

                bool equalLists = !firstNotSecond.Any() && !secondNotFirst.Any();

                return(equalLists && oneDiscreteMV.unit.Equals(otherDiscreteMV.unit));
            }

            else if (oneDimensionModelView.GetType() == typeof(GetSingleValueDimensionModelView))
            {
                GetSingleValueDimensionModelView oneSingleValueMV   = (GetSingleValueDimensionModelView)oneDimensionModelView;
                GetSingleValueDimensionModelView otherSingleValueMV = (GetSingleValueDimensionModelView)otherDimensionModelView;

                return(oneSingleValueMV.value.Equals(otherSingleValueMV.value) && oneSingleValueMV.unit.Equals(otherSingleValueMV.unit));
            }
            else
            {
                return(false);
            }
        }
        public void ensureFromEntityWithUnitConvertsToGetContinuousDimensionIntervalModelViewIfProvidedDimensionIsContinuousInterval()
        {
            Dimension continuousDimensionInterval = new ContinuousDimensionInterval(
                minValue: 20,
                maxValue: 60,
                increment: 2
                );

            string unit = "dm";

            GetDimensionModelView getDimensionModelView = DimensionModelViewService.fromEntity(continuousDimensionInterval, unit);

            Type expectedDimensionType = typeof(GetContinuousDimensionIntervalModelView);

            Assert.Equal(expectedDimensionType, getDimensionModelView.GetType());
        }
        public void ensureFromEntityConvertsSingleValueDimension()
        {
            Dimension singleValueDimension = new SingleValueDimension(15);

            GetDimensionModelView getDimensionModelView = DimensionModelViewService.fromEntity(singleValueDimension);

            GetSingleValueDimensionModelView expected = new GetSingleValueDimensionModelView();

            expected.value = 15;
            expected.unit  = MeasurementUnitService.getMinimumUnit();

            GetSingleValueDimensionModelView result = (GetSingleValueDimensionModelView)getDimensionModelView;

            Assert.Equal(expected.value, result.value);
            Assert.Equal(expected.unit, result.unit);
        }
        public void ensureFromEntityWithUnitConvertsSingleValueDimension()
        {
            double value = 15;

            Dimension singleValueDimension = new SingleValueDimension(value);

            string unit = "cm";

            GetDimensionModelView getDimensionModelView = DimensionModelViewService.fromEntity(singleValueDimension, unit);

            GetSingleValueDimensionModelView expected = new GetSingleValueDimensionModelView();

            expected.value = MeasurementUnitService.convertToUnit(value, unit);
            expected.unit  = unit;

            GetSingleValueDimensionModelView result = (GetSingleValueDimensionModelView)getDimensionModelView;

            Assert.Equal(expected.value, result.value);
            Assert.Equal(expected.unit, result.unit);
        }
        public void ensureFromEntityWithEmptyUnitUsesMinimumUnit()
        {
            double value = 15;

            Dimension singleValueDimension = new SingleValueDimension(value);

            string unit = "";

            GetDimensionModelView getDimensionModelView = DimensionModelViewService.fromEntity(singleValueDimension, unit);

            GetSingleValueDimensionModelView expected = new GetSingleValueDimensionModelView();

            expected.value = value;
            expected.unit  = MeasurementUnitService.getMinimumUnit();

            GetSingleValueDimensionModelView result = (GetSingleValueDimensionModelView)getDimensionModelView;

            Assert.Equal(expected.value, result.value);
            Assert.Equal(expected.unit, result.unit);
        }
        public void ensureFromEntityConvertsDiscreteDimensionInterval()
        {
            List <double> values = new List <double>()
            {
                21, 35, 42
            };

            Dimension discreteDimensionInterval = new DiscreteDimensionInterval(values);

            GetDimensionModelView getDimensionModelView = DimensionModelViewService.fromEntity(discreteDimensionInterval);

            GetDiscreteDimensionIntervalModelView result = (GetDiscreteDimensionIntervalModelView)getDimensionModelView;

            GetDiscreteDimensionIntervalModelView expected = new GetDiscreteDimensionIntervalModelView();

            expected.values = values;
            expected.unit   = MeasurementUnitService.getMinimumUnit();

            Assert.Equal(expected.values, result.values);
            Assert.Equal(expected.unit, result.unit);
        }
        public void ensureFromEntityConvertsContinuousDimensionInterval()
        {
            double minValue  = 20;
            double maxValue  = 60;
            double increment = 2;

            Dimension continuousDimensionInterval = new ContinuousDimensionInterval(minValue, maxValue, increment);

            GetDimensionModelView getDimensionModelView = DimensionModelViewService.fromEntity(continuousDimensionInterval);

            GetContinuousDimensionIntervalModelView result = (GetContinuousDimensionIntervalModelView)getDimensionModelView;

            GetContinuousDimensionIntervalModelView expected = new GetContinuousDimensionIntervalModelView();

            expected.minValue  = minValue;
            expected.maxValue  = maxValue;
            expected.increment = increment;
            expected.unit      = MeasurementUnitService.getMinimumUnit();

            Assert.Equal(expected.minValue, result.minValue);
            Assert.Equal(expected.maxValue, result.maxValue);
            Assert.Equal(expected.increment, result.increment);
            Assert.Equal(expected.unit, result.unit);
        }