Files
lmxopcua/tests/ZB.MOM.WW.LmxOpcUa.Tests/Wiring/ChangeDetectionToRebuildWiringTest.cs
Joseph Doherty 41a6b66943 Apply code style formatting and restore partial modifiers on Avalonia views
Linter/formatter pass across the full codebase. Restores required partial
keyword on AXAML code-behind classes that the formatter incorrectly removed.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-31 07:58:13 -04:00

58 lines
2.0 KiB
C#

using System;
using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;
using Shouldly;
using Xunit;
using ZB.MOM.WW.LmxOpcUa.Host.Domain;
using ZB.MOM.WW.LmxOpcUa.Host.GalaxyRepository;
using ZB.MOM.WW.LmxOpcUa.Tests.Helpers;
namespace ZB.MOM.WW.LmxOpcUa.Tests.Wiring
{
/// <summary>
/// Verifies: Galaxy change detection → OnGalaxyChanged → address space rebuild
/// </summary>
public class ChangeDetectionToRebuildWiringTest
{
/// <summary>
/// Confirms that a changed deploy timestamp causes the change-detection pipeline to raise another rebuild signal.
/// </summary>
[Fact]
public async Task ChangedTimestamp_TriggersRebuild()
{
var repo = new FakeGalaxyRepository
{
LastDeployTime = new DateTime(2024, 1, 1),
Hierarchy = new List<GalaxyObjectInfo>
{
new() { GobjectId = 1, TagName = "Obj1", BrowseName = "Obj1", ParentGobjectId = 0, IsArea = false }
},
Attributes = new List<GalaxyAttributeInfo>
{
new()
{
GobjectId = 1, TagName = "Obj1", AttributeName = "Attr1", FullTagReference = "Obj1.Attr1",
MxDataType = 5, IsArray = false
}
}
};
var rebuildCount = 0;
var service = new ChangeDetectionService(repo, 1);
service.OnGalaxyChanged += () => Interlocked.Increment(ref rebuildCount);
service.Start();
await Task.Delay(500); // First poll triggers
rebuildCount.ShouldBeGreaterThanOrEqualTo(1);
// Change deploy time → should trigger rebuild
repo.LastDeployTime = new DateTime(2024, 2, 1);
await Task.Delay(1500);
service.Stop();
rebuildCount.ShouldBeGreaterThanOrEqualTo(2);
service.Dispose();
}
}
}