You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
244 lines
8.2 KiB
244 lines
8.2 KiB
using System.Text.Json; |
|
using Bit.Core.AdminConsole.Entities; |
|
using Bit.Core.AdminConsole.Models.Data.EventIntegrations; |
|
using Bit.Core.AdminConsole.Services; |
|
using Bit.Core.Enums; |
|
using Xunit; |
|
|
|
namespace Bit.Core.Test.AdminConsole.Services; |
|
|
|
public class OrganizationIntegrationConfigurationValidatorTests |
|
{ |
|
private readonly OrganizationIntegrationConfigurationValidator _sut = new(); |
|
|
|
[Fact] |
|
public void ValidateConfiguration_CloudBillingSyncIntegration_ReturnsFalse() |
|
{ |
|
var configuration = new OrganizationIntegrationConfiguration |
|
{ |
|
Configuration = "{}", |
|
Template = "template" |
|
}; |
|
|
|
Assert.False(_sut.ValidateConfiguration(IntegrationType.CloudBillingSync, configuration)); |
|
} |
|
|
|
[Theory] |
|
[InlineData(null)] |
|
[InlineData("")] |
|
[InlineData(" ")] |
|
public void ValidateConfiguration_EmptyTemplate_ReturnsFalse(string? template) |
|
{ |
|
var config1 = new OrganizationIntegrationConfiguration |
|
{ |
|
Configuration = JsonSerializer.Serialize(new SlackIntegrationConfiguration(ChannelId: "C12345")), |
|
Template = template |
|
}; |
|
Assert.False(_sut.ValidateConfiguration(IntegrationType.Slack, config1)); |
|
|
|
var config2 = new OrganizationIntegrationConfiguration |
|
{ |
|
Configuration = JsonSerializer.Serialize(new WebhookIntegrationConfiguration(Uri: new Uri("https://example.com"))), |
|
Template = template |
|
}; |
|
Assert.False(_sut.ValidateConfiguration(IntegrationType.Webhook, config2)); |
|
} |
|
|
|
[Theory] |
|
[InlineData("")] |
|
[InlineData(" ")] |
|
public void ValidateConfiguration_EmptyNonNullConfiguration_ReturnsFalse(string? config) |
|
{ |
|
var config1 = new OrganizationIntegrationConfiguration |
|
{ |
|
Configuration = config, |
|
Template = "template" |
|
}; |
|
Assert.False(_sut.ValidateConfiguration(IntegrationType.Hec, config1)); |
|
|
|
var config2 = new OrganizationIntegrationConfiguration |
|
{ |
|
Configuration = config, |
|
Template = "template" |
|
}; |
|
Assert.False(_sut.ValidateConfiguration(IntegrationType.Datadog, config2)); |
|
|
|
var config3 = new OrganizationIntegrationConfiguration |
|
{ |
|
Configuration = config, |
|
Template = "template" |
|
}; |
|
Assert.False(_sut.ValidateConfiguration(IntegrationType.Teams, config3)); |
|
} |
|
|
|
[Fact] |
|
public void ValidateConfiguration_NullConfiguration_ReturnsTrue() |
|
{ |
|
var config1 = new OrganizationIntegrationConfiguration |
|
{ |
|
Configuration = null, |
|
Template = "template" |
|
}; |
|
Assert.True(_sut.ValidateConfiguration(IntegrationType.Hec, config1)); |
|
|
|
var config2 = new OrganizationIntegrationConfiguration |
|
{ |
|
Configuration = null, |
|
Template = "template" |
|
}; |
|
Assert.True(_sut.ValidateConfiguration(IntegrationType.Datadog, config2)); |
|
|
|
var config3 = new OrganizationIntegrationConfiguration |
|
{ |
|
Configuration = null, |
|
Template = "template" |
|
}; |
|
Assert.True(_sut.ValidateConfiguration(IntegrationType.Teams, config3)); |
|
} |
|
|
|
[Fact] |
|
public void ValidateConfiguration_InvalidJsonConfiguration_ReturnsFalse() |
|
{ |
|
var config = new OrganizationIntegrationConfiguration |
|
{ |
|
Configuration = "{not valid json}", |
|
Template = "template" |
|
}; |
|
|
|
Assert.False(_sut.ValidateConfiguration(IntegrationType.Slack, config)); |
|
Assert.False(_sut.ValidateConfiguration(IntegrationType.Webhook, config)); |
|
Assert.False(_sut.ValidateConfiguration(IntegrationType.Hec, config)); |
|
Assert.False(_sut.ValidateConfiguration(IntegrationType.Datadog, config)); |
|
Assert.False(_sut.ValidateConfiguration(IntegrationType.Teams, config)); |
|
} |
|
|
|
[Fact] |
|
public void ValidateConfiguration_InvalidJsonFilters_ReturnsFalse() |
|
{ |
|
var configuration = new OrganizationIntegrationConfiguration |
|
{ |
|
Configuration = JsonSerializer.Serialize(new WebhookIntegrationConfiguration(Uri: new Uri("https://example.com"))), |
|
Template = "template", |
|
Filters = "{Not valid json}" |
|
}; |
|
|
|
Assert.False(_sut.ValidateConfiguration(IntegrationType.Webhook, configuration)); |
|
} |
|
|
|
[Fact] |
|
public void ValidateConfiguration_ScimIntegration_ReturnsFalse() |
|
{ |
|
var configuration = new OrganizationIntegrationConfiguration |
|
{ |
|
Configuration = "{}", |
|
Template = "template" |
|
}; |
|
|
|
Assert.False(_sut.ValidateConfiguration(IntegrationType.Scim, configuration)); |
|
} |
|
|
|
[Fact] |
|
public void ValidateConfiguration_ValidSlackConfiguration_ReturnsTrue() |
|
{ |
|
var configuration = new OrganizationIntegrationConfiguration |
|
{ |
|
Configuration = JsonSerializer.Serialize(new SlackIntegrationConfiguration(ChannelId: "C12345")), |
|
Template = "template" |
|
}; |
|
|
|
Assert.True(_sut.ValidateConfiguration(IntegrationType.Slack, configuration)); |
|
} |
|
|
|
[Fact] |
|
public void ValidateConfiguration_ValidSlackConfigurationWithFilters_ReturnsTrue() |
|
{ |
|
var configuration = new OrganizationIntegrationConfiguration |
|
{ |
|
Configuration = JsonSerializer.Serialize(new SlackIntegrationConfiguration("C12345")), |
|
Template = "template", |
|
Filters = JsonSerializer.Serialize(new IntegrationFilterGroup() |
|
{ |
|
AndOperator = true, |
|
Rules = [ |
|
new IntegrationFilterRule() |
|
{ |
|
Operation = IntegrationFilterOperation.Equals, |
|
Property = "CollectionId", |
|
Value = Guid.NewGuid() |
|
} |
|
], |
|
Groups = [] |
|
}) |
|
}; |
|
|
|
Assert.True(_sut.ValidateConfiguration(IntegrationType.Slack, configuration)); |
|
} |
|
|
|
[Fact] |
|
public void ValidateConfiguration_ValidNoAuthWebhookConfiguration_ReturnsTrue() |
|
{ |
|
var configuration = new OrganizationIntegrationConfiguration |
|
{ |
|
Configuration = JsonSerializer.Serialize(new WebhookIntegrationConfiguration(Uri: new Uri("https://localhost"))), |
|
Template = "template" |
|
}; |
|
|
|
Assert.True(_sut.ValidateConfiguration(IntegrationType.Webhook, configuration)); |
|
} |
|
|
|
[Fact] |
|
public void ValidateConfiguration_ValidWebhookConfiguration_ReturnsTrue() |
|
{ |
|
var configuration = new OrganizationIntegrationConfiguration |
|
{ |
|
Configuration = JsonSerializer.Serialize(new WebhookIntegrationConfiguration( |
|
Uri: new Uri("https://localhost"), |
|
Scheme: "Bearer", |
|
Token: "AUTH-TOKEN")), |
|
Template = "template" |
|
}; |
|
|
|
Assert.True(_sut.ValidateConfiguration(IntegrationType.Webhook, configuration)); |
|
} |
|
|
|
[Fact] |
|
public void ValidateConfiguration_ValidWebhookConfigurationWithFilters_ReturnsTrue() |
|
{ |
|
var configuration = new OrganizationIntegrationConfiguration |
|
{ |
|
Configuration = JsonSerializer.Serialize(new WebhookIntegrationConfiguration( |
|
Uri: new Uri("https://example.com"), |
|
Scheme: "Bearer", |
|
Token: "AUTH-TOKEN")), |
|
Template = "template", |
|
Filters = JsonSerializer.Serialize(new IntegrationFilterGroup() |
|
{ |
|
AndOperator = true, |
|
Rules = [ |
|
new IntegrationFilterRule() |
|
{ |
|
Operation = IntegrationFilterOperation.Equals, |
|
Property = "CollectionId", |
|
Value = Guid.NewGuid() |
|
} |
|
], |
|
Groups = [] |
|
}) |
|
}; |
|
|
|
Assert.True(_sut.ValidateConfiguration(IntegrationType.Webhook, configuration)); |
|
} |
|
|
|
[Fact] |
|
public void ValidateConfiguration_UnknownIntegrationType_ReturnsFalse() |
|
{ |
|
var unknownType = (IntegrationType)999; |
|
var configuration = new OrganizationIntegrationConfiguration |
|
{ |
|
Configuration = "{}", |
|
Template = "template" |
|
}; |
|
|
|
Assert.False(_sut.ValidateConfiguration(unknownType, configuration)); |
|
} |
|
}
|
|
|