fix(transport): case-insensitive remaining library lookups; base-only template reads for import targets (ScadaBridge#95)
- Preview matches template folders, shared scripts, external systems, SMTP (by Host) and SMS (by AccountSid) with the #93 ToNameLookup comparer (OrdinalIgnoreCase, first wins, never throws), matching SQL Server's case-insensitive collation, so a differently-cased target row is reported as a conflict instead of New. - Apply-side in-memory lookups do the same: ApplyTemplateFoldersAsync, the template folder-id map, ResolveFolderParentEdgesAsync, ApplySmtpConfigsAsync and ApplySmsConfigsAsync. An Overwrite now updates the existing row instead of adding a duplicate (folder names are only unique per parent, so the old ToDictionary could also throw). - New ITemplateEngineRepository.GetBaseTemplatesWithChildrenAsync filters IsDerived in SQL. Preview and the Overwrite load in ApplyTemplatesAsync use it, so a derived slot template that shares a bundled name is never the import target. GetTemplatesWithChildrenAsync is unchanged for the id-keyed callers (export closure, rewire passes), which can need derived rows. Claude-Session: https://claude.ai/code/session_01GT67AEHd2Acv1YPwGfXEoV
This commit is contained in:
+2
-1
@@ -149,7 +149,8 @@ public sealed class ImportApplyScalingTests
|
||||
return new ApplyCost(
|
||||
detectChanges,
|
||||
target.CallsTo(nameof(ITemplateEngineRepository.GetTemplateWithChildrenAsync)),
|
||||
target.CallsTo(nameof(ITemplateEngineRepository.GetTemplatesWithChildrenAsync)),
|
||||
target.CallsTo(nameof(ITemplateEngineRepository.GetTemplatesWithChildrenAsync))
|
||||
+ target.CallsTo(nameof(ITemplateEngineRepository.GetBaseTemplatesWithChildrenAsync)),
|
||||
result);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user