diff --git a/SeaHaven.DataServices/Helpers/WorkOrderBoardQueryFilters.cs b/SeaHaven.DataServices/Helpers/WorkOrderBoardQueryFilters.cs index 27f88f1..045e311 100644 --- a/SeaHaven.DataServices/Helpers/WorkOrderBoardQueryFilters.cs +++ b/SeaHaven.DataServices/Helpers/WorkOrderBoardQueryFilters.cs @@ -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))); } /// diff --git a/SeaHavenIndustries.Tests/WorkOrderServiceRegistryFilterRelationalTests.cs b/SeaHavenIndustries.Tests/WorkOrderServiceRegistryFilterRelationalTests.cs index 1f81bcc..c6fb0b6 100644 --- a/SeaHavenIndustries.Tests/WorkOrderServiceRegistryFilterRelationalTests.cs +++ b/SeaHavenIndustries.Tests/WorkOrderServiceRegistryFilterRelationalTests.cs @@ -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" });