diff --git a/src/ZB.MOM.WW.ScadaBridge.Commons/Interfaces/Repositories/INotificationRepository.cs b/src/ZB.MOM.WW.ScadaBridge.Commons/Interfaces/Repositories/INotificationRepository.cs
index 88c3aa0c..ae822a21 100644
--- a/src/ZB.MOM.WW.ScadaBridge.Commons/Interfaces/Repositories/INotificationRepository.cs
+++ b/src/ZB.MOM.WW.ScadaBridge.Commons/Interfaces/Repositories/INotificationRepository.cs
@@ -124,6 +124,12 @@ public interface INotificationRepository
/// A task representing the asynchronous operation.
Task UpdateSmsConfigurationAsync(SmsConfiguration smsConfiguration, CancellationToken cancellationToken = default);
+ /// Deletes an SMS configuration by ID.
+ /// The SMS configuration ID.
+ /// Cancellation token.
+ /// A task representing the asynchronous operation.
+ Task DeleteSmsConfigurationAsync(int id, CancellationToken cancellationToken = default);
+
/// Saves pending changes to the repository.
/// Cancellation token.
/// The number of entities saved.
diff --git a/src/ZB.MOM.WW.ScadaBridge.ConfigurationDatabase/Configurations/NotificationConfiguration.cs b/src/ZB.MOM.WW.ScadaBridge.ConfigurationDatabase/Configurations/NotificationConfiguration.cs
index 7343be1e..a6171829 100644
--- a/src/ZB.MOM.WW.ScadaBridge.ConfigurationDatabase/Configurations/NotificationConfiguration.cs
+++ b/src/ZB.MOM.WW.ScadaBridge.ConfigurationDatabase/Configurations/NotificationConfiguration.cs
@@ -57,8 +57,7 @@ public class NotificationRecipientConfiguration : IEntityTypeConfiguration
{
- /// Configures the EF Core mapping for .
- /// The entity type builder.
+ ///
public void Configure(EntityTypeBuilder builder)
{
builder.HasKey(s => s.Id);
diff --git a/src/ZB.MOM.WW.ScadaBridge.ConfigurationDatabase/Repositories/NotificationRepository.cs b/src/ZB.MOM.WW.ScadaBridge.ConfigurationDatabase/Repositories/NotificationRepository.cs
index 6bbeebd8..96ab8843 100644
--- a/src/ZB.MOM.WW.ScadaBridge.ConfigurationDatabase/Repositories/NotificationRepository.cs
+++ b/src/ZB.MOM.WW.ScadaBridge.ConfigurationDatabase/Repositories/NotificationRepository.cs
@@ -104,6 +104,13 @@ public class NotificationRepository : INotificationRepository
public Task UpdateSmsConfigurationAsync(SmsConfiguration smsConfiguration, CancellationToken cancellationToken = default)
{ _context.Set().Update(smsConfiguration); return Task.CompletedTask; }
+ ///
+ public async Task DeleteSmsConfigurationAsync(int id, CancellationToken cancellationToken = default)
+ {
+ var entity = await _context.Set().FindAsync(new object[] { id }, cancellationToken);
+ if (entity != null) _context.Set().Remove(entity);
+ }
+
///
public async Task SaveChangesAsync(CancellationToken cancellationToken = default)
=> await _context.SaveChangesAsync(cancellationToken);
diff --git a/src/ZB.MOM.WW.ScadaBridge.SiteRuntime/Repositories/SiteNotificationRepository.cs b/src/ZB.MOM.WW.ScadaBridge.SiteRuntime/Repositories/SiteNotificationRepository.cs
index e3fb966a..f40ae81e 100644
--- a/src/ZB.MOM.WW.ScadaBridge.SiteRuntime/Repositories/SiteNotificationRepository.cs
+++ b/src/ZB.MOM.WW.ScadaBridge.SiteRuntime/Repositories/SiteNotificationRepository.cs
@@ -211,6 +211,10 @@ public class SiteNotificationRepository : INotificationRepository
public Task UpdateSmsConfigurationAsync(SmsConfiguration smsConfiguration, CancellationToken cancellationToken = default)
=> throw new NotSupportedException("Managed via artifact deployment from Central");
+ ///
+ public Task DeleteSmsConfigurationAsync(int id, CancellationToken cancellationToken = default)
+ => throw new NotSupportedException("Managed via artifact deployment from Central");
+
///
public Task SaveChangesAsync(CancellationToken cancellationToken = default)
=> throw new NotSupportedException("Managed via artifact deployment from Central");
diff --git a/tests/ZB.MOM.WW.ScadaBridge.ConfigurationDatabase.Tests/RepositoryCoverageTests.cs b/tests/ZB.MOM.WW.ScadaBridge.ConfigurationDatabase.Tests/RepositoryCoverageTests.cs
index c532b71f..0ce7297d 100644
--- a/tests/ZB.MOM.WW.ScadaBridge.ConfigurationDatabase.Tests/RepositoryCoverageTests.cs
+++ b/tests/ZB.MOM.WW.ScadaBridge.ConfigurationDatabase.Tests/RepositoryCoverageTests.cs
@@ -226,6 +226,34 @@ public class NotificationRepositoryTests : IDisposable
Assert.Null(await _repository.GetNotificationListByIdAsync(list.Id));
}
+ [Fact]
+ public async Task AddSmsConfiguration_RoundTrips()
+ {
+ var sms = new SmsConfiguration("ACtest123", "+14155550100");
+ await _repository.AddSmsConfigurationAsync(sms);
+ await _repository.SaveChangesAsync();
+
+ var loaded = await _repository.GetSmsConfigurationAsync();
+ Assert.NotNull(loaded);
+ Assert.Equal("ACtest123", loaded!.AccountSid);
+ Assert.Equal("+14155550100", loaded.FromNumber);
+
+ // Update a field and verify GetAllSmsConfigurationsAsync reflects it.
+ loaded.FromNumber = "+14155550199";
+ await _repository.UpdateSmsConfigurationAsync(loaded);
+ await _repository.SaveChangesAsync();
+
+ var all = await _repository.GetAllSmsConfigurationsAsync();
+ Assert.Single(all);
+ Assert.Equal("+14155550199", all[0].FromNumber);
+
+ // Delete and verify removal.
+ await _repository.DeleteSmsConfigurationAsync(loaded.Id);
+ await _repository.SaveChangesAsync();
+
+ Assert.Null(await _repository.GetSmsConfigurationAsync());
+ }
+
[Fact]
public async Task NotificationList_PersistsType()
{
diff --git a/tests/ZB.MOM.WW.ScadaBridge.ConfigurationDatabase.Tests/UnitTest1.cs b/tests/ZB.MOM.WW.ScadaBridge.ConfigurationDatabase.Tests/UnitTest1.cs
index e1c5b0bf..1fc5dcd0 100644
--- a/tests/ZB.MOM.WW.ScadaBridge.ConfigurationDatabase.Tests/UnitTest1.cs
+++ b/tests/ZB.MOM.WW.ScadaBridge.ConfigurationDatabase.Tests/UnitTest1.cs
@@ -53,6 +53,7 @@ public class DbContextTests : IDisposable
Assert.NotNull(_context.NotificationLists);
Assert.NotNull(_context.NotificationRecipients);
Assert.NotNull(_context.SmtpConfigurations);
+ Assert.NotNull(_context.SmsConfigurations);
Assert.NotNull(_context.SharedScripts);
Assert.NotNull(_context.LdapGroupMappings);
Assert.NotNull(_context.SiteScopeRules);