public void PriorityMappingsCanBeParsed()
        {
            const string input = "Test=P1, Another= p2";

            Assert.True(OpsgenieApp.TryParsePriorityMappings(input, out var mappings));
            Assert.Equal(2, mappings.Count);
            Assert.Equal(Priority.P1, mappings["test"]);
            Assert.Equal(Priority.P2, mappings["another"]);
        }
        public void WhenLevelMappingIsSpecifiedPriorityIsComputed(LogEventLevel level, Priority expectedPriority)
        {
            using var app = new OpsgenieApp
                  {
                      ApiClient        = new TestOpsgenieApiClient(),
                      DefaultPriority  = Priority.P2.ToString(),
                      PriorityProperty = "@Level",
                      EventPriority    = "Warning=P3,Debug=P1"
                  };

            app.Attach(TestAppHost.Instance);

            var evt      = Some.LogEvent(level: level);
            var priority = app.ComputePriority(evt);

            Assert.Equal(expectedPriority, priority);
        }
        public void TryGetPropertyValueCIMatchesCaseInsensitivePropertyNames()
        {
            var expected   = new { };
            var properties = new Dictionary <string, object>
            {
                ["A"] = expected,
                ["b"] = new { }
            };

            Assert.True(OpsgenieApp.TryGetPropertyValueCI(properties, "A", out var actual));
            Assert.Equal(expected, actual);

            Assert.True(OpsgenieApp.TryGetPropertyValueCI(properties, "a", out actual));
            Assert.Equal(expected, actual);

            Assert.False(OpsgenieApp.TryGetPropertyValueCI(properties, "C", out _));
        }
        public void WhenMappedPropertyIsMissingPriorityIsDefault()
        {
            using var app = new OpsgenieApp
                  {
                      ApiClient        = new TestOpsgenieApiClient(),
                      DefaultPriority  = Priority.P2.ToString(),
                      PriorityProperty = "Test",
                      EventPriority    = "B=P3,A=P1"
                  };

            app.Attach(TestAppHost.Instance);

            var evt      = Some.LogEvent();
            var priority = app.ComputePriority(evt);

            Assert.Equal(Priority.P2, priority);
        }
        public void WhenValueMappingIsSpecifiedPriorityIsComputed(object value, Priority expectedPriority)
        {
            using var app = new OpsgenieApp
                  {
                      ApiClient        = new TestOpsgenieApiClient(),
                      DefaultPriority  = Priority.P2.ToString(),
                      PriorityProperty = "Test",
                      EventPriority    = "B=P3,A=P1"
                  };

            app.Attach(TestAppHost.Instance);

            var evt = Some.LogEvent(include: new Dictionary <string, object> {
                ["Test"] = value
            });
            var priority = app.ComputePriority(evt);

            Assert.Equal(expectedPriority, priority);
        }
        public async Task AppTriggersAlerts()
        {
            var apiClient = new TestOpsgenieApiClient();

            using var app = new OpsgenieApp
                  {
                      AlertMessage = "Test",
                      Tags         = "First, Second, Third",
                      ApiClient    = apiClient
                  };

            app.Attach(TestAppHost.Instance);

            var evt = Some.LogEvent();
            await app.OnAsync(evt);

            var alert = Assert.Single(apiClient.CreatedAlerts);

            Assert.Equal("Test", alert !.Message);
            Assert.Equal(evt.Id, alert.Alias);
            Assert.Equal(new[] { "First", "Second", "Third" }, alert.Tags);
        }