fix tests ugh
All checks were successful
Deploy to Web Server flyer-crawler.projectium.com / deploy (push) Successful in 5m55s

This commit is contained in:
2025-12-09 19:17:48 -08:00
parent 23e0c44b61
commit a30ec029d4
4 changed files with 25 additions and 26 deletions

View File

@@ -156,16 +156,15 @@ describe('Budget DB Service', () => {
});
it('should throw an error if the database query fails', async () => {
const dbError = new Error('Budget not found or user does not have permission to update.');
const dbError = new Error('DB Error');
mockPoolInstance.query.mockRejectedValue(dbError);
await expect(budgetRepo.updateBudget(1, 'user-123', { name: 'Fail' })).rejects.toThrow(
'Budget not found or user does not have permission to update.');
await expect(budgetRepo.updateBudget(1, 'user-123', { name: 'Fail' })).rejects.toThrow('Failed to update budget.');
});
});
describe('deleteBudget', () => {
it('should execute a DELETE query with user ownership check', async () => {
mockPoolInstance.query.mockResolvedValue({ rowCount: 1 });
mockPoolInstance.query.mockResolvedValue({ rowCount: 1, command: 'DELETE', rows: [] });
await budgetRepo.deleteBudget(1, 'user-123');
expect(mockPoolInstance.query).toHaveBeenCalledWith('DELETE FROM public.budgets WHERE budget_id = $1 AND user_id = $2', [1, 'user-123']);
});
@@ -178,9 +177,9 @@ describe('Budget DB Service', () => {
});
it('should throw an error if the database query fails', async () => {
const dbError = new Error('Budget not found or user does not have permission to delete.');
const dbError = new Error('DB Error');
mockPoolInstance.query.mockRejectedValue(dbError);
await expect(budgetRepo.deleteBudget(1, 'user-123')).rejects.toThrow('Budget not found or user does not have permission to delete.');
await expect(budgetRepo.deleteBudget(1, 'user-123')).rejects.toThrow('Failed to delete budget.');
});
});

View File

@@ -84,11 +84,9 @@ export class BudgetRepository {
[name, amount_cents, period, start_date, budgetId, userId],
);
if (res.rowCount === 0) throw new Error('Budget not found or user does not have permission to update.');
return res.rows[0]; // This line is now reachable
return res.rows[0];
} catch (error) {
if ((error as Error).message.includes('Budget not found')) {
throw error;
}
if ((error as Error).message.includes('Budget not found')) throw error;
logger.error('Database error in updateBudget:', { error, budgetId, userId });
throw new Error('Failed to update budget.');
}
@@ -100,12 +98,13 @@ export class BudgetRepository {
* @param userId The ID of the user who owns the budget (for verification).
*/
async deleteBudget(budgetId: number, userId: string): Promise<void> {
const result = await this.db.query('DELETE FROM public.budgets WHERE budget_id = $1 AND user_id = $2', [budgetId, userId]);
if (result.rowCount === 0) {
throw new Error('Budget not found or user does not have permission to delete.');
}
// The catch block is now only for unexpected DB errors.
try {} catch (error) {
try {
const result = await this.db.query('DELETE FROM public.budgets WHERE budget_id = $1 AND user_id = $2', [budgetId, userId]);
if (result.rowCount === 0) {
throw new Error('Budget not found or user does not have permission to delete.');
}
} catch (error) {
if ((error as Error).message.includes('Budget not found')) throw error;
logger.error('Database error in deleteBudget:', { error, budgetId, userId });
throw new Error('Failed to delete budget.');
}