using NATS.Server.Auth; using NATS.Server.Imports; namespace NATS.Server.Tests; public class ImportExportTests { [Fact] public void ExportAuth_public_export_authorizes_any_account() { var auth = new ExportAuth(); var account = new Account("test"); auth.IsAuthorized(account).ShouldBeTrue(); } [Fact] public void ExportAuth_approved_accounts_restricts_access() { var auth = new ExportAuth { ApprovedAccounts = ["allowed"] }; var allowed = new Account("allowed"); var denied = new Account("denied"); auth.IsAuthorized(allowed).ShouldBeTrue(); auth.IsAuthorized(denied).ShouldBeFalse(); } [Fact] public void ExportAuth_revoked_account_denied() { var auth = new ExportAuth { ApprovedAccounts = ["test"], RevokedAccounts = new() { ["test"] = DateTimeOffset.UtcNow.ToUnixTimeSeconds() }, }; var account = new Account("test"); auth.IsAuthorized(account).ShouldBeFalse(); } [Fact] public void ServiceResponseType_defaults_to_singleton() { var import = new ServiceImport { DestinationAccount = new Account("dest"), From = "requests.>", To = "api.>", }; import.ResponseType.ShouldBe(ServiceResponseType.Singleton); } [Fact] public void ExportMap_stores_and_retrieves_exports() { var map = new ExportMap(); map.Services["api.>"] = new ServiceExport { Account = new Account("svc") }; map.Streams["events.>"] = new StreamExport(); map.Services.ShouldContainKey("api.>"); map.Streams.ShouldContainKey("events.>"); } [Fact] public void ImportMap_stores_service_imports() { var map = new ImportMap(); var si = new ServiceImport { DestinationAccount = new Account("dest"), From = "requests.>", To = "api.>", }; map.AddServiceImport(si); map.Services.ShouldContainKey("requests.>"); map.Services["requests.>"].Count.ShouldBe(1); } }