fix(support-cases): prevent auto-triage from regressing case status

- Auto-triage previously always set status to 'triaged', even for cases
  already in in_progress, escalated, or other later states
- Now only transitions to 'triaged' if case is still in 'open' state
- Cases in later states keep their current status (only priority + tags update)
- Added regression test for in_progress case
- 10 support-cases tests passing
This commit is contained in:
saravanakumardb1 2026-03-20 06:25:43 -07:00
parent 78cb958a6d
commit 10c288857d
2 changed files with 36 additions and 1 deletions

View File

@ -225,6 +225,36 @@ describe('supportCaseRoutes', () => {
expect(body.tagsAdded).toContain('category:billing');
});
it('POST /support/cases/:id/auto-triage does not regress status of in-progress cases', async () => {
repoMock.getCase.mockResolvedValue({
id: 'sup_4',
productId: 'lysnrai',
title: 'Error on login page',
description: 'Users see 500',
priority: 'medium',
status: 'in_progress',
tags: [],
});
repoMock.updateCase.mockImplementation(
async (_id: string, _pid: string, updates: Record<string, unknown>) => ({
...updates,
id: 'sup_4',
})
);
const app = await buildApp({ sub: 'admin_1', productId: 'lysnrai', role: 'admin' });
const res = await app.inject({ method: 'POST', url: '/api/support/cases/sup_4/auto-triage' });
expect(res.statusCode).toBe(200);
const body = res.json();
expect(body.newPriority).toBe('high');
// Status should remain in_progress, not regress to triaged
expect(repoMock.updateCase).toHaveBeenCalledWith(
'sup_4',
'lysnrai',
expect.objectContaining({ status: 'in_progress' })
);
});
it('POST /support/cases/:id/auto-triage handles undefined tags gracefully', async () => {
repoMock.getCase.mockResolvedValue({
id: 'sup_3',

View File

@ -283,9 +283,14 @@ export async function supportCaseRoutes(app: FastifyInstance) {
}
const dedupedTags = [...new Set(tags)];
// Only advance to 'triaged' if still in 'open' state — don't regress later statuses
const triageableStatuses = ['open'];
const statusUpdate = triageableStatuses.includes(supportCase.status)
? 'triaged'
: supportCase.status;
const updated = await repo.updateCase(id, access.productId, {
priority: suggestedPriority as SupportCaseDoc['priority'],
status: 'triaged',
status: statusUpdate,
tags: dedupedTags,
});