mirror of
https://github.com/Sea-Haven-Industries/shoc-backend.git
synced 2026-09-30 03:43:11 +00:00
test(workorders): cover technician-name search for cleared assignment
WorkOrderBoardSearchFilter now skips the vendor ContactName for work orders whose TechnicianAssigned is explicitly false. Exercise the predicate through SQLite so relational null semantics are covered: legacy null and true rows still match a technician-name search, the explicitly cleared row does not, and the vendor company name still matches all three.
This commit is contained in:
parent
35adef5808
commit
2de65539a1
1 changed files with 73 additions and 0 deletions
|
|
@ -2,6 +2,7 @@ using Data.SeaHavenIndustries;
|
||||||
using Data.SeaHavenIndustries.Enums;
|
using Data.SeaHavenIndustries.Enums;
|
||||||
using Microsoft.Data.Sqlite;
|
using Microsoft.Data.Sqlite;
|
||||||
using Microsoft.EntityFrameworkCore;
|
using Microsoft.EntityFrameworkCore;
|
||||||
|
using SeaHaven.DataServices.Helpers;
|
||||||
using SeaHaven.DataServices.Implementation;
|
using SeaHaven.DataServices.Implementation;
|
||||||
using SeaHaven.Services.DTOs;
|
using SeaHaven.Services.DTOs;
|
||||||
using SeaHaven.Services.Helpers;
|
using SeaHaven.Services.Helpers;
|
||||||
|
|
@ -116,6 +117,78 @@ public class WorkOrderTechnicianAssignmentRelationalTests
|
||||||
Assert.Equal(5, workOrderB.VendorId);
|
Assert.Equal(5, workOrderB.VendorId);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public async Task TechnicianNameSearch_MatchesLegacyAndAssignedRows_ButNotExplicitlyClearedRow()
|
||||||
|
{
|
||||||
|
await using var connection = new SqliteConnection("Data Source=:memory:;Foreign Keys=True");
|
||||||
|
await connection.OpenAsync();
|
||||||
|
var options = new DbContextOptionsBuilder<ApplicationDbContext>()
|
||||||
|
.UseSqlite(connection)
|
||||||
|
.Options;
|
||||||
|
|
||||||
|
await using (var seed = new SqliteBoardTestDbContext(options))
|
||||||
|
{
|
||||||
|
await seed.Database.EnsureCreatedAsync();
|
||||||
|
await WorkOrderAccountTestHelpers.EnsureAccountAsync(seed);
|
||||||
|
seed.Vendors.Add(new Vendor
|
||||||
|
{
|
||||||
|
Id = 5,
|
||||||
|
CompanyName = "Acme HVAC",
|
||||||
|
ContactName = "Technician One",
|
||||||
|
CompanyPhone = "312-555-0100"
|
||||||
|
});
|
||||||
|
seed.Dispatches.AddRange(
|
||||||
|
new Dispatch { Id = 10, VendorId = 5, Status = "Sent", RowVersion = new byte[] { 1, 0, 0, 0, 0, 0, 0, 2 } },
|
||||||
|
new Dispatch { Id = 11, VendorId = 5, Status = "Sent", RowVersion = new byte[] { 2, 0, 0, 0, 0, 0, 0, 2 } },
|
||||||
|
new Dispatch { Id = 12, VendorId = 5, Status = "Sent", RowVersion = new byte[] { 3, 0, 0, 0, 0, 0, 0, 2 } });
|
||||||
|
seed.workOrders.AddRange(
|
||||||
|
new WorkOrder
|
||||||
|
{
|
||||||
|
Id = 1,
|
||||||
|
AccountId = 1,
|
||||||
|
LifecycleStatus = LifecycleStatus.Scheduled,
|
||||||
|
PrimaryDispatchId = 10,
|
||||||
|
TechnicianAssigned = null,
|
||||||
|
RowVersion = new byte[] { 1, 0, 0, 0, 0, 0, 0, 1 }
|
||||||
|
},
|
||||||
|
new WorkOrder
|
||||||
|
{
|
||||||
|
Id = 2,
|
||||||
|
AccountId = 1,
|
||||||
|
LifecycleStatus = LifecycleStatus.Scheduled,
|
||||||
|
PrimaryDispatchId = 11,
|
||||||
|
TechnicianAssigned = true,
|
||||||
|
RowVersion = new byte[] { 2, 0, 0, 0, 0, 0, 0, 1 }
|
||||||
|
},
|
||||||
|
new WorkOrder
|
||||||
|
{
|
||||||
|
Id = 3,
|
||||||
|
AccountId = 1,
|
||||||
|
LifecycleStatus = LifecycleStatus.Scheduled,
|
||||||
|
PrimaryDispatchId = 12,
|
||||||
|
TechnicianAssigned = false,
|
||||||
|
RowVersion = new byte[] { 3, 0, 0, 0, 0, 0, 0, 1 }
|
||||||
|
});
|
||||||
|
await seed.SaveChangesAsync();
|
||||||
|
}
|
||||||
|
|
||||||
|
await using var context = new SqliteBoardTestDbContext(options);
|
||||||
|
|
||||||
|
var technicianMatches = await WorkOrderBoardSearchFilter
|
||||||
|
.Apply(context.workOrders.AsQueryable(), "Technician One")
|
||||||
|
.Select(w => w.Id)
|
||||||
|
.OrderBy(id => id)
|
||||||
|
.ToListAsync();
|
||||||
|
Assert.Equal(new[] { 1, 2 }, technicianMatches);
|
||||||
|
|
||||||
|
var companyMatches = await WorkOrderBoardSearchFilter
|
||||||
|
.Apply(context.workOrders.AsQueryable(), "Acme HVAC")
|
||||||
|
.Select(w => w.Id)
|
||||||
|
.OrderBy(id => id)
|
||||||
|
.ToListAsync();
|
||||||
|
Assert.Equal(new[] { 1, 2, 3 }, companyMatches);
|
||||||
|
}
|
||||||
|
|
||||||
private sealed class SqliteBoardTestDbContext : ApplicationDbContext
|
private sealed class SqliteBoardTestDbContext : ApplicationDbContext
|
||||||
{
|
{
|
||||||
public SqliteBoardTestDbContext(DbContextOptions<ApplicationDbContext> options)
|
public SqliteBoardTestDbContext(DbContextOptions<ApplicationDbContext> options)
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue