/// <summary>
        /// Initializes a new instance of <see cref="Models.AnomalyIncident"/> for mocking purposes.
        /// </summary>
        /// <param name="dataFeedId">Sets the <see cref="AnomalyIncident.DataFeedId"/> property.</param>
        /// <param name="metricId">Sets the <see cref="AnomalyIncident.MetricId"/> property.</param>
        /// <param name="detectionConfigurationId">Sets the <see cref="AnomalyIncident.DetectionConfigurationId"/> property.</param>
        /// <param name="id">Sets the <see cref="AnomalyIncident.Id"/> property.</param>
        /// <param name="startedOn">Sets the <see cref="AnomalyIncident.StartedOn"/> property.</param>
        /// <param name="lastDetectedOn">Sets the <see cref="AnomalyIncident.LastDetectedOn"/> property.</param>
        /// <param name="rootSeriesKey">Sets the <see cref="AnomalyIncident.RootSeriesKey"/> property.</param>
        /// <param name="severity">Sets the <see cref="AnomalyIncident.Severity"/> property.</param>
        /// <param name="status">Sets the <see cref="AnomalyIncident.Status"/> property.</param>
        /// <param name="valueOfRootNode">Sets the <see cref="AnomalyIncident.ValueOfRootNode"/> property.</param>
        /// <param name="expectedValueOfRootNode">Sets the <see cref="AnomalyIncident.ExpectedValueOfRootNode"/> property.</param>
        /// <returns>A new instance of <see cref="Models.AnomalyIncident"/> for mocking purposes.</returns>
        public static AnomalyIncident AnomalyIncident(string dataFeedId = null, string metricId = null, string detectionConfigurationId = null, string id = null, DateTimeOffset startedOn = default, DateTimeOffset lastDetectedOn = default, DimensionKey rootSeriesKey = null, AnomalySeverity severity = default, AnomalyIncidentStatus status = default, double valueOfRootNode = default, double?expectedValueOfRootNode = null)
        {
            Dictionary <string, string> dimensions       = rootSeriesKey?.ToDictionary(key => key.Key, key => key.Value);
            IncidentProperty            incidentProperty = new IncidentProperty(severity, status, valueOfRootNode, expectedValueOfRootNode);

            return(new AnomalyIncident(dataFeedId, metricId, detectionConfigurationId, id, startedOn, lastDetectedOn, new SeriesIdentity(dimensions), incidentProperty));
        }
        /// <summary>
        /// Initializes a new instance of <see cref="Models.DataPointAnomaly"/> for mocking purposes.
        /// </summary>
        /// <param name="dataFeedId">Sets the <see cref="DataPointAnomaly.DataFeedId"/> property.</param>
        /// <param name="metricId">Sets the <see cref="DataPointAnomaly.MetricId"/> property.</param>
        /// <param name="detectionConfigurationId">Sets the <see cref="DataPointAnomaly.DetectionConfigurationId"/> property.</param>
        /// <param name="timestamp">Sets the <see cref="DataPointAnomaly.Timestamp"/> property.</param>
        /// <param name="createdOn">Sets the <see cref="DataPointAnomaly.CreatedOn"/> property.</param>
        /// <param name="lastModified">Sets the <see cref="DataPointAnomaly.LastModified"/> property.</param>
        /// <param name="seriesKey">Sets the <see cref="DataPointAnomaly.SeriesKey"/> property.</param>
        /// <param name="severity">Sets the <see cref="DataPointAnomaly.Severity"/> property.</param>
        /// <param name="status">Sets the <see cref="DataPointAnomaly.Status"/> property.</param>
        /// <param name="value">Sets the <see cref="DataPointAnomaly.Value"/> property.</param>
        /// <param name="expectedValue">Sets the <see cref="DataPointAnomaly.ExpectedValue"/> property.</param>
        /// <returns>A new instance of <see cref="Models.DataPointAnomaly"/> for mocking purposes.</returns>
        public static DataPointAnomaly DataPointAnomaly(string dataFeedId = null, string metricId = null, string detectionConfigurationId = null, DateTimeOffset timestamp = default, DateTimeOffset?createdOn = null, DateTimeOffset?lastModified = null, DimensionKey seriesKey = null, AnomalySeverity severity = default, AnomalyStatus?status = null, double value = default, double?expectedValue = null)
        {
            Dictionary <string, string> dimensions      = seriesKey?.ToDictionary(key => key.Key, key => key.Value);
            AnomalyProperty             anomalyProperty = new AnomalyProperty(severity, status, value, expectedValue);

            return(new DataPointAnomaly(dataFeedId, metricId, detectionConfigurationId, timestamp, createdOn, lastModified, dimensions, anomalyProperty));
        }
        /// <summary>
        /// Initializes a new instance of <see cref="MetricsAdvisor.MetricPeriodFeedback"/> for mocking purposes.
        /// </summary>
        /// <param name="id">Sets the <see cref="MetricFeedback.Id"/> property.</param>
        /// <param name="createdOn">Sets the <see cref="MetricFeedback.CreatedOn"/> property.</param>
        /// <param name="userPrincipal">Sets the <see cref="MetricFeedback.UserPrincipal"/> property.</param>
        /// <param name="metricId">Sets the <see cref="MetricFeedback.MetricId"/> property.</param>
        /// <param name="dimensionKey">Sets the <see cref="MetricFeedback.DimensionKey"/> property.</param>
        /// <param name="periodType">Sets the <see cref="MetricPeriodFeedback.PeriodType"/> property.</param>
        /// <param name="periodValue">Sets the <see cref="MetricPeriodFeedback.PeriodValue"/> property.</param>
        /// <returns>A new instance of <see cref="MetricsAdvisor.MetricPeriodFeedback"/> for mocking purposes.</returns>
        public static MetricPeriodFeedback MetricPeriodFeedback(string id = null, DateTimeOffset?createdOn = null, string userPrincipal = null, string metricId = null, DimensionKey dimensionKey = null, MetricPeriodType periodType = default, int periodValue = default)
        {
            Dictionary <string, string> dimensions = dimensionKey?.ToDictionary(key => key.Key, key => key.Value);
            FeedbackFilter      filter             = new FeedbackFilter(dimensions);
            PeriodFeedbackValue feedbackValue      = new PeriodFeedbackValue(periodType, periodValue);

            return(new MetricPeriodFeedback(MetricFeedbackKind.Period, id, createdOn, userPrincipal, metricId, filter, feedbackValue));
        }
        /// <summary>
        /// Initializes a new instance of <see cref="MetricsAdvisor.MetricCommentFeedback"/> for mocking purposes.
        /// </summary>
        /// <param name="id">Sets the <see cref="MetricFeedback.Id"/> property.</param>
        /// <param name="createdOn">Sets the <see cref="MetricFeedback.CreatedOn"/> property.</param>
        /// <param name="userPrincipal">Sets the <see cref="MetricFeedback.UserPrincipal"/> property.</param>
        /// <param name="metricId">Sets the <see cref="MetricFeedback.MetricId"/> property.</param>
        /// <param name="dimensionKey">Sets the <see cref="MetricFeedback.DimensionKey"/> property.</param>
        /// <param name="startsOn">Sets the <see cref="MetricCommentFeedback.StartsOn"/> property.</param>
        /// <param name="endsOn">Sets the <see cref="MetricCommentFeedback.EndsOn"/> property.</param>
        /// <param name="comment">Sets the <see cref="MetricCommentFeedback.Comment"/> property.</param>
        /// <returns>A new instance of <see cref="MetricsAdvisor.MetricCommentFeedback"/> for mocking purposes.</returns>
        public static MetricCommentFeedback MetricCommentFeedback(string id = null, DateTimeOffset?createdOn = null, string userPrincipal = null, string metricId = null, DimensionKey dimensionKey = null, DateTimeOffset?startsOn = null, DateTimeOffset?endsOn = null, string comment = null)
        {
            Dictionary <string, string> dimensions = dimensionKey?.ToDictionary(key => key.Key, key => key.Value);
            FeedbackFilter       filter            = new FeedbackFilter(dimensions);
            CommentFeedbackValue feedbackValue     = new CommentFeedbackValue(comment);

            return(new MetricCommentFeedback(MetricFeedbackKind.Comment, id, createdOn, userPrincipal, metricId, filter, startsOn, endsOn, feedbackValue));
        }
        /// <summary>
        /// Initializes a new instance of <see cref="MetricsAdvisor.MetricAnomalyFeedback"/> for mocking purposes.
        /// </summary>
        /// <param name="id">Sets the <see cref="MetricFeedback.Id"/> property.</param>
        /// <param name="createdOn">Sets the <see cref="MetricFeedback.CreatedOn"/> property.</param>
        /// <param name="userPrincipal">Sets the <see cref="MetricFeedback.UserPrincipal"/> property.</param>
        /// <param name="metricId">Sets the <see cref="MetricFeedback.MetricId"/> property.</param>
        /// <param name="dimensionKey">Sets the <see cref="MetricFeedback.DimensionKey"/> property.</param>
        /// <param name="startsOn">Sets the <see cref="MetricAnomalyFeedback.StartsOn"/> property.</param>
        /// <param name="endsOn">Sets the <see cref="MetricAnomalyFeedback.EndsOn"/> property.</param>
        /// <param name="anomalyValue">Sets the <see cref="MetricAnomalyFeedback.AnomalyValue"/> property.</param>
        /// <param name="detectionConfigurationId">Sets the <see cref="MetricAnomalyFeedback.DetectionConfigurationId"/> property.</param>
        /// <param name="detectionConfigurationSnapshot">Sets the <see cref="MetricAnomalyFeedback.DetectionConfigurationSnapshot"/> property.</param>
        /// <returns>A new instance of <see cref="MetricsAdvisor.MetricAnomalyFeedback"/> for mocking purposes.</returns>
        public static MetricAnomalyFeedback MetricAnomalyFeedback(string id = null, DateTimeOffset?createdOn = null, string userPrincipal = null, string metricId = null, DimensionKey dimensionKey = null, DateTimeOffset startsOn = default, DateTimeOffset endsOn = default, AnomalyValue anomalyValue = default, string detectionConfigurationId = null, AnomalyDetectionConfiguration detectionConfigurationSnapshot = null)
        {
            Dictionary <string, string> dimensions = dimensionKey?.ToDictionary(key => key.Key, key => key.Value);
            FeedbackFilter       filter            = new FeedbackFilter(dimensions);
            AnomalyFeedbackValue feedbackValue     = new AnomalyFeedbackValue(anomalyValue);

            return(new MetricAnomalyFeedback(MetricFeedbackKind.Anomaly, id, createdOn, userPrincipal, metricId, filter, startsOn, endsOn, feedbackValue, detectionConfigurationId, detectionConfigurationSnapshot));
        }
        /// <summary>
        /// Initializes a new instance of <see cref="Models.MetricSeriesData"/> for mocking purposes.
        /// </summary>
        /// <param name="metricId">Sets the <see cref="MetricSeriesData.MetricId"/> property.</param>
        /// <param name="seriesKey">Sets the <see cref="MetricSeriesData.SeriesKey"/> property.</param>
        /// <param name="timestamps">Sets the <see cref="MetricSeriesData.Timestamps"/> property.</param>
        /// <param name="metricValues">Sets the <see cref="MetricSeriesData.MetricValues"/> property.</param>
        /// <returns>A new instance of <see cref="Models.MetricSeriesData"/> for mocking purposes.</returns>
        public static MetricSeriesData MetricSeriesData(string metricId = null, DimensionKey seriesKey = null, IEnumerable <DateTimeOffset> timestamps = null, IEnumerable <double> metricValues = null)
        {
            timestamps ??= new List <DateTimeOffset>();
            metricValues ??= new List <double>();

            Dictionary <string, string> dimensions = seriesKey?.ToDictionary(key => key.Key, key => key.Value);
            MetricSeriesDefinition      definition = new MetricSeriesDefinition(metricId, dimensions);

            return(new MetricSeriesData(definition, timestamps?.ToList(), metricValues?.ToList()));
        }
        /// <summary>
        /// Initializes a new instance of <see cref="Models.MetricEnrichedSeriesData"/> for mocking purposes.
        /// </summary>
        /// <param name="seriesKey">Sets the <see cref="MetricEnrichedSeriesData.SeriesKey"/> property.</param>
        /// <param name="timestamps">Sets the <see cref="MetricEnrichedSeriesData.Timestamps"/> property.</param>
        /// <param name="metricValues">Sets the <see cref="MetricEnrichedSeriesData.MetricValues"/> property.</param>
        /// <param name="isAnomaly">Sets the <see cref="MetricEnrichedSeriesData.IsAnomaly"/> property.</param>
        /// <param name="periods">Sets the <see cref="MetricEnrichedSeriesData.Periods"/> property.</param>
        /// <param name="expectedMetricValues">Sets the <see cref="MetricEnrichedSeriesData.ExpectedMetricValues"/> property.</param>
        /// <param name="lowerBoundaryValues">Sets the <see cref="MetricEnrichedSeriesData.LowerBoundaryValues"/> property.</param>
        /// <param name="upperBoundaryValues">Sets the <see cref="MetricEnrichedSeriesData.UpperBoundaryValues"/> property.</param>
        /// <returns>A new instance of <see cref="Models.MetricEnrichedSeriesData"/> for mocking purposes.</returns>
        public static MetricEnrichedSeriesData MetricEnrichedSeriesData(DimensionKey seriesKey = null, IEnumerable <DateTimeOffset> timestamps = null, IEnumerable <double> metricValues = null, IEnumerable <bool?> isAnomaly = null, IEnumerable <int?> periods = null, IEnumerable <double?> expectedMetricValues = null, IEnumerable <double?> lowerBoundaryValues = null, IEnumerable <double?> upperBoundaryValues = null)
        {
            timestamps ??= new List <DateTimeOffset>();
            metricValues ??= new List <double>();
            isAnomaly ??= new List <bool?>();
            periods ??= new List <int?>();
            expectedMetricValues ??= new List <double?>();
            lowerBoundaryValues ??= new List <double?>();
            upperBoundaryValues ??= new List <double?>();

            Dictionary <string, string> dimensions = seriesKey?.ToDictionary(key => key.Key, key => key.Value);

            return(new MetricEnrichedSeriesData(new SeriesIdentity(dimensions), timestamps?.ToList(), metricValues?.ToList(), isAnomaly?.ToList(), periods?.ToList(), expectedMetricValues?.ToList(), lowerBoundaryValues?.ToList(), upperBoundaryValues?.ToList()));
        }
        /// <summary>
        /// Initializes a new instance of <see cref="Models.MetricSeriesDefinition"/> for mocking purposes.
        /// </summary>
        /// <param name="metricId">Sets the <see cref="MetricSeriesDefinition.MetricId"/> property.</param>
        /// <param name="seriesKey">Sets the <see cref="MetricSeriesDefinition.SeriesKey"/> property.</param>
        /// <returns>A new instance of <see cref="Models.MetricSeriesDefinition"/> for mocking purposes.</returns>
        public static MetricSeriesDefinition MetricSeriesDefinition(string metricId = null, DimensionKey seriesKey = null)
        {
            Dictionary <string, string> dimensions = seriesKey?.ToDictionary(key => key.Key, key => key.Value);

            return(new MetricSeriesDefinition(metricId, dimensions));
        }