using System.Text.Json; using Bit.Api.AdminConsole.Models.Request.Organizations; using Bit.Core.AdminConsole.Models.Data.EventIntegrations; using Bit.Core.Enums; using Xunit; namespace Bit.Api.Test.AdminConsole.Models.Request.Organizations; public class OrganizationIntegrationConfigurationRequestModelTests { [Fact] public void IsValidForType_CloudBillingSyncIntegration_ReturnsFalse() { var model = new OrganizationIntegrationConfigurationRequestModel { Configuration = "{}", Template = "template" }; Assert.False(condition: model.IsValidForType(IntegrationType.CloudBillingSync)); } [Theory] [InlineData(data: null)] [InlineData(data: "")] [InlineData(data: " ")] public void IsValidForType_EmptyConfiguration_ReturnsFalse(string? config) { var model = new OrganizationIntegrationConfigurationRequestModel { Configuration = config, Template = "template" }; Assert.False(condition: model.IsValidForType(IntegrationType.Slack)); Assert.False(condition: model.IsValidForType(IntegrationType.Webhook)); } [Theory] [InlineData(data: "")] [InlineData(data: " ")] public void IsValidForType_EmptyNonNullHecConfiguration_ReturnsFalse(string? config) { var model = new OrganizationIntegrationConfigurationRequestModel { Configuration = config, Template = "template" }; Assert.False(condition: model.IsValidForType(IntegrationType.Hec)); } [Fact] public void IsValidForType_NullHecConfiguration_ReturnsTrue() { var model = new OrganizationIntegrationConfigurationRequestModel { Configuration = null, Template = "template" }; Assert.True(condition: model.IsValidForType(IntegrationType.Hec)); } [Theory] [InlineData(data: null)] [InlineData(data: "")] [InlineData(data: " ")] public void IsValidForType_EmptyTemplate_ReturnsFalse(string? template) { var config = JsonSerializer.Serialize(value: new WebhookIntegrationConfiguration( Uri: new Uri("https://localhost"), Scheme: "Bearer", Token: "AUTH-TOKEN")); var model = new OrganizationIntegrationConfigurationRequestModel { Configuration = config, Template = template }; Assert.False(condition: model.IsValidForType(IntegrationType.Slack)); Assert.False(condition: model.IsValidForType(IntegrationType.Webhook)); Assert.False(condition: model.IsValidForType(IntegrationType.Hec)); } [Fact] public void IsValidForType_InvalidJsonConfiguration_ReturnsFalse() { var model = new OrganizationIntegrationConfigurationRequestModel { Configuration = "{not valid json}", Template = "template" }; Assert.False(condition: model.IsValidForType(IntegrationType.Slack)); Assert.False(condition: model.IsValidForType(IntegrationType.Webhook)); Assert.False(condition: model.IsValidForType(IntegrationType.Hec)); } [Fact] public void IsValidForType_ScimIntegration_ReturnsFalse() { var model = new OrganizationIntegrationConfigurationRequestModel { Configuration = "{}", Template = "template" }; Assert.False(condition: model.IsValidForType(IntegrationType.Scim)); } [Fact] public void IsValidForType_ValidSlackConfiguration_ReturnsTrue() { var config = JsonSerializer.Serialize(value: new SlackIntegrationConfiguration(ChannelId: "C12345")); var model = new OrganizationIntegrationConfigurationRequestModel { Configuration = config, Template = "template" }; Assert.True(condition: model.IsValidForType(IntegrationType.Slack)); } [Fact] public void IsValidForType_ValidNoAuthWebhookConfiguration_ReturnsTrue() { var config = JsonSerializer.Serialize(value: new WebhookIntegrationConfiguration(Uri: new Uri("https://localhost"))); var model = new OrganizationIntegrationConfigurationRequestModel { Configuration = config, Template = "template" }; Assert.True(condition: model.IsValidForType(IntegrationType.Webhook)); } [Fact] public void IsValidForType_ValidWebhookConfiguration_ReturnsTrue() { var config = JsonSerializer.Serialize(value: new WebhookIntegrationConfiguration( Uri: new Uri("https://localhost"), Scheme: "Bearer", Token: "AUTH-TOKEN")); var model = new OrganizationIntegrationConfigurationRequestModel { Configuration = config, Template = "template" }; Assert.True(condition: model.IsValidForType(IntegrationType.Webhook)); } [Fact] public void IsValidForType_UnknownIntegrationType_ReturnsFalse() { var model = new OrganizationIntegrationConfigurationRequestModel { Configuration = "{}", Template = "template" }; var unknownType = (IntegrationType)999; Assert.False(condition: model.IsValidForType(unknownType)); } }