WIP
This commit is contained in:
@@ -77,4 +77,59 @@ public class DbSeederForm990Tests
|
||||
.FirstAsync(s => s.Name_en == "Accounting & Audit");
|
||||
Assert.Equal("11c", audit.Form990Line!.LineCode);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task SeedForm990Lines_MapsAuditCorrectedSubcategories_OffTheLine24CatchAll()
|
||||
{
|
||||
using var db = BuildDb();
|
||||
await DbSeeder.SeedExpenseCategoriesAsync(db);
|
||||
await DbSeeder.SeedForm990ExpenseLinesAsync(db);
|
||||
|
||||
async Task<string> CodeOf(string subEn) =>
|
||||
(await db.ExpenseSubCategories.Include(s => s.Form990Line)
|
||||
.FirstAsync(s => s.Name_en == subEn)).Form990Line!.LineCode;
|
||||
|
||||
// Newly mapped subcategories that previously fell through to line 24.
|
||||
Assert.Equal("13", await CodeOf("Bank & Processing Fees"));
|
||||
Assert.Equal("13", await CodeOf("Rental"));
|
||||
Assert.Equal("13", await CodeOf("Maintenance & Repair"));
|
||||
Assert.Equal("13", await CodeOf("Cleaning Supplies"));
|
||||
Assert.Equal("13", await CodeOf("Craft Supplies"));
|
||||
// Building repairs & maintenance are part of Occupancy (line 16), not equipment (line 13).
|
||||
Assert.Equal("16", await CodeOf("Repairs & Maintenance"));
|
||||
// Appreciation/outreach gifts are deliberately mapped to Other (line 24), not left unmapped.
|
||||
Assert.Equal("24", await CodeOf("Gifts"));
|
||||
// Visitation is a travel/program cost, not a grant to an individual.
|
||||
Assert.Equal("17", await CodeOf("Visit Expenses"));
|
||||
// Missions support paid to individual missionaries → line 2, not line 1 (organizations).
|
||||
Assert.Equal("2", await CodeOf("Missionary Support"));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task SeedForm990Lines_RemapsExistingBadMapping_ButNotAdminOverride()
|
||||
{
|
||||
using var db = BuildDb();
|
||||
await DbSeeder.SeedExpenseCategoriesAsync(db);
|
||||
await DbSeeder.SeedForm990ExpenseLinesAsync(db);
|
||||
|
||||
// Simulate a database seeded by the OLD code: Visit Expenses on line 2, Missionary
|
||||
// Support on line 1. Also simulate an admin who deliberately moved one elsewhere.
|
||||
var lineByCode = await db.Form990ExpenseLines.ToDictionaryAsync(l => l.LineCode, l => l.Id);
|
||||
var visit = await db.ExpenseSubCategories.FirstAsync(s => s.Name_en == "Visit Expenses");
|
||||
var missionary = await db.ExpenseSubCategories.FirstAsync(s => s.Name_en == "Missionary Support");
|
||||
var transfer = await db.ExpenseSubCategories.FirstAsync(s => s.Name_en == "Offering Transfer");
|
||||
visit.Form990LineId = lineByCode["2"]; // old (wrong) value → should be corrected
|
||||
missionary.Form990LineId = lineByCode["1"]; // old (wrong) value → should be corrected
|
||||
transfer.Form990LineId = lineByCode["24"]; // admin override → must be left alone
|
||||
await db.SaveChangesAsync();
|
||||
|
||||
await DbSeeder.SeedForm990ExpenseLinesAsync(db);
|
||||
|
||||
await db.Entry(visit).ReloadAsync();
|
||||
await db.Entry(missionary).ReloadAsync();
|
||||
await db.Entry(transfer).ReloadAsync();
|
||||
Assert.Equal(lineByCode["17"], visit.Form990LineId); // corrected 2 → 17
|
||||
Assert.Equal(lineByCode["2"], missionary.Form990LineId); // corrected 1 → 2
|
||||
Assert.Equal(lineByCode["24"], transfer.Form990LineId); // admin edit preserved
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user