public void GivenValidObservationGroup_WhenGetIdSegment_CorrectValueReturned_Test()
        {
            var id = Guid.NewGuid().ToString();
            var og = new CorrelationMeasurementObservationGroup(id);

            var segment = og.GetIdSegment();

            Assert.Equal(id, segment);
        }
        public void GivenSingleMeasurement_WhenGetBoundary_ThenBoundarySet_Test()
        {
            var start = DateTime.UtcNow.AddDays(-1);

            var og = new CorrelationMeasurementObservationGroup("test");

            og.AddMeasurement(new Measurement {
                OccurrenceTimeUtc = start
            });

            Assert.Equal(start, og.Boundary.Start);
            Assert.Equal(start, og.Boundary.End);
        }
        public IEnumerable <IObservationGroup> Build(IMeasurementGroup input)
        {
            EnsureArg.IsNotNull(input, nameof(input));
            EnsureArg.IsNotNull(input.MeasureType, nameof(input.MeasureType));
            EnsureArg.IsNotNull(input.Data, nameof(input.Data));

            var observationGroup = new CorrelationMeasurementObservationGroup(input.CorrelationId)
            {
                Name = input.MeasureType,
            };

            foreach (var m in input.Data)
            {
                observationGroup.AddMeasurement(m);
            }

            yield return(observationGroup);
        }
        public void GivenMultipleMeasurement_WhenGetBoundary_ThenBoundaryMatchesMinAndMax_Test()
        {
            var start = DateTime.UtcNow.AddDays(-1);
            var end   = DateTime.UtcNow;

            var og = new CorrelationMeasurementObservationGroup("test");

            og.AddMeasurement(new Measurement {
                OccurrenceTimeUtc = end
            });
            og.AddMeasurement(new Measurement {
                OccurrenceTimeUtc = start.AddHours(2)
            });
            og.AddMeasurement(new Measurement {
                OccurrenceTimeUtc = start
            });
            og.AddMeasurement(new Measurement {
                OccurrenceTimeUtc = start.AddHours(1)
            });

            Assert.Equal(start, og.Boundary.Start);
            Assert.Equal(end, og.Boundary.End);
        }
        public void GivenDifferentNamedValues_WhenAddMeasurement_ThenGetValuesReturnsSorted_Test()
        {
            var startDate = new DateTime(2019, 1, 1, 0, 0, 0, DateTimeKind.Utc);
            var endDate   = startDate.AddDays(1);

            var measurement = new IMeasurement[]
            {
                new Measurement
                {
                    OccurrenceTimeUtc = startDate,
                    Properties        = new List <MeasurementProperty>
                    {
                        new MeasurementProperty {
                            Name = "a", Value = "1"
                        },
                    },
                },
                new Measurement
                {
                    OccurrenceTimeUtc = endDate,
                    Properties        = new List <MeasurementProperty>
                    {
                        new MeasurementProperty {
                            Name = "a", Value = "2"
                        },
                    },
                },
                new Measurement
                {
                    OccurrenceTimeUtc = startDate.AddHours(1),
                    Properties        = new List <MeasurementProperty>
                    {
                        new MeasurementProperty {
                            Name = "a", Value = "3"
                        },
                    },
                },
                new Measurement
                {
                    OccurrenceTimeUtc = endDate,
                    Properties        = new List <MeasurementProperty>
                    {
                        new MeasurementProperty {
                            Name = "b", Value = "1"
                        },
                    },
                },
                new Measurement
                {
                    OccurrenceTimeUtc = startDate,
                    Properties        = new List <MeasurementProperty>
                    {
                        new MeasurementProperty {
                            Name = "b", Value = "2"
                        },
                    },
                },
                new Measurement
                {
                    OccurrenceTimeUtc = startDate,
                    Properties        = new List <MeasurementProperty>
                    {
                        new MeasurementProperty {
                            Name = "c", Value = "3"
                        },
                    },
                },
            };

            var og = new CorrelationMeasurementObservationGroup("test");

            foreach (var m in measurement)
            {
                og.AddMeasurement(m);
            }

            var values = og.GetValues();

            var aValues = values["a"];

            Assert.Collection(
                aValues,
                v =>
            {
                Assert.Equal(startDate, v.Time);
                Assert.Equal("1", v.Value);
            },
                v =>
            {
                Assert.Equal(measurement[2].OccurrenceTimeUtc, v.Time);
                Assert.Equal("3", v.Value);
            },
                v =>
            {
                Assert.Equal(endDate, v.Time);
                Assert.Equal("2", v.Value);
            });

            var bValues = values["b"];

            Assert.Collection(
                bValues,
                v =>
            {
                Assert.Equal(startDate, v.Time);
                Assert.Equal("2", v.Value);
            },
                v =>
            {
                Assert.Equal(endDate, v.Time);
                Assert.Equal("1", v.Value);
            });

            var cValues = values["c"];

            Assert.Collection(
                cValues,
                v =>
            {
                Assert.Equal(startDate, v.Time);
                Assert.Equal("3", v.Value);
            });
        }