public void MessageGrouping_SameSource_VerifyGrouping()
        {
            var subject = new MonitorWorkItem(new MonitorConfiguration())
                          .AddMessageGroupingPatterns(ExportIntegrationErrorsStep.MessageGroupingPattern);

            using (TimeReseter.SetUtc(new DateTimeOffset(2015, 06, 13, 12, 00, 00, TimeSpan.Zero)))
            {
                subject.Add(Time.UtcNow.AddHours(-2), "Source", "Message. ErrorID: 1");
                subject.Add(Time.UtcNow.AddHours(-1), "Source", "Message. ErrorID: 2");
                subject.Add(Time.UtcNow, "Source", "Message. ErrorID: 3");

                MonitorEntry[] entries = subject.GetEntries(Target.Service);

                Assert.That(entries.Length, Is.EqualTo(1));
                Assert.That(entries[0].DateTime, Is.EqualTo(Time.UtcNow));
                Assert.That(entries[0].Source, Is.EqualTo("Source"));
                Assert.That(entries[0].Message, Is.EqualTo(string.Join(Environment.NewLine,
                                                                       "Message. ErrorID: 3",
                                                                       string.Empty,
                                                                       "--- Additional similar entries (Total: 3) ---",
                                                                       string.Empty,
                                                                       "ErrorID: 2 (6/13/2015 11:00:00 AM +00:00)",
                                                                       "ErrorID: 1 (6/13/2015 10:00:00 AM +00:00)")));
            }
        }
        public void Add_VariousMessagesNoFilters_VerifyCount()
        {
            var subject = new MonitorWorkItem(new MonitorConfiguration());

            subject.Add(Time.Now, "Source", "Not ignored message", Target.Service);
            subject.Add(Time.Now, "Source", "Also not ignored", Target.Service);
            subject.Add(Time.Now, "Source", "And me neither", Target.Service);

            MonitorEntry[] entries = subject.GetEntries(Target.Service);

            Assert.That(entries.Length, Is.EqualTo(3));
        }
        public void MessageGrouping_DifferentSource_NoGrouping()
        {
            var subject = new MonitorWorkItem(new MonitorConfiguration())
                          .AddMessageGroupingPatterns(ExportIntegrationErrorsStep.MessageGroupingPattern);

            var firstError = new MonitorEntry(Time.UtcNow.AddSeconds(-10), "SourceA", "Message. ErrorID: 1");
            var lastError  = new MonitorEntry(Time.UtcNow, "SourceB", "Message. ErrorID: 2");

            subject.Add(firstError);
            subject.Add(lastError);

            MonitorEntry[] entries = subject.GetEntries(Target.Service);

            Assert.That(entries.Length, Is.EqualTo(2));
            Assert.That(entries[1], Is.SameAs(firstError));
            Assert.That(entries[0], Is.SameAs(lastError));
        }
        public void Add_VariousMessagesIncludingIgnoredOnes_VerifyCount()
        {
            var ignoreFilter1 = Substitute.For <ISpecification <MonitorEntry> >();
            var ignoreFilter2 = Substitute.For <ISpecification <MonitorEntry> >();

            ignoreFilter1.IsSatisfiedBy(Arg.Is <MonitorEntry>(entry => entry.Message == "Message to ignore")).Returns(true);
            ignoreFilter2.IsSatisfiedBy(Arg.Is <MonitorEntry>(entry => entry.Message == "Also to be ignored")).Returns(true);

            var subject = new MonitorWorkItem(new MonitorConfiguration())
                          .AddIgnoreFilter(ignoreFilter1)
                          .AddIgnoreFilter(ignoreFilter2);

            subject.Add(Time.Now, "Source", "Not ignored message", Target.Service);
            subject.Add(Time.Now, "Source", "Message to ignore", Target.Service);
            subject.Add(Time.Now, "Source", "Also to be ignored", Target.Service);

            MonitorEntry[] entries = subject.GetEntries(Target.Service);

            Assert.That(entries.Length, Is.EqualTo(1));
            Assert.That(entries[0].Message, Is.EqualTo("Not ignored message"));
        }