feat(sms): complete SmsConfig bundle export/import wiring + GetSmsConfigurationByIdAsync (S10b)

This commit is contained in:
Joseph Doherty
2026-06-19 11:10:39 -04:00
parent 78fadb82d2
commit c3501ecd72
19 changed files with 586 additions and 6 deletions
@@ -2,6 +2,7 @@ using NSubstitute;
using ZB.MOM.WW.ScadaBridge.Commons.Entities.ExternalSystems;
using ZB.MOM.WW.ScadaBridge.Commons.Entities.InboundApi;
using ZB.MOM.WW.ScadaBridge.Commons.Entities.Instances;
using ZB.MOM.WW.ScadaBridge.Commons.Entities.Notifications;
using ZB.MOM.WW.ScadaBridge.Commons.Entities.Scripts;
using ZB.MOM.WW.ScadaBridge.Commons.Entities.Sites;
using ZB.MOM.WW.ScadaBridge.Commons.Entities.Templates;
@@ -64,6 +65,17 @@ public sealed class DependencyResolverTests
SiteIds: siteIds ?? Array.Empty<int>(),
InstanceIds: instanceIds);
private static ExportSelection SelectSmsConfigs(params int[] ids) => new(
TemplateIds: Array.Empty<int>(),
SharedScriptIds: Array.Empty<int>(),
ExternalSystemIds: Array.Empty<int>(),
DatabaseConnectionIds: Array.Empty<int>(),
NotificationListIds: Array.Empty<int>(),
SmtpConfigurationIds: Array.Empty<int>(),
ApiMethodIds: Array.Empty<int>(),
IncludeDependencies: true,
SmsConfigurationIds: ids);
private void StubTemplate(Template t)
{
_templates.GetTemplateWithChildrenAsync(t.Id, Arg.Any<CancellationToken>()).Returns(t);
@@ -194,6 +206,26 @@ public sealed class DependencyResolverTests
Assert.Equal("Validator", result.SharedScripts[0].Name);
}
[Fact]
public async Task Resolve_includes_selected_sms_configs()
{
// Mirrors the SMTP/by-id seed path: a selected SMS config id resolves via
// GetSmsConfigurationByIdAsync into ResolvedExport.SmsConfigs, and a manifest
// row (keyed by AccountSid) is emitted alongside it.
var sms = new SmsConfiguration("AC_test_sid", "+15551230000") { Id = 7 };
_notifications.GetSmsConfigurationByIdAsync(7, Arg.Any<CancellationToken>()).Returns(sms);
StubAllSharedScripts();
StubAllExternalSystems();
StubAllFolders();
var result = await Sut().ResolveAsync(SelectSmsConfigs(7), CancellationToken.None);
Assert.Single(result.SmsConfigs);
Assert.Equal("AC_test_sid", result.SmsConfigs[0].AccountSid);
Assert.Contains(result.ContentManifest,
e => e.Type == "SmsConfiguration" && e.Name == "AC_test_sid");
}
[Fact]
public async Task Resolve_handles_diamond_dependency_without_duplication()
{