Skip to content

Commit 08c74f0

Browse files
chore: tests
1 parent 6ac7891 commit 08c74f0

6 files changed

Lines changed: 62 additions & 53 deletions

File tree

‎ui/src/core/page-components/agent-detail/agent-detail.tsx‎

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -362,12 +362,15 @@ const AgentDetailPage = ({ agentId }: AgentDetailPageProps) => {
362362
</Stack>
363363
</Paper>
364364
) : (
365-
<Table
366-
columns={columns}
367-
data={controls}
368-
highlightOnHover
369-
withColumnBorders
370-
/>
365+
<Box style={{ maxHeight: "calc(100vh - 400px)", minHeight: 0 }}>
366+
<Table
367+
columns={columns}
368+
data={controls}
369+
highlightOnHover
370+
withColumnBorders
371+
maxHeight="100%"
372+
/>
373+
</Box>
371374
)}
372375
</Tabs.Panel>
373376

‎ui/src/core/page-components/agent-detail/modals/add-new-control/index.tsx‎

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -206,8 +206,8 @@ export function AddNewControlModal({
206206
<Divider />
207207

208208
{/* Content */}
209-
<Box p="md" mih={500}>
210-
<Stack gap="md">
209+
<Box p="md" style={{ height: "500px", display: "flex", flexDirection: "column" }}>
210+
<Stack gap="md" style={{ flex: 1, minHeight: 0 }}>
211211
{/* Search and Docs Link */}
212212
<Group justify="space-between">
213213
<TextInput
@@ -250,11 +250,14 @@ export function AddNewControlModal({
250250
</Stack>
251251
</Paper>
252252
) : filteredEvaluators.length > 0 ? (
253-
<Table
254-
columns={columns}
255-
data={filteredEvaluators}
256-
highlightOnHover
257-
/>
253+
<Box style={{ flex: 1, minHeight: 0 }}>
254+
<Table
255+
columns={columns}
256+
data={filteredEvaluators}
257+
highlightOnHover
258+
maxHeight="100%"
259+
/>
260+
</Box>
258261
) : (
259262
<Paper p="xl" withBorder radius="sm" ta="center">
260263
<Text c="dimmed">No evaluators found</Text>

‎ui/src/core/page-components/home/home.tsx‎

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
import {
22
Alert,
3+
Box,
34
Center,
45
Group,
56
Loader,
6-
ScrollArea,
77
Stack,
88
Text,
99
Title,
@@ -43,7 +43,7 @@ const HomePage = () => {
4343
});
4444

4545
// Infinite scroll setup
46-
const { sentinelRef, scrollContainerRef } = useInfiniteScroll({
46+
const { sentinelRef } = useInfiniteScroll({
4747
hasNextPage: hasNextPage ?? false,
4848
isFetchingNextPage,
4949
fetchNextPage,
@@ -106,7 +106,7 @@ const HomePage = () => {
106106
</Group>
107107

108108
{/* Scrollable Table Container */}
109-
<ScrollArea flex={1} pos='relative' mih={0} type='auto' viewportRef={scrollContainerRef}>
109+
<Box style={{ flex: 1, minHeight: 0, display: "flex", flexDirection: "column" }}>
110110
{isLoading ? (
111111
<Center h={400}>
112112
<Stack align='center' gap='md'>
@@ -130,6 +130,7 @@ const HomePage = () => {
130130
onRowClick={handleRowClick}
131131
highlightOnHover
132132
withColumnBorders
133+
maxHeight="100%"
133134
/>
134135

135136
{/* Intersection observer trigger for infinite scroll */}
@@ -143,7 +144,7 @@ const HomePage = () => {
143144
)}
144145
</>
145146
)}
146-
</ScrollArea>
147+
</Box>
147148
</Stack>
148149
);
149150
};

‎ui/src/pages/_app.tsx‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,7 @@ export default function App({ Component, pageProps }: AppPropsWithLayout) {
107107
<ErrorBoundary variant="page">
108108
<QueryProvider>
109109
<MantineProvider defaultColorScheme="auto">
110-
<DatesProvider>
110+
<DatesProvider settings={{ firstDayOfWeek: 0 }}>
111111
<JupiterThemeProvider>
112112
<ModalsProvider>
113113
{getLayout(<Component {...pageProps} />)}

‎ui/tests/agent-detail.spec.ts‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ test.describe("Agent Detail Page", () => {
2626

2727
// Check all tabs are present
2828
await expect(mockedPage.getByRole("tab", { name: /Controls/i })).toBeVisible();
29-
await expect(mockedPage.getByRole("tab", { name: /Stats/i })).toBeVisible();
29+
await expect(mockedPage.getByRole("tab", { name: /Monitoring/i })).toBeVisible();
3030
});
3131

3232
test("controls tab is active by default", async ({ mockedPage }) => {
@@ -178,7 +178,7 @@ test.describe("Agent Detail Page", () => {
178178
await mockedPage.goto(agentUrl);
179179

180180
// Click Stats tab
181-
await mockedPage.getByRole("tab", { name: /Stats/i }).click();
181+
await mockedPage.getByRole("tab", { name: /Monitoring/i }).click();
182182
await expect(
183183
mockedPage.getByRole("heading", { name: "Control Statistics", exact: true })
184184
).toBeVisible();

‎ui/tests/agent-stats.spec.ts‎

Lines changed: 35 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { expect, mockData, mockRoutes, test } from "./fixtures";
22

3-
test.describe("Agent Stats Tab", () => {
3+
test.describe("Agent Monitoring Tab", () => {
44
test.beforeEach(async ({ mockedPage }) => {
55
// Navigate to agent detail page
66
await mockedPage.goto("/agents/agent-1");
@@ -10,7 +10,7 @@ test.describe("Agent Stats Tab", () => {
1010

1111
test("should display stats tab and navigate to it", async ({ mockedPage }) => {
1212
// Stats tab should be visible
13-
const statsTab = mockedPage.getByRole("tab", { name: "Stats" });
13+
const statsTab = mockedPage.getByRole("tab", { name: "Monitoring" });
1414
await expect(statsTab).toBeVisible();
1515

1616
// Click on stats tab
@@ -26,17 +26,17 @@ test.describe("Agent Stats Tab", () => {
2626
mockedPage,
2727
}) => {
2828
// Navigate to stats tab
29-
await mockedPage.getByRole("tab", { name: "Stats" }).click();
29+
await mockedPage.getByRole("tab", { name: "Monitoring" }).click();
3030

31-
// Time range selector should be visible with default "Last 1 hour"
32-
const timeRangeSelect = mockedPage.getByRole("textbox", { name: "Time Range" });
33-
await expect(timeRangeSelect).toBeVisible();
34-
await expect(timeRangeSelect).toHaveValue("Last 1 hour");
31+
// Time range selector should be visible (TimeRangeSwitch component)
32+
// Look for the component by finding the segment buttons or menu button
33+
const timeRangeSwitch = mockedPage.locator('[class*="TimeRangeSwitch"]').first();
34+
await expect(timeRangeSwitch).toBeVisible();
3535
});
3636

3737
test("should display summary statistics", async ({ mockedPage }) => {
3838
// Navigate to stats tab
39-
await mockedPage.getByRole("tab", { name: "Stats" }).click();
39+
await mockedPage.getByRole("tab", { name: "Monitoring" }).click();
4040

4141
// Check total executions
4242
await expect(
@@ -51,7 +51,7 @@ test.describe("Agent Stats Tab", () => {
5151

5252
test("should display actions distribution section", async ({ mockedPage }) => {
5353
// Navigate to stats tab
54-
await mockedPage.getByRole("tab", { name: "Stats" }).click();
54+
await mockedPage.getByRole("tab", { name: "Monitoring" }).click();
5555

5656
// Check actions distribution header
5757
await expect(mockedPage.getByText("Actions Distribution")).toBeVisible();
@@ -65,7 +65,7 @@ test.describe("Agent Stats Tab", () => {
6565

6666
test("should display per-control statistics table", async ({ mockedPage }) => {
6767
// Navigate to stats tab
68-
await mockedPage.getByRole("tab", { name: "Stats" }).click();
68+
await mockedPage.getByRole("tab", { name: "Monitoring" }).click();
6969

7070
// Check table header
7171
await expect(
@@ -88,35 +88,36 @@ test.describe("Agent Stats Tab", () => {
8888

8989
test("should display control names in the table", async ({ mockedPage }) => {
9090
// Navigate to stats tab
91-
await mockedPage.getByRole("tab", { name: "Stats" }).click();
91+
await mockedPage.getByRole("tab", { name: "Monitoring" }).click();
9292

9393
// Check control names from mock data - scope to Stats panel table
94-
const statsTable = mockedPage.getByRole("tabpanel", { name: /Stats/i }).getByRole("table");
94+
const statsTable = mockedPage.getByRole("tabpanel", { name: /Monitoring/i }).getByRole("table");
9595
for (const stat of mockData.stats.stats) {
9696
await expect(statsTable.getByText(stat.control_name)).toBeVisible();
9797
}
9898
});
9999

100100
test("should allow changing time range", async ({ mockedPage }) => {
101101
// Navigate to stats tab
102-
await mockedPage.getByRole("tab", { name: "Stats" }).click();
103-
104-
// Open time range selector
105-
const timeRangeSelect = mockedPage.getByRole("textbox", { name: "Time Range" });
106-
await timeRangeSelect.click();
107-
108-
// Select a different time range
109-
await mockedPage.getByRole("option", { name: "Last 24 hours" }).click();
110-
111-
// Verify the selection changed
112-
await expect(timeRangeSelect).toHaveValue("Last 24 hours");
102+
await mockedPage.getByRole("tab", { name: "Monitoring" }).click();
103+
104+
// TimeRangeSwitch should be visible and allow changing time range
105+
// The component has segment buttons for quick selection
106+
const timeRangeSwitch = mockedPage.locator('[class*="TimeRangeSwitch"]').first();
107+
await expect(timeRangeSwitch).toBeVisible();
108+
109+
// Try clicking on a segment button (e.g., "1D" for 24 hours)
110+
const oneDayButton = mockedPage.getByRole("button", { name: /1D/i }).first();
111+
if (await oneDayButton.isVisible()) {
112+
await oneDayButton.click();
113+
}
113114
});
114115

115116
test("should show error badges for controls with errors", async ({
116117
mockedPage,
117118
}) => {
118119
// Navigate to stats tab
119-
await mockedPage.getByRole("tab", { name: "Stats" }).click();
120+
await mockedPage.getByRole("tab", { name: "Monitoring" }).click();
120121

121122
// SQL Injection Guard has 2 errors in mock data
122123
// Find the row and check for error count
@@ -128,7 +129,7 @@ test.describe("Agent Stats Tab", () => {
128129
mockedPage,
129130
}) => {
130131
// Navigate to stats tab
131-
await mockedPage.getByRole("tab", { name: "Stats" }).click();
132+
await mockedPage.getByRole("tab", { name: "Monitoring" }).click();
132133

133134
// Check that confidence percentages are displayed
134135
// PII Detection has 92% confidence
@@ -140,7 +141,7 @@ test.describe("Agent Stats Tab", () => {
140141
});
141142
});
142143

143-
test.describe("Agent Stats Tab - Empty State", () => {
144+
test.describe("Agent Monitoring Tab - Empty State", () => {
144145
test("should show empty state when no stats available", async ({ page }) => {
145146
// Set up mocks with empty stats
146147
await mockRoutes.agents(page);
@@ -152,10 +153,11 @@ test.describe("Agent Stats Tab - Empty State", () => {
152153
await expect(page.getByText("Customer Support Bot")).toBeVisible();
153154

154155
// Navigate to stats tab
155-
await page.getByRole("tab", { name: "Stats" }).click();
156+
await page.getByRole("tab", { name: "Monitoring" }).click();
156157

157-
// Time range selector should still be visible in empty state
158-
await expect(page.getByRole("textbox", { name: "Time Range" })).toBeVisible();
158+
// Time range selector should still be visible in empty state (TimeRangeSwitch)
159+
const timeRangeSwitch = page.locator('[class*="TimeRangeSwitch"]').first();
160+
await expect(timeRangeSwitch).toBeVisible();
159161

160162
// Should show empty state message
161163
await expect(page.getByText("No stats available")).toBeVisible();
@@ -165,7 +167,7 @@ test.describe("Agent Stats Tab - Empty State", () => {
165167
});
166168
});
167169

168-
test.describe("Agent Stats Tab - Refetch Flow", () => {
170+
test.describe("Agent Monitoring Tab - Refetch Flow", () => {
169171
test("should update values when data is refetched", async ({ page }) => {
170172
let requestCount = 0;
171173

@@ -232,7 +234,7 @@ test.describe("Agent Stats Tab - Refetch Flow", () => {
232234
await expect(page.getByText("Customer Support Bot")).toBeVisible();
233235

234236
// Navigate to stats tab
235-
await page.getByRole("tab", { name: "Stats" }).click();
237+
await page.getByRole("tab", { name: "Monitoring" }).click();
236238

237239
// Verify initial values are displayed (use first() to get summary stat, not table cell)
238240
await expect(page.getByText("100", { exact: true }).first()).toBeVisible();
@@ -250,7 +252,7 @@ test.describe("Agent Stats Tab - Refetch Flow", () => {
250252
});
251253
});
252254

253-
test.describe("Agent Stats Tab - Error State", () => {
255+
test.describe("Agent Monitoring Tab - Error State", () => {
254256
test("should show error state when API fails", async ({ page }) => {
255257
// Set up mocks with failing stats endpoint
256258
await mockRoutes.agents(page);
@@ -262,7 +264,7 @@ test.describe("Agent Stats Tab - Error State", () => {
262264
await expect(page.getByText("Customer Support Bot")).toBeVisible();
263265

264266
// Navigate to stats tab
265-
await page.getByRole("tab", { name: "Stats" }).click();
267+
await page.getByRole("tab", { name: "Monitoring" }).click();
266268

267269
// Should show error state
268270
await expect(page.getByText("Failed to load stats")).toBeVisible();

0 commit comments

Comments
 (0)