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,20 +265,20 @@ namespace SeaHaven.DataServices.Helpers
return query;
return query.Where(w =>
normalized.Any(pm =>
w.ServiceId.HasValue
? (w.ServiceDefinition != null
&& w.ServiceDefinition.IsActive
&& w.ServiceDefinition.IsDeleted != true
&& !(w.LifecycleStatus == LifecycleStatus.Completed
|| (w.LifecycleStatus == null
&& CompletedLegacyStatuses.Contains(((w.LegacyStatus ?? w.Status) ?? "").Trim().ToLower())))
? (w.ServiceDefinition.Name ?? "").ToLower().Contains(pm)
: ((w.ServiceDefinition != null
&& (w.ServiceDefinition.Name ?? "").ToLower().Contains(pm))
|| (w.ServiceNameSnapshot ?? w.Trade ?? w.Problem ?? "").ToLower().Contains(pm)))
: (w.Trade ?? "").ToLower().Contains(pm)
|| (w.Problem ?? "").ToLower().Contains(pm)));
w.ServiceId.HasValue
? (w.ServiceDefinition != null
&& w.ServiceDefinition.IsActive
&& w.ServiceDefinition.IsDeleted != true
&& !(w.LifecycleStatus == LifecycleStatus.Completed
|| (w.LifecycleStatus == null
&& CompletedLegacyStatuses.Contains(((w.LegacyStatus ?? w.Status) ?? "").Trim().ToLower())))
? normalized.Contains(((w.ServiceDefinition.Name ?? "").Trim()).ToLower())
: ((w.ServiceDefinition != null
&& normalized.Contains(((w.ServiceDefinition.Name ?? "").Trim()).ToLower()))
|| normalized.Contains(((w.ServiceNameSnapshot ?? w.Trade ?? w.Problem ?? "").Trim()).ToLower())))
: normalized.Any(pm =>
(w.Trade ?? "").ToLower().Contains(pm)
|| (w.Problem ?? "").ToLower().Contains(pm)));
}
/// <summary>

View file

@ -39,6 +39,24 @@ public sealed class WorkOrderServiceRegistryFilterRelationalTests
Trade = "Electrical",
IconKey = "electrical",
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(
new WorkOrder
@ -76,6 +94,22 @@ public sealed class WorkOrderServiceRegistryFilterRelationalTests
ServiceNameSnapshot = "Completed Archive Beta",
Trade = "Completed Archive Beta",
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();
@ -147,6 +181,18 @@ public sealed class WorkOrderServiceRegistryFilterRelationalTests
.OrderBy(id => id)
.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
.ApplyPmTypeFilter(context.workOrders.AsNoTracking(), new[] { "Legacy Cooling" })
.Select(w => w.Id)
@ -170,6 +216,8 @@ public sealed class WorkOrderServiceRegistryFilterRelationalTests
$"completed-snapshot-filter={string.Join(',', completedSnapshotMatches)}",
$"legacy-completed-snapshot-filter={string.Join(',', legacyCompletedSnapshotMatches)}",
$"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-problem-filter={string.Join(',', legacyProblemMatches)}"
});
@ -186,6 +234,8 @@ public sealed class WorkOrderServiceRegistryFilterRelationalTests
"completed-snapshot-filter=4",
"legacy-completed-snapshot-filter=5",
"current-name-alias-filter=1,4,5",
"exact-registry-filter=6",
"multiple-registry-filter=6,7",
"legacy-trade-filter=3",
"legacy-problem-filter=3"
});