100 lines
3.5 KiB
C#
100 lines
3.5 KiB
C#
namespace NATS.Server.Tests;
|
|
|
|
using NATS.Server.Auth.Jwt;
|
|
|
|
public class PermissionTemplateTests
|
|
{
|
|
[Fact]
|
|
public void Expand_name_template()
|
|
{
|
|
var result = PermissionTemplates.Expand("user.{{name()}}.>",
|
|
name: "alice", subject: "UABC", accountName: "acct", accountSubject: "AABC",
|
|
userTags: [], accountTags: []);
|
|
result.ShouldBe(["user.alice.>"]);
|
|
}
|
|
|
|
[Fact]
|
|
public void Expand_subject_template()
|
|
{
|
|
var result = PermissionTemplates.Expand("inbox.{{subject()}}.>",
|
|
name: "alice", subject: "UABC123", accountName: "acct", accountSubject: "AABC",
|
|
userTags: [], accountTags: []);
|
|
result.ShouldBe(["inbox.UABC123.>"]);
|
|
}
|
|
|
|
[Fact]
|
|
public void Expand_account_name_template()
|
|
{
|
|
var result = PermissionTemplates.Expand("acct.{{account-name()}}.>",
|
|
name: "alice", subject: "UABC", accountName: "myaccount", accountSubject: "AABC",
|
|
userTags: [], accountTags: []);
|
|
result.ShouldBe(["acct.myaccount.>"]);
|
|
}
|
|
|
|
[Fact]
|
|
public void Expand_account_subject_template()
|
|
{
|
|
var result = PermissionTemplates.Expand("acct.{{account-subject()}}.>",
|
|
name: "alice", subject: "UABC", accountName: "acct", accountSubject: "AABC456",
|
|
userTags: [], accountTags: []);
|
|
result.ShouldBe(["acct.AABC456.>"]);
|
|
}
|
|
|
|
[Fact]
|
|
public void Expand_tag_template_single_value()
|
|
{
|
|
var result = PermissionTemplates.Expand("dept.{{tag(dept)}}.>",
|
|
name: "alice", subject: "UABC", accountName: "acct", accountSubject: "AABC",
|
|
userTags: ["dept:engineering"], accountTags: []);
|
|
result.ShouldBe(["dept.engineering.>"]);
|
|
}
|
|
|
|
[Fact]
|
|
public void Expand_tag_template_multi_value_cartesian()
|
|
{
|
|
var result = PermissionTemplates.Expand("dept.{{tag(dept)}}.>",
|
|
name: "alice", subject: "UABC", accountName: "acct", accountSubject: "AABC",
|
|
userTags: ["dept:eng", "dept:sales"], accountTags: []);
|
|
result.Count.ShouldBe(2);
|
|
result.ShouldContain("dept.eng.>");
|
|
result.ShouldContain("dept.sales.>");
|
|
}
|
|
|
|
[Fact]
|
|
public void Expand_account_tag_template()
|
|
{
|
|
var result = PermissionTemplates.Expand("region.{{account-tag(region)}}.>",
|
|
name: "alice", subject: "UABC", accountName: "acct", accountSubject: "AABC",
|
|
userTags: [], accountTags: ["region:us-east"]);
|
|
result.ShouldBe(["region.us-east.>"]);
|
|
}
|
|
|
|
[Fact]
|
|
public void Expand_no_templates_returns_original()
|
|
{
|
|
var result = PermissionTemplates.Expand("foo.bar.>",
|
|
name: "alice", subject: "UABC", accountName: "acct", accountSubject: "AABC",
|
|
userTags: [], accountTags: []);
|
|
result.ShouldBe(["foo.bar.>"]);
|
|
}
|
|
|
|
[Fact]
|
|
public void Expand_unknown_tag_returns_empty()
|
|
{
|
|
var result = PermissionTemplates.Expand("dept.{{tag(missing)}}.>",
|
|
name: "alice", subject: "UABC", accountName: "acct", accountSubject: "AABC",
|
|
userTags: ["dept:eng"], accountTags: []);
|
|
result.ShouldBeEmpty();
|
|
}
|
|
|
|
[Fact]
|
|
public void ExpandAll_expands_array_of_subjects()
|
|
{
|
|
var subjects = new[] { "user.{{name()}}.>", "inbox.{{subject()}}.>" };
|
|
var result = PermissionTemplates.ExpandAll(subjects,
|
|
name: "alice", subject: "UABC", accountName: "acct", accountSubject: "AABC",
|
|
userTags: [], accountTags: []);
|
|
result.ShouldBe(["user.alice.>", "inbox.UABC.>"]);
|
|
}
|
|
}
|