fix(workorders): match registry service filters exactly

This commit is contained in:
Alexandre Brandizzi 2026-09-30 17:08:17 -03:00
parent 0894b20e59
commit 0cd0d3b066
2 changed files with 64 additions and 14 deletions

View file

@ -265,7 +265,6 @@ namespace SeaHaven.DataServices.Helpers
return query; return query;
return query.Where(w => return query.Where(w =>
normalized.Any(pm =>
w.ServiceId.HasValue w.ServiceId.HasValue
? (w.ServiceDefinition != null ? (w.ServiceDefinition != null
&& w.ServiceDefinition.IsActive && w.ServiceDefinition.IsActive
@ -273,11 +272,12 @@ namespace SeaHaven.DataServices.Helpers
&& !(w.LifecycleStatus == LifecycleStatus.Completed && !(w.LifecycleStatus == LifecycleStatus.Completed
|| (w.LifecycleStatus == null || (w.LifecycleStatus == null
&& CompletedLegacyStatuses.Contains(((w.LegacyStatus ?? w.Status) ?? "").Trim().ToLower()))) && CompletedLegacyStatuses.Contains(((w.LegacyStatus ?? w.Status) ?? "").Trim().ToLower())))
? (w.ServiceDefinition.Name ?? "").ToLower().Contains(pm) ? normalized.Contains(((w.ServiceDefinition.Name ?? "").Trim()).ToLower())
: ((w.ServiceDefinition != null : ((w.ServiceDefinition != null
&& (w.ServiceDefinition.Name ?? "").ToLower().Contains(pm)) && normalized.Contains(((w.ServiceDefinition.Name ?? "").Trim()).ToLower()))
|| (w.ServiceNameSnapshot ?? w.Trade ?? w.Problem ?? "").ToLower().Contains(pm))) || normalized.Contains(((w.ServiceNameSnapshot ?? w.Trade ?? w.Problem ?? "").Trim()).ToLower())))
: (w.Trade ?? "").ToLower().Contains(pm) : normalized.Any(pm =>
(w.Trade ?? "").ToLower().Contains(pm)
|| (w.Problem ?? "").ToLower().Contains(pm))); || (w.Problem ?? "").ToLower().Contains(pm)));
} }

View file

@ -39,6 +39,24 @@ public sealed class WorkOrderServiceRegistryFilterRelationalTests
Trade = "Electrical", Trade = "Electrical",
IconKey = "electrical", IconKey = "electrical",
IsActive = true IsActive = true
},
new Service
{
Id = 30,
Name = "QA Service",
NormalizedName = "QA SERVICE",
Trade = "Electrical",
IconKey = "electrical",
IsActive = true
},
new Service
{
Id = 31,
Name = "QA Service Extended",
NormalizedName = "QA SERVICE EXTENDED",
Trade = "Electrical",
IconKey = "electrical",
IsActive = true
}); });
context.workOrders.AddRange( context.workOrders.AddRange(
new WorkOrder new WorkOrder
@ -76,6 +94,22 @@ public sealed class WorkOrderServiceRegistryFilterRelationalTests
ServiceNameSnapshot = "Completed Archive Beta", ServiceNameSnapshot = "Completed Archive Beta",
Trade = "Completed Archive Beta", Trade = "Completed Archive Beta",
Status = "Done" Status = "Done"
},
new WorkOrder
{
Id = 6,
ServiceId = 30,
ServiceNameSnapshot = "QA Service",
Trade = "QA Service",
LifecycleStatus = LifecycleStatus.Scheduled
},
new WorkOrder
{
Id = 7,
ServiceId = 31,
ServiceNameSnapshot = "QA Service Extended",
Trade = "QA Service Extended",
LifecycleStatus = LifecycleStatus.Scheduled
}); });
await context.SaveChangesAsync(); await context.SaveChangesAsync();
@ -147,6 +181,18 @@ public sealed class WorkOrderServiceRegistryFilterRelationalTests
.OrderBy(id => id) .OrderBy(id => id)
.ToListAsync(); .ToListAsync();
var exactRegistryNameMatches = await WorkOrderBoardQueryFilters
.ApplyPmTypeFilter(context.workOrders.AsNoTracking(), new[] { "QA Service" })
.Select(w => w.Id)
.OrderBy(id => id)
.ToListAsync();
var multipleRegistryNameMatches = await WorkOrderBoardQueryFilters
.ApplyPmTypeFilter(context.workOrders.AsNoTracking(), new[] { "QA Service", "QA Service Extended" })
.Select(w => w.Id)
.OrderBy(id => id)
.ToListAsync();
var legacyTradeMatches = await WorkOrderBoardQueryFilters var legacyTradeMatches = await WorkOrderBoardQueryFilters
.ApplyPmTypeFilter(context.workOrders.AsNoTracking(), new[] { "Legacy Cooling" }) .ApplyPmTypeFilter(context.workOrders.AsNoTracking(), new[] { "Legacy Cooling" })
.Select(w => w.Id) .Select(w => w.Id)
@ -170,6 +216,8 @@ public sealed class WorkOrderServiceRegistryFilterRelationalTests
$"completed-snapshot-filter={string.Join(',', completedSnapshotMatches)}", $"completed-snapshot-filter={string.Join(',', completedSnapshotMatches)}",
$"legacy-completed-snapshot-filter={string.Join(',', legacyCompletedSnapshotMatches)}", $"legacy-completed-snapshot-filter={string.Join(',', legacyCompletedSnapshotMatches)}",
$"current-name-alias-filter={string.Join(',', currentNameAliasMatches)}", $"current-name-alias-filter={string.Join(',', currentNameAliasMatches)}",
$"exact-registry-filter={string.Join(',', exactRegistryNameMatches)}",
$"multiple-registry-filter={string.Join(',', multipleRegistryNameMatches)}",
$"legacy-trade-filter={string.Join(',', legacyTradeMatches)}", $"legacy-trade-filter={string.Join(',', legacyTradeMatches)}",
$"legacy-problem-filter={string.Join(',', legacyProblemMatches)}" $"legacy-problem-filter={string.Join(',', legacyProblemMatches)}"
}); });
@ -186,6 +234,8 @@ public sealed class WorkOrderServiceRegistryFilterRelationalTests
"completed-snapshot-filter=4", "completed-snapshot-filter=4",
"legacy-completed-snapshot-filter=5", "legacy-completed-snapshot-filter=5",
"current-name-alias-filter=1,4,5", "current-name-alias-filter=1,4,5",
"exact-registry-filter=6",
"multiple-registry-filter=6,7",
"legacy-trade-filter=3", "legacy-trade-filter=3",
"legacy-problem-filter=3" "legacy-problem-filter=3"
}); });