fix: address code review findings for analytics and security
This commit is contained in:
@@ -227,5 +227,66 @@ describe("dashboardService", () => {
|
||||
expect(otherHour?.transactions).toBe(0);
|
||||
expect(otherHour?.commands).toBe(0);
|
||||
});
|
||||
|
||||
test("should return 24 hours of zeros if database is empty", async () => {
|
||||
mockSelect.mockImplementationOnce(() => ({
|
||||
// @ts-ignore
|
||||
from: mock(() => ({
|
||||
where: mock(() => ({
|
||||
groupBy: mock(() => ({
|
||||
orderBy: mock(() => Promise.resolve([]))
|
||||
}))
|
||||
}))
|
||||
}))
|
||||
}));
|
||||
|
||||
const activity = await dashboardService.getActivityAggregation();
|
||||
expect(activity).toHaveLength(24);
|
||||
expect(activity.every(a => a.transactions === 0 && a.commands === 0)).toBe(true);
|
||||
});
|
||||
|
||||
test("should return 24 hours of zeros if database returns rows with null hours", async () => {
|
||||
mockSelect.mockImplementationOnce(() => ({
|
||||
// @ts-ignore
|
||||
from: mock(() => ({
|
||||
where: mock(() => ({
|
||||
groupBy: mock(() => ({
|
||||
orderBy: mock(() => Promise.resolve([{ hour: null, transactions: "10", commands: "5" }]))
|
||||
}))
|
||||
}))
|
||||
}))
|
||||
}));
|
||||
|
||||
const activity = await dashboardService.getActivityAggregation();
|
||||
expect(activity).toHaveLength(24);
|
||||
expect(activity.every(a => a.transactions === 0 && a.commands === 0)).toBe(true);
|
||||
});
|
||||
|
||||
test("should correctly map hours regardless of input sort order", async () => {
|
||||
const now = new Date();
|
||||
now.setHours(now.getHours(), 0, 0, 0);
|
||||
const hourAgo = new Date(now.getTime() - 60 * 60 * 1000);
|
||||
|
||||
mockSelect.mockImplementationOnce(() => ({
|
||||
// @ts-ignore
|
||||
from: mock(() => ({
|
||||
where: mock(() => ({
|
||||
groupBy: mock(() => ({
|
||||
orderBy: mock(() => Promise.resolve([
|
||||
{ hour: now.toISOString(), transactions: "10", commands: "5" },
|
||||
{ hour: hourAgo.toISOString(), transactions: "20", commands: "10" }
|
||||
]))
|
||||
}))
|
||||
}))
|
||||
}))
|
||||
}));
|
||||
|
||||
const activity = await dashboardService.getActivityAggregation();
|
||||
const current = activity.find(a => a.hour === now.toISOString());
|
||||
const past = activity.find(a => a.hour === hourAgo.toISOString());
|
||||
|
||||
expect(current?.transactions).toBe(10);
|
||||
expect(past?.transactions).toBe(20);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user