fix(m9/T24a): scope move-guard native-alarm scan to source-site templates (Ordinal); purpose-built include; add guard-4 + repo tests
This commit is contained in:
@@ -776,6 +776,76 @@ public class SiteRepositoryTests : IDisposable
|
||||
Assert.Single(instances);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task GetInstancesReferencingDataConnection_NoBindings_ReturnsEmpty()
|
||||
{
|
||||
var site = new Site("Site1", "S-001");
|
||||
var template = new Template("T1");
|
||||
_context.Sites.Add(site);
|
||||
_context.Templates.Add(template);
|
||||
await _context.SaveChangesAsync();
|
||||
|
||||
var conn = new DataConnection("Conn1", "OpcUa", site.Id);
|
||||
_context.DataConnections.Add(conn);
|
||||
_context.Instances.Add(new Instance("I1") { SiteId = site.Id, TemplateId = template.Id });
|
||||
await _context.SaveChangesAsync();
|
||||
|
||||
var result = await _repository.GetInstancesReferencingDataConnectionAsync(conn.Id);
|
||||
Assert.Empty(result);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task GetInstancesReferencingDataConnection_OneBinding_ReturnsThatInstance()
|
||||
{
|
||||
var site = new Site("Site1", "S-001");
|
||||
var template = new Template("T1");
|
||||
_context.Sites.Add(site);
|
||||
_context.Templates.Add(template);
|
||||
await _context.SaveChangesAsync();
|
||||
|
||||
var conn = new DataConnection("Conn1", "OpcUa", site.Id);
|
||||
_context.DataConnections.Add(conn);
|
||||
var instance = new Instance("I1") { SiteId = site.Id, TemplateId = template.Id };
|
||||
_context.Instances.Add(instance);
|
||||
await _context.SaveChangesAsync();
|
||||
|
||||
_context.InstanceConnectionBindings.Add(
|
||||
new InstanceConnectionBinding("Attr1") { InstanceId = instance.Id, DataConnectionId = conn.Id });
|
||||
await _context.SaveChangesAsync();
|
||||
|
||||
var result = await _repository.GetInstancesReferencingDataConnectionAsync(conn.Id);
|
||||
Assert.Single(result);
|
||||
Assert.Equal(instance.Id, result[0].Id);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task GetInstancesReferencingDataConnection_TwoBindingsSameInstance_ReturnsOne()
|
||||
{
|
||||
var site = new Site("Site1", "S-001");
|
||||
var template = new Template("T1");
|
||||
_context.Sites.Add(site);
|
||||
_context.Templates.Add(template);
|
||||
await _context.SaveChangesAsync();
|
||||
|
||||
var conn = new DataConnection("Conn1", "OpcUa", site.Id);
|
||||
_context.DataConnections.Add(conn);
|
||||
var instance = new Instance("I1") { SiteId = site.Id, TemplateId = template.Id };
|
||||
_context.Instances.Add(instance);
|
||||
await _context.SaveChangesAsync();
|
||||
|
||||
// Two distinct bindings (different attributes) on the SAME instance both
|
||||
// reference the connection -> the result must be deduped to one instance.
|
||||
_context.InstanceConnectionBindings.Add(
|
||||
new InstanceConnectionBinding("Attr1") { InstanceId = instance.Id, DataConnectionId = conn.Id });
|
||||
_context.InstanceConnectionBindings.Add(
|
||||
new InstanceConnectionBinding("Attr2") { InstanceId = instance.Id, DataConnectionId = conn.Id });
|
||||
await _context.SaveChangesAsync();
|
||||
|
||||
var result = await _repository.GetInstancesReferencingDataConnectionAsync(conn.Id);
|
||||
Assert.Single(result);
|
||||
Assert.Equal(instance.Id, result[0].Id);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Constructor_NullContext_Throws()
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user