feat(template-engine): persist IsMesReportable on alarm update; IsMesReportableOverride on SetAlarmOverrideAsync

Claude-Session: https://claude.ai/code/session_01Y5ef34iUUMjmwnMpL9xgmB
This commit is contained in:
Joseph Doherty
2026-09-11 09:56:54 -04:00
parent 30a23458e9
commit af10af1573
4 changed files with 160 additions and 1 deletions
@@ -530,6 +530,65 @@ public class TemplateServiceTests
Assert.Contains("TriggerType", result.Error);
}
[Fact]
public async Task UpdateAlarmAsync_CopiesIsMesReportable()
{
var existing = new TemplateAlarm("HighTemp")
{
Id = 1,
TemplateId = 1,
TriggerType = AlarmTriggerType.ValueMatch,
PriorityLevel = 500,
IsMesReportable = false
};
_repoMock.Setup(r => r.GetTemplateAlarmByIdAsync(1, It.IsAny<CancellationToken>())).ReturnsAsync(existing);
var template = new Template("Pump") { Id = 1 };
_repoMock.Setup(r => r.GetTemplateByIdAsync(1, It.IsAny<CancellationToken>())).ReturnsAsync(template);
var proposed = new TemplateAlarm("HighTemp")
{
TriggerType = AlarmTriggerType.ValueMatch,
PriorityLevel = 500,
IsMesReportable = true
};
var result = await _service.UpdateAlarmAsync(1, proposed, "admin");
Assert.True(result.IsSuccess);
Assert.True(result.Value.IsMesReportable);
Assert.True(existing.IsMesReportable);
_repoMock.Verify(r => r.UpdateTemplateAlarmAsync(
It.Is<TemplateAlarm>(a => a.IsMesReportable), It.IsAny<CancellationToken>()), Times.Once);
}
[Fact]
public async Task UpdateAlarmAsync_ClearsIsMesReportable()
{
var existing = new TemplateAlarm("HighTemp")
{
Id = 1,
TemplateId = 1,
TriggerType = AlarmTriggerType.ValueMatch,
PriorityLevel = 500,
IsMesReportable = true
};
_repoMock.Setup(r => r.GetTemplateAlarmByIdAsync(1, It.IsAny<CancellationToken>())).ReturnsAsync(existing);
var template = new Template("Pump") { Id = 1 };
_repoMock.Setup(r => r.GetTemplateByIdAsync(1, It.IsAny<CancellationToken>())).ReturnsAsync(template);
var proposed = new TemplateAlarm("HighTemp")
{
TriggerType = AlarmTriggerType.ValueMatch,
PriorityLevel = 500,
IsMesReportable = false
};
var result = await _service.UpdateAlarmAsync(1, proposed, "admin");
Assert.True(result.IsSuccess);
Assert.False(result.Value.IsMesReportable);
}
// ========================================================================
// WP-4: Script Definitions
// ========================================================================