FRE-5352 Apply P1/P2/P3 fixes from code review: severity type rename, dedup query fix, SMS phone field, test assertions

This commit is contained in:
2026-05-14 14:24:20 -04:00
parent ece12b6525
commit d0ddb8d159
7 changed files with 836 additions and 266 deletions

View File

@@ -37,7 +37,7 @@ describe('detectChanges', () => {
};
const result = detectChanges(baselineSnapshot, current);
expect(result.changeType).toBe('ownership_transfer');
expect(result.severity).toBe('major');
expect(result.severity).toBe('critical');
expect(result.changes.some(c => c.field === 'ownerName')).toBe(true);
});
@@ -50,7 +50,7 @@ describe('detectChanges', () => {
};
const result = detectChanges(baselineSnapshot, current);
expect(result.changes.some(c => c.changeType === 'deed_change')).toBe(true);
expect(result.severity).toBe('moderate');
expect(result.severity).toBe('warning');
});
it('detects tax change', () => {
@@ -62,7 +62,7 @@ describe('detectChanges', () => {
};
const result = detectChanges(baselineSnapshot, current);
expect(result.changes.some(c => c.changeType === 'tax_change')).toBe(true);
expect(result.severity).toBe('minor');
expect(result.severity).toBe('info');
});
it('detects lien filing when lien count increases', () => {
@@ -74,7 +74,7 @@ describe('detectChanges', () => {
};
const result = detectChanges(baselineSnapshot, current);
expect(result.changes.some(c => c.changeType === 'lien_filing')).toBe(true);
expect(result.severity).toBe('moderate');
expect(result.severity).toBe('warning');
});
it('detects multiple changes with highest severity', () => {
@@ -87,7 +87,7 @@ describe('detectChanges', () => {
taxAmount: 3200,
};
const result = detectChanges(baselineSnapshot, current);
expect(result.severity).toBe('major');
expect(result.severity).toBe('critical');
expect(result.changes.length).toBeGreaterThanOrEqual(3);
});
@@ -95,7 +95,7 @@ describe('detectChanges', () => {
const current = { ...baselineSnapshot, id: 'snap-2', capturedAt: '2026-02-01T00:00:00Z' };
const result = detectChanges(baselineSnapshot, current);
expect(result.changes.length).toBe(0);
expect(result.severity).toBe('minor');
expect(result.severity).toBe('info');
});
it('detects address changes as metadata changes', () => {
@@ -165,11 +165,11 @@ describe('detectChanges', () => {
});
describe('shouldTriggerAlert', () => {
it('triggers for major severity above default threshold', () => {
it('triggers for critical severity above default threshold', () => {
const result = {
propertyId: 'prop-001',
changeType: 'ownership_transfer' as const,
severity: 'major' as const,
severity: 'critical' as const,
confidence: 0.95,
changes: [],
previousSnapshot: baselineSnapshot,
@@ -179,11 +179,11 @@ describe('shouldTriggerAlert', () => {
expect(shouldTriggerAlert(result)).toBe(true);
});
it('triggers for moderate severity with high confidence', () => {
it('triggers for warning severity with high confidence', () => {
const result = {
propertyId: 'prop-001',
changeType: 'deed_change' as const,
severity: 'moderate' as const,
severity: 'warning' as const,
confidence: 0.85,
changes: [],
previousSnapshot: baselineSnapshot,
@@ -193,11 +193,11 @@ describe('shouldTriggerAlert', () => {
expect(shouldTriggerAlert(result)).toBe(true);
});
it('does not trigger for minor severity with default threshold', () => {
it('does not trigger for info severity with default threshold', () => {
const result = {
propertyId: 'prop-001',
changeType: 'tax_change' as const,
severity: 'minor' as const,
severity: 'info' as const,
confidence: 0.85,
changes: [],
previousSnapshot: baselineSnapshot,
@@ -211,7 +211,7 @@ describe('shouldTriggerAlert', () => {
const result = {
propertyId: 'prop-001',
changeType: 'deed_change' as const,
severity: 'moderate' as const,
severity: 'warning' as const,
confidence: 0.5,
changes: [],
previousSnapshot: baselineSnapshot,
@@ -221,18 +221,18 @@ describe('shouldTriggerAlert', () => {
expect(shouldTriggerAlert(result)).toBe(false);
});
it('triggers minor when minSeverity set to minor', () => {
it('triggers info when minSeverity set to info', () => {
const result = {
propertyId: 'prop-001',
changeType: 'tax_change' as const,
severity: 'minor' as const,
severity: 'info' as const,
confidence: 0.85,
changes: [],
previousSnapshot: baselineSnapshot,
currentSnapshot: baselineSnapshot,
detectedAt: new Date().toISOString(),
};
expect(shouldTriggerAlert(result, 'minor')).toBe(true);
expect(shouldTriggerAlert(result, 'info')).toBe(true);
});
});
@@ -241,21 +241,21 @@ describe('determineSeverity', () => {
const changes: PropertyChange[] = [
{ field: 'ownerName', oldValue: 'John', newValue: 'Jane', changeType: 'ownership_transfer' },
];
expect(determineSeverity(changes, { ownershipNameThreshold: 0.7, deedDateSensitivity: 0.9, taxAmountChangePercent: 15 })).toBe('major');
expect(determineSeverity(changes, { ownershipNameThreshold: 0.7, deedDateSensitivity: 0.9, taxAmountChangePercent: 15 })).toBe('critical');
});
it('returns moderate when only deed change', () => {
it('returns warning when only deed change', () => {
const changes: PropertyChange[] = [
{ field: 'deedDate', oldValue: '2020-01-01', newValue: '2026-01-01', changeType: 'deed_change' },
];
expect(determineSeverity(changes, { ownershipNameThreshold: 0.7, deedDateSensitivity: 0.9, taxAmountChangePercent: 15 })).toBe('moderate');
expect(determineSeverity(changes, { ownershipNameThreshold: 0.7, deedDateSensitivity: 0.9, taxAmountChangePercent: 15 })).toBe('warning');
});
it('returns minor when only metadata changes', () => {
it('returns info when only metadata changes', () => {
const changes: PropertyChange[] = [
{ field: 'propertyType', oldValue: 'residential', newValue: 'commercial', changeType: 'metadata_change' },
];
expect(determineSeverity(changes, { ownershipNameThreshold: 0.7, deedDateSensitivity: 0.9, taxAmountChangePercent: 15 })).toBe('minor');
expect(determineSeverity(changes, { ownershipNameThreshold: 0.7, deedDateSensitivity: 0.9, taxAmountChangePercent: 15 })).toBe('info');
});
it('respects severity overrides', () => {
@@ -266,9 +266,9 @@ describe('determineSeverity', () => {
ownershipNameThreshold: 0.7,
deedDateSensitivity: 0.9,
taxAmountChangePercent: 15,
severityOverrides: { tax_change: 'moderate' },
severityOverrides: { tax_change: 'warning' },
};
expect(determineSeverity(changes, config)).toBe('moderate');
expect(determineSeverity(changes, config)).toBe('warning');
});
});