Skip to content

Commit 8a98ec1

Browse files
authored
fix(alerts): table sorting (#82)
* fix(alerts): sort by date desc * test: add alerts date sort
1 parent c37ca09 commit 8a98ec1

File tree

3 files changed

+47
-37
lines changed

3 files changed

+47
-37
lines changed

src/components/__tests__/Dashboard.test.tsx

+18-1
Original file line numberDiff line numberDiff line change
@@ -164,7 +164,7 @@ describe("Dashboard", () => {
164164
expect(within(firstRow).getByText(/ghp_token/i)).toBeVisible();
165165
expect(within(firstRow).getByText(/codegate-secrets/i)).toBeVisible();
166166
expect(within(firstRow).getAllByText(/n\/a/i).length).toEqual(2);
167-
expect(within(firstRow).getByText(/2025\/01\/07/i)).toBeVisible();
167+
expect(within(firstRow).getByText(/2025\/01\/14/i)).toBeVisible();
168168
expect(within(firstRow).getByTestId(/time/i)).toBeVisible();
169169

170170
// check trigger_string null
@@ -279,4 +279,21 @@ describe("Dashboard", () => {
279279
expect(within(row).getByText(/ghp_token/i)).toBeVisible();
280280
expect(within(row).getByText(/codegate-secrets/i)).toBeVisible();
281281
});
282+
283+
it("should sort alerts by date desc", async () => {
284+
render(<Dashboard />);
285+
expect(
286+
(await screen.findAllByTestId(/mock-responsive-container/i)).length,
287+
).toEqual(1);
288+
289+
const firstRow = within(screen.getByTestId("alerts-table")).getAllByRole(
290+
"row",
291+
)[1] as HTMLElement;
292+
const secondRow = within(screen.getByTestId("alerts-table")).getAllByRole(
293+
"row",
294+
)[2] as HTMLElement;
295+
296+
expect(within(firstRow).getByText(/2025\/01\/14/i)).toBeVisible();
297+
expect(within(secondRow).getByText(/2025\/01\/07/i)).toBeVisible();
298+
});
282299
});

src/hooks/useAlertsStore.ts

+28-35
Original file line numberDiff line numberDiff line change
@@ -22,10 +22,14 @@ export const useAlertsStore = create<AlertState>((set, get) => ({
2222
alert?.conversation.question_answers.every(
2323
(item) => item.answer && item.question,
2424
),
25+
)
26+
.sort(
27+
(a, b) =>
28+
new Date(b.timestamp).getTime() - new Date(a.timestamp).getTime(),
2529
);
2630

2731
set({
28-
alerts,
32+
alerts: [...alerts],
2933
loading: false,
3034
});
3135
} else {
@@ -54,47 +58,36 @@ export const useAlertsStore = create<AlertState>((set, get) => ({
5458
)
5559
: alerts;
5660

57-
set({ filteredAlerts });
61+
set({
62+
filteredAlerts: [...filteredAlerts],
63+
});
5864
},
5965
updateFilteredAlerts: () => {
6066
const { alerts, search } = get();
6167
const filteredAlerts = search
62-
? alerts
63-
.filter((alert) => {
64-
const maliciousPkg = getMaliciousPackage(alert.trigger_string);
65-
const maliciousPkgName =
66-
typeof maliciousPkg === "object"
67-
? maliciousPkg?.type
68-
: maliciousPkg;
69-
70-
// typeof alert.trigger_string === "object"
71-
// ? alert.trigger_string?.type
72-
// : alert.trigger_string;
73-
const maliciousPkgType =
74-
typeof maliciousPkg === "object"
75-
? maliciousPkg?.name
76-
: maliciousPkg;
68+
? alerts.filter((alert) => {
69+
const maliciousPkg = getMaliciousPackage(alert.trigger_string);
70+
const maliciousPkgName =
71+
typeof maliciousPkg === "object"
72+
? maliciousPkg?.type
73+
: maliciousPkg;
7774

78-
// typeof alert.trigger_string === "object"
79-
// ? alert.trigger_string?.name
80-
// : alert.trigger_string;
75+
const maliciousPkgType =
76+
typeof maliciousPkg === "object"
77+
? maliciousPkg?.name
78+
: maliciousPkg;
8179

82-
return (
83-
maliciousPkgName?.toLowerCase().includes(search) ||
84-
maliciousPkgType?.toLowerCase().includes(search) ||
85-
alert.trigger_type?.toLowerCase().includes(search)
86-
);
87-
})
88-
.sort(
89-
(a, b) =>
90-
new Date(b.timestamp).getTime() - new Date(a.timestamp).getTime(),
91-
)
92-
: alerts.sort(
93-
(a, b) =>
94-
new Date(b.timestamp).getTime() - new Date(a.timestamp).getTime(),
95-
);
80+
return (
81+
maliciousPkgName?.toLowerCase().includes(search) ||
82+
maliciousPkgType?.toLowerCase().includes(search) ||
83+
alert.trigger_type?.toLowerCase().includes(search)
84+
);
85+
})
86+
: alerts;
9687

97-
set({ filteredAlerts });
88+
set({
89+
filteredAlerts: [...filteredAlerts],
90+
});
9891
},
9992
getMaliciousPackagesChart: () => {
10093
const { alerts } = get();

src/mocks/msw/fixtures/GET_ALERTS.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -707,7 +707,7 @@
707707
"trigger_string": "GitHub - Access Token:\n\n```tsx src/App.tsx (26-26)\n const test = \"ghp_token\";\n```\nwhat about this?",
708708
"trigger_type": "codegate-secrets",
709709
"trigger_category": "critical",
710-
"timestamp": "2025-01-07T17:02:59.915982Z"
710+
"timestamp": "2025-01-14T17:02:59.915982Z"
711711
},
712712
{
713713
"conversation": {

0 commit comments

Comments
 (0)